书接上文,继续说说redis的基本特性。
列表:
- 添加操作:
- rpush key value [value ...]
- lpush key value [value ...]
- 取元素:
- lrange key startindex endindex(lrange key 0 -1可取所有元素)
- 在元素前或后添加元素:
- linsert key before|after pivot value 返回值代表当前命令的长度
- 取指定索引下标元素
- lindex key index
- 获取列表长度
- llen key
- 删除操作:
- lpop key
- rpop key
- 删除指定元素
- lrem key count value
- lrem会从列表中查找等于value的元素根据count不同分情况删除:count>0,从左到右删除count个元素,count<0,从右到左删除count个元素,count=0,删除所有。
按照索引范围修剪列表 - lrem key count value
- ltrim key start end
- 修改:
- lset key index newValue
- 阻塞操作:
- blpop key [key ...] timeout
- brpop key [key ...] timeout
- timeout为阻塞时间,timeout=0则一直阻塞,直到列表中有数据
- 使用场景:
- 消息队列:lpush+brpop组合实现
- 栈:lpush+lpop
- 队列:lpush+rpop
- 有限集合:lpush+ltrim
集合:
- 添加元素:sadd key element [element ...] 返回添加成功的个数
- 删除元素:srem key element [element ...] 返回删除成功的个数
- 计算元素个数:scard key 时间复杂度:O(1)利用的是Redis内部的变量
- 判断元素是否在集合中:sismember key element
- 随机从集合返回指定元素个数:srandmember key [count] count不写默认为1
- 从集合随机弹出元素:spop key
- 获取所有元素:smembers key
- 集合间操作:
- 求交集 :sinter key [key ...]
- 求并集:sunion key [key ...]
- 求差集:sdiff key [key ...]
- 将交集、并集、差集结果保存:sinterstore destination key [key ...] 差集并集同理。。
- 使用场景:
- 兴趣标签
有序集合:
- 添加成员:zadd key score member [score member ...] 返回结果代表添加成员的个数
- 计算成员个数:zcard key 时间复杂度:O(1)
- 计算某成员的分数:zscore key member
- 计算成员排名:zrank key member zrevrank key member
- 删除成员:zrem key member [member ...]
- 增加成员的分数:zincrby key increment member
- 返回指定排名范围的成员:zrange key start end [withscores] zrevrange key start end [withscores]
- 返回指定分数范围的成员:zrangebyscore key min max [withscores] [limit offset count] zrevrangebyscore key min max [withscores] [limit offset count]
- 返回指定分数范围成员个数:zcount key min max
- 删除指定排名内的升序元素:zremrangebyrank key start end
- 删除指定分数范围的成员:zremrangebyscore key min max
- 交集:zinterstore destination numkeys key [key ...] [weights weight [weight ...]]
[aggregate sum|min|max] - 并集:zunionstore destination numkeys key [key ...] [weights weight [weight ...]]
[aggregate sum|min|max] - 使用场景:用户赞数显示等。