Redis入门
来源:互联网 发布:眼睛颜色 知乎 编辑:程序博客网 时间:2024/06/06 00:34
redis常用命令
标签(空格分隔): redis
基础命令
- 获得符合规则的键名列表
KEYS pattern
- 判断一个键是否存在
EXISTS key存在返回1,否则返回0
- 删除键(可以删除一个或多个键)
DEL key [key...]返回删除的键的个数
- 获取键值的数据类型
TYPE key返回值可能为string(字符串类型)、hash型(散列类)、list(列表类型)、set(集合类型)、zset(有序集合类型)
字符串类型命令
基本命令
赋值和取值
SET key valueGET key当键值不存在的时候会返回空
递增数字
INCR num当存储的字符串是整数形式时,通过此命令能让当前键值递增,并返回递增后的值当操作的键不存在的时候默认为0,所以第一次递增后的结果是1当键值不是整数时会报错
递减数字
DECR key
实践
文章访问量统计
可以为每篇文章使用
post:文章ID:page.view
作为键,当每次用户访问文章的时候可以使用
INCR post:文章ID:page.view获取其返回值作为文章的浏览次数
生成自增ID
可以对于每一类对象使用名为
对象类型(复数):count
的键,例如(users:count),当每增加一个新对象时使用INCR命令递增该键的值,然后将其值返回作为对象的id
INCR posts:count将其返回自赋给新增对象的id属性中
存储文章数据
// 下面是PHP相关伪代码$postID = INCR posts:count// 将博客文章的其他元素转为json$postContent = json_encode([title'=>$title, 'content'=>$content, 'author'=>$author, 'time'=>$time])// 新增文章SET post:$postID:data $postContent
命令拾遗
增加指定的整数
INCRBY key increment可以通过指定increment的值来指定一次增加的数值
减少指定的整数
DECRBY key decrementDECRBY key 5 相当于 INCRBY key -5
增加指定浮点数
INCRBYFLOAT key increment类似于INCRBY, 只不过其可以递增一个双精度浮点数
向尾部追加值
APPEND key value向键值的末尾追加value, 如果键不存在则将该键的值设为value,相当于SET key value返回值是追加后字符串的总长度如果参数值中包含空格,则需要使用双引号进行区分SET key helloAPPEND key " world"
获取字符串长度
STRLEN key返回键值的长度,不存在则返回0
同时获得/设置多个键值
MGET key [key ...]MSET key value [key value ....]
位操作
GETBIT key offset可以获得一个字符串类型键指定位置的二进制的值(从0开始)SETBIT key offset可以设置一个字符串类型键指定位置的二进制的值(从0开始)BITCOUN key可以获取字符串类型键中值为1的二进制位个数BITOP operation destkey key [key ...]对对个字符串类型键进行位运算BITPOS key offset可以获取指定键的第一个位置是0或者1的位置
散列类型命令
基本命令
赋值和取值
HSET key field value用于给字段复制HGET key field获取字段的值HSET car:1 name BWMHGET car:1 nameHSET命令不区分插入和更新操作,当字段不存在时则执行新增操作,HSET返回1当字段存在时,则执行更新操作,HSET返回0当需要同时设置多个字段的值时可以使用HMSETHSET key field1 value1HSET key field2 value2上述代码可以写成HMSET key field1 value1 field2 value2相应的HMGET也可以同时获取多个字段的值HMGET key field1 field2获取键中所有字段和字段值HGETALL key返回的结果为field1value1field2value2在一些编程语言提供的redis客户端会自动将这些数据进行转换
判断字段是否存在
HEXISTS key field判断一个字段是否存在,存在返回1,否则返回0(如果键不存在也返回0)
当字段不存在时赋值
HSETNX key field valueHSETNX和HSET相似,区别在于如果字段已经存在,HSETNX命令不做任何操作
增加数字
HINCRBY key field increment给字段值增加指定的整数如果key不村子,则会自动简历该键,并在进行增加操作之前创建该字段,并将其值设为1返回值是增值后的字段值
删除字段
HDEL key field [field ..]可以删除一个或多个字段,返回值是被删除的字段个数
实践
存储文章数据
如果向上述的将文章的所有信息已json的方法存储,在修改文章时必须全部修改,因此可以采用散列的方式进行存储。
HMSET post:1 title "第一篇文章" author mickle time 2017年6月18日 content "文章内容"
存储文章的缩略名
一般发布文章时,会需要提供文章的缩略名(唯一),我们可以提供一个散列,来存储缩略名和文章id的关系
// 发布文章的伪代码// 通过生成器获取文章的id$postID = INCR posts:count// 判断输入的缩略名是否存在$isExistSlug = HSETNX slug.to.id $slug $postIDif $isExistSlug is 0 // 返回为0代表用户字段已经设置过了,需要重新输入用户名 // 退出新增 exitHMSET post:$postID title $title content $content slug $slug// 根据文章缩略名获取文章的id$postID = HGET slug.to.id $slugif not $postID print 文章不存在 exit$post = HGEALL post:$postIDprint 文章标题: $post.title
命令拾遗
只获取字段名或者字段值
HKEYS key获取键中的所有字段名HVALS key获取键中的所有字段值
获取字段数量
HLEN key获取键中字段的数量
列表类型命令
命令
向列表两端增加元素
LPUSH key value [value ...]向列表左边添加元素,返回值为增加元素后列表长度RPUSH key value [value ...]向列表右边添加元素,返回值为增加元素后列表长度
从列表两端弹出元素
LPOP key从列表左边弹出一个元素,并返回弹出元素的值RPOP key从列表右边弹出一个元素,并返回弹出元素的值想要实现队列可以使用加入队列 RPUSH 移除队列 LPOP(常用)加入队列 LPUSH 移除队列 RPOP
获取列表中元素的个数
LLEN key返回列表长度,如果键不存在时返回0redis会直接读取现成的值,时间复杂度为O(1)
获得列表片段
LRANGE key start stop返回索引从start到stop之间的所有元素(包含头和尾),索引值从0开始redis同时支持负索引,负数表示从右边开始计算可以使用LRANGE 0 -1 获取列表中所有的元素如果start的位置在stop后,则会返回空列表,例如 LRANGE 5 2如果stop大于实际的索引返回,则只会返回到列表最右边的数据
删除列表中指定的值
LREM key count value删除列表中前count个值为value的元素, 返回实际删除的元素个数根据count值的大小,redi会做出不同的处理count = 0, 删除所有值为value的元素count > 0, 从左边删除前count个值为value的元素count < 0, 从右边删除前count个值为value的元素
实践
存储文章列表ID
前面使用散列类型存储了文章的详情,现在使用列表存储文章的ID,使其能够达到分页的效果
// 文章分页的伪代码$postID = INCR posts:count// 插入文章,同上// 将id插入到列表中LPUSH posts:list $postID// 分页$postPerPage = 10$start = ($current - 1) * $postPerPage$end = $current * $postPerPage - 1$postId = LRANGE posts:list $start $stop// 通过ID获取文章详情for $item in $posts : $post = HGETALL post:$item print '文章标题', $post.title
存储文章评论列表
如果评论不修改的话,可以使用列表能够进行有效的存储
$comment = json_encode(['author' => $author, 'time' => $time, 'content' => $content, 'email' => $email])LPUSH post:42:comment $comment读取评论直接使用LRANGE 即可
命令拾遗
获得/设置指定索引的元素值
LINDEX key index获取指定索引的元素值LSET key index value设置指定索引的元素值
保留列表指定的片段
LTRIM key start stop删除start到stop(包含两端)之外的所有元素,使用方法和LRANGE一致
向列表中插入元素
LINSERT key BEFORE/AFTER pivot value先从左到右查找pivot,找到之后 根据BEFORE/AFTER来进行向前或向后插入value,返回插入后列表的长度
将元素从一个列表转移到另一个列表
RPOPLPUSH source destination先从source列表中右边POP一个元素,然后加入destination的左边,并返回该元素的值当source和destination相同时,会将元素从末尾移到头部
集合类型命令
命令
增加/删除元素
SADD key member [member]相机和中增加一个或多个元素, 如果键不存在则会自动创建,如果元素已存在则不会加入返回值是成功加入的个数SREM key member [member]从集合删除一个或多个元素,并返回成功删除的个数
获得集合中的所有元素
SMEMBERS key返回集合中所有的元素
判断元素是否存在于集合中
SISMEMBER key member当值存在返回1,键或值不存在时返回0
集合间运算
SDIFF key [key ...]执行多个集合之间的差集例如SDIFF setA setB setC首先计算setA-setB,将其结果于setC在做差集SINTER key [key ..。]执行多个集合之间的交集,效果同上SUNION key [key ...]执行多个集合之间的并集,并自动去除相同元素
实践
存储文章标签
// 新增标签SADD post:42:tags PHP JAVA PYTHON// 删除标签SREM post:42:tags PHP// 显示所有标签SMEMBERS post:42:tags
通过标签搜索文章
可以通过建立一个tag:标签名称:posts的集合来存储相应的文章
// 添加标签下的文章idSADD tag:JAVA:posts 1,11,32// 获取JAVA标签的所有普文章SMEMBERS tag:JAVA:posts
命令拾遗
获取集合中元素个数
SCARD key
进行集合运算并将结果存储
SDIFFSTORE destination key [key ...]SINTERSTORE destination key [key ...]SUNIONSTORE destination key [key ...]
上述命令和集合的运算一致,不过此命令会将结果存入destination中
随机获得集合中的元素
SRANDMEMBER key [count]
用来随机从集合中获取一个元素,而且根据传递的count参数,返回也不同
count为正数时,会随机从集合中去除count个不重复的元素,如果count大于集合的元素个数,则会取出全部元素
count为负数时,会从随机从集合中取出|count|个元素的值。这些元素可能相同
从集合中弹出一个元素
SPOP key
从集合中随机弹出一个数(即返回元素的值并删除他)
有序集合类型命令
命令
增加元素
ZADD key score member [score member]
向有序集合中加入一个元素和该元素的分数。如果该元素已经存在则会用新分数替换旧分数
返回值是新加入到集合中的元素个数
获得元素的分数
ZSCORE key member
获取排名在某个返回的元素列表
ZRANGE key start stop [WITHSCORES]ZREVRANGE key start stop [WITHSCORES]
ZRANGE 从小到大的顺序返回索引start到stop之间所有的元素(包含两端),如果想同时获取分数,则加上WITHSCORES
ZREVRANGE 则是按从大到小的顺序
获得指定分数范围的元素
ZRANGBYSCORE key min max [WITHSCORES] [LIMIT offset count]ZREVRANGBYSCORE key min max [WITHSCORES] [LIMIT offset count]ZRANGBYSCORE scoreboard 60 +inf LIMIT 1 3 获得分数高于60分从第二人开始的三个人
元素按照从小到大的顺序返回分数在min到max(包含两端)之间的元素
如果希望不包含端点值,可以在分数前面加上(
ZRANGBYSCORE scoreboard 80 (100
包含80但不包含100
-inf和+inf表示负无穷和正无穷
ZREVRANGBYSCORE 中的min和max是相反的
增加某个元素的分数
ZINCRBY key increment member
增加一个元素的分数,返回值是更改后的分数, increment为负表示减分
如果元素不存在,则会在进行操作前建立元素并赋值为0后再进行操作
实践
实现点击量的排序
我们可以使用post:page.view 来作为点击量的排行榜键// 每当有文章被点击了ZINCRBY post:page.view 1 文章ID// 再通过下面命令获取点击量在前10的文章ZREVRANGE post:page.view 0 9 WITHSCORES
改进文章发布时间
可以存入文章发布时间的时间戳作为文章的分数值,这样可以快速的使用有序集合来获取最近发布的时间
命令拾遗
获得集合中元素的数量
ZCARD key
获得指定分数范围内的元素个数
ZCOUNT key min max
删除一个或多个元素
ZREM key member [member ...]
按照排名范围删除元素
ZREMRANGEBYRANK key start stop
命令按照元素分数从小到大排序,删除指定排名范围的元素(索引从0开始),返回值时被删除元素的数量
按照分数范围删除元素
ZREMRANGEBYSCORE key min max
删除指定分数范围内的所有元素,返回被删除元素的数量
获得元素的排名
ZRANK key member 最小元素排名为0ZREVRANK key member 最大元素排名为0
计算有序集合的交集
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
- Redis入门
- Redis 入门
- Redis入门
- redis入门
- redis入门
- Redis入门
- Redis入门
- redis 入门
- Redis入门
- Redis入门
- Redis入门
- redis入门
- Redis入门
- Redis入门
- redis入门
- Redis入门
- redis入门
- Redis入门
- Android 常见内存泄露
- Android-----------HttpURLConnection的 get 请求和 post 请求 (可以下载浏览的内容)
- (Python)异常处理try...except、raise
- sourceInsight4 破解步骤
- C++入门知识
- Redis入门
- RSA签名与验签
- 以太坊连载(十):以太坊GO、JAVA、PYTHON、RUBY、JS客户端介绍
- CSS文件和样式命名规范,仅供参考
- 习题5-6 使用函数输出水仙花数
- Intellij Idea 工具不能识别Mybatis Mapper Interface
- CDN(内容分发网络)技术原理
- 卡特兰数讲解
- 我要15天消化掉Android官方API指南--第二天