1、简介
Redis的数据结构有五种:string、hash、list、set、zset
2、内部编码及场景
- string
- int:8个字节的长整型;embstr:小于等于44个字节的字符串;raw:大于44个字节的字符串
- 优点:常数复杂度获取字符串长度、杜绝缓冲区溢出、减少字符串修改时内存分配次数
- 场景:计数器 incr、decr;分布式锁 setnx expire;json 存储对象
- hash
- ziplist:元素个数小于512、长度小于64,ziplist即节约内存又保证读写效率
- hashtable:而hashtable的读写时间复杂度为O(1),优于ziplist,但是hashtable会占据跟多的内存空间
- 场景:变化较为频繁的对象、购物车(key–>用户id,field–>商品id,value–>数量)
- list
- ziplist:元素个数小于512、长度小于64,使用ziplist可以在节约内存的同时保证读写效率
- linkedlist
- 场景:消息队列 rpush lpop;排行榜 rpush lrange、用户消息列表
- set
- intset:元素均为整形、且个数小于512
- hashtable:
- 场景:求交集(如:共同好友、共同关注)、
- 重用命令:sadd(添加元素)、smembers(查看元素)、sinter(交集)、sunion(并集)、sdiff(差集)
- zset
- ziplist:元素个数小于128、长度小于64
- skiplist:
- 场景:排行榜(销量、积分、成绩、热点话题等)