目录
存储方式 key-value,可支持数字,性能高,
用处 微博数,粉丝数
基本命令
set key value
get key
getrange key start end #返回key中字符串值的从start到end的字符
mget key1 key2 key3… #获取一个或多个key的值
setex key seconds value #将值关联到key并且设置key的过期时间(以秒为单位)
setnx key value #当key不存在时设置key的值
decr key #将key存储的数字减一
append key value #如果key是已存在的字符串,则在value末位后追加字符串
底层实现 String底层是动态字符串SDS(simple dynamic string) SDS结构有五种header定义,为了满足不同长度字符串可以使用不同大小的header,节省内存。
双链表实现,可以支持队列机制,或者存储按时间顺序排序的某些信息,支持反向查找和遍历微博的关注列表、粉丝列表、消息列表等
常用命令
LPUSHX key value #将一个值插入到已存在的列表头部
LPUSH key value1 [value2] #将一个或多个值插入到列表头部
LPOP key #移出并获取列表的第一个元素
LLEN key #获取列表长度
list底层链表 早期使用ziplist或者linkedlist,redis3.2版本后list使用quickList
存储对象数据,可以直接读取或修改特定属性的值,可应用于redis分布式锁
存放用户信息,商品信息
注意:不要全部取整个hash,性能开销比较大,不推荐做复杂查询,会增加维护成本
常用命令
HDEL key field1 [field2] #删除一个或多个哈希表字段
HEXISTS key field #查看哈希表 key 中,指定的字段是否存在。
HGET key field #获取存储在哈希表中指定字段的值。
HGETALL key #获取在哈希表中指定 key 的所有字段和值
HINCRBY key field increment #为哈希表 key 中的指定字段的整数值加上增量 increment 。
HMGET key field1 [field2] #获取所有给定字段的值
HSET key field value #将哈希表 key 中的字段 field 的值设为 value 。
HSETNX key field value #只有在字段 field 不存在时,设置哈希表字段的值。
底层实现 hash底层是dict encoding使用ziplist和hashtable
不重复数据的集合,如订阅、关注用户id等信息 存放微博的关注人,粉丝人,快速找到共同好友
常用命令
SADD key member1 [member2] #向集合添加一个或多个成员
SINTER key1 [key2] #返回给定所有集合的交集
SUNION key1 [key2] #返回所有给定集合的并集
底层实现 encoding使用intset和hashtable
有序集合,带权重的集合,可以根据权重进行排序或查找和set相⽐,sorted set增加了⼀个权重参数score,使得集合中的元素能够按score进⾏有序排列。
存放直播间的在线用户列表,以及用户送的礼物,弹幕消息等。
常用命令
ZADD key score1 member1 [score2 member2] #向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZREM key member [member ...] #移除有序集合中的一个或多个成员
ZCARD key #获取有序集合的成员数
ZCOUNT key min max #计算在有序集合中指定区间分数的成员数
ZINCRBY key increment member #有序集合中对指定成员的分数加上增量 increment
底层实现 encoding使用ziplist或者skiplist
为什么使用跳表skiplist