String、List、Hash、Set、SortedSet的常用方法和底层编码实现
STRING (字符串)
实现原理
底层由SDS(Simple Dynamic String, 简单动态字符串)实现。
特点:
- 1个
value最大支持512M的数据 - 可以存储二进制字符串
常用命令:
- SET key value
- 设置
key的值的value
- 设置
- GET key
- 获取
key的值
- 获取
- INCR key
key的值自加1- key 的值必须要是整数 且要在64位int范围内
[-2^63, 2^63 - 1]
- INCRBY key increment
key += increment
- DECR key
- key的值自减1
- DECRBY key increment
key -= increment
- GETSET key value
- 设置key的值并返回老的值
- SETRANGE key offset value
key的值从offset开始设置为value- key看做是一个指针, 这个命令把key + offert的地址开始设置为了value,不检查长度
- MGET key [key …]
- 获取多个
key的值
- 获取多个
- MSET key value [key value …]
- 同时设置多个键的值
- SETNX key value
- 只有
key不存在的时候才设置key的值为value
- 只有
- SETEX key seconds value
- 设置
key的过期时间, 过期就自动被删了
- 设置
LIST (列表)
实现原理
底层使用 quicklist 实现,quicklist 是一个 ziplist 的双向链表, 每个 ziplist 最大值可在配置文件中的list-max-ziplist-size设置, 默认为 -2 (8kb)
Redis的列表与双端队列(deque)类似
常用方法
- RPUSH key value [value …]
- 将值推入到列表
key的右端 - 相当于
python的append()
- 将值推入到列表
- LPUSH key value [value …]
- 将值推入列表左端
- 相当于
python列表的insert(0, value) - 将多个
value按从左到右的顺序lpush,最右边的值在最左边
- LPOP
- 列表左端弹出一个值并返回弹出的值
- RPOP
- 列表右端弹出一个值
- LRANGE key start stop
- 获取列表在指定范围上的所有值, 包括
start和stop
- 获取列表在指定范围上的所有值, 包括
- LINDEX
- 获取列表在给定位置上的单个元素
- LSET key index value
- 设置列表
key的索引为index的值value
- 设置列表
- LTRIM key start stop
- 只保留索引 在
[start, end]中的元素的值, 干掉其他的
- 只保留索引 在
- LINSERT key BEFORE|AFTER pivot value
- 在列表
key的值为pivot的元素前或后插入一个值为value的元素 - 存在多个相同值的元素只管最左侧的元素
- 成功: 返回列表长度, 指定元素不存在不执行操作, 返回-1, 列表不存在返回0
- 在列表
HASH (哈希表)
实现原理
底层由 hashtable 与 ziplist 实现
满足以下2个条件是使用 ziplist, 否则转化为hashtable编码
- 哈希保存的键值对数量小于
hash-max-ziplist-entries(默认为512)个 - 所有键值对的键和值的字符串长度都小于
hash-max-ziplist-value(默认为64) 字节
和 Python 的字典类似, 不过 Redis 的 HASH 的 key 和 value 都只能是STRING, 不能嵌套
常用方法:
- HSET key field value
- 将哈希表
key中的字段field的值设为value
- 将哈希表
- HGET key field
- 获取哈希表
key中字段field的值
- 获取哈希表
- HEXISTS key field
- 查询哈希表
key中,指定字段filed是否存在
- 查询哈希表
- HVALS key
- 获取哈希表
key中的所有值
- 获取哈希表
- HLEN key
- 获取哈希表中键值对的数量
- HKEYS key
- 获取哈希表
key中的所有键
- 获取哈希表
SET (集合)
底层实现
底层由 hashtable 和 intset 实现
当集合的元素都是整数 且 元素个数小于 set-max-intset-entries (默认为512) 时集合的编码对象是intset, 其他情况都是哈希表
常用命令
- SADD key member [member …]
- 将
member添加到集合key中
- 将
- SMEMBERS key
- 获取集合
key的所有元素
- 获取集合
- SCARD key
- 获取集合的元素数量
- SDIFF key1 [key2 …]
- 求给定所有集合的差集(
s1-s2-s3-...)
- 求给定所有集合的差集(
- SINTER key1 [key2]
- 求给你所有集合的交集(
s1&s2&s3...)
- 求给你所有集合的交集(
- SUNION key1 [key1…]
- 求给定所有集合的并集(
s1|s2|s3...)
- 求给定所有集合的并集(
- SDIFFSTORE destination key1 [key2 …]
- 求给定所有集合的差集, 并存储到
destination中
- 求给定所有集合的差集, 并存储到
- SINTERSTORE destination key [key …]
- 求给定所有集合的交集, 并存储到
destination中
- 求给定所有集合的交集, 并存储到
- SUNIONSTORE destination key [key …]
- 求给定所有集合的并集, 并存储到
destination中
- 求给定所有集合的并集, 并存储到
- SREM key member [member …]
- 从集合中删除一个或多个元素
- SPOP key [count]
- 随机删除
count个幸运元素, 不指定count则随机删除一个
- 随机删除
- SMOVE source destination member
- 将
member从集合source移动到destination中 - 删掉
source中的member同时向destination中添加member(不管destination中有没有)
- 将
- SISMEMBER key member
- 判断
member是否是集合中的元素
- 判断
SORTED_SET (有序集合)
底层实现
底层由ziplist和skiplist(跳表实现)
常用命令
- ZADD key [NX|XX] [CH] [INCR] score member [score member …]
- 将一个或多个
member元素及其score值加入到有序集合key中 - 如果某个
member已经是有序集合的元素,那么更新这个member的score值 - 参数:
- XX: 仅更新已经存在的元素, 不添加元素。
- NX: 只添加新元素, 不改变已有元素
- CH: 将返回值修改为添加和修改的元素数量总数(不加此参数值返回添加的元素数量)
- INCR: 将
member的分值加上score(与ZINCRBY功能相同)
- 将一个或多个
- ZSCORE key member
- 获取有序集合中指定元素的分数
- ZCARD key
- 获取有序集合
key的元素数量
- 获取有序集合
- ZCOUNT key min max
- 获取值在
[min, max]之间的元素数量
- 获取值在
- ZRANGE key start stop [WITHSCORES]
- 获取有序集合 key 中,索引在[start, stop]的元素(从小到大排序)
-1表示最后一个元素,-2表示倒数第二个元素
- ZREVRANGE key start stop [WITHSCORES]
- 与
ZRANGE功能相同, 从大到小排序
- 与
- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
- 获取有序集合中分数在
[min, max]中的元素 min和max可以是inf和-inf
- 获取有序集合中分数在
- ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
- 与
ZRANGEBYSCORE功能相同, 从大到小排序
- 与
- ZRANK key member
- 返回有序集合中member元素的排名(按分值从小到大排序), 分值相同按键的
ascii字母排序
- 返回有序集合中member元素的排名(按分值从小到大排序), 分值相同按键的
- ZREVRANK key member
- 返回
member元素从大到小的排名
- 返回
- ZREM key member [member …]
- 删除有序集合中指定的元素
- ZREMRANGEBYRANK key start stop
- 删除有序集合中排名在
[start, stop]之间的元素
- 删除有序集合中排名在
- ZREMRANGEBYSCORE key min max
- 删除值在
[min, max]之间的元素
- 删除值在
- ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
- 计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination
- ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
- 计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination
WEIGHTS参数可指定权重AGGREGATE参数可指定聚合方式 和|最大值|最小值, 默认是 SUM