key和value的存储大小限制
String:value 512M
List:元素个数2^32-1,4294967295(430w)
Set(zset):元素个数最2^32-1,4294967295
Hash:键值对个数最多为2^32-1,也就是4294967295个。
redisObjec(父类)统一五种类型,之间传递方便(隐藏具体类型信息)。redisObjec定义type和encoding识别不同传递时
五个成员:对象类型(type)、底层编码(encoding)、lru(最近访问时间)、refcount(引用数)、*ptr(指向具体对象的指针)。一共占16字节。
一、 String
(1)常用命令如下:
(2)Redis中的自增命令和自减命令:
(3)其他:
1、获取字符串长度
2、往字符串append内容
3、设置和获取字符串的某一段内容
4、设置及获取字符串的某一位(bit)
5、批量设置一系列字符串的内容
三、List
双向链表,dup,free,match对应节点复制,释放,节点值对比函数,listNode节点用void * 指针,对void * 里数据自定义节点值的复制、释放和比较函数
底层实现是quicklist(快速列表:ziplist 压缩列表 和linkedlist 双端链表 )。两端插入和弹出,可当数组、队列、栈等,O(1)
场景:粉丝列表,最新消息排行,消息队列
优缺点:支持反向查找和遍历,方便操作,带来额外内存开销。
四、Set
底层实现是intset(整数集合,元素不多时用)或hashtable。
intset:有序,无重复。 16,32,64位的。如所有整数都16位,加32位升级成32位数组。
HashMap:value永远为null的,计算hash来快速排重,这也是set能提供判断一个成员是否在集合内的原因。
列表存储多个相同字符串,集合用散列表保证每个字符串不相同,Set:各不相同的元素,无序排列。
场景:关注人,粉丝。Redis提供了求交集、并集、差集,实现如共同关注、二度好友
https://blog.csdn.net/xlgen157387/article/details/60958657