中如何提升访问速度,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
合理的数据编码
Redis 使用对象(redisObject)来表示数据库中的键值,当我们在 Redis 中创建一个键值对时,至少创建两个对象,一个对象是用做键值对的键对象,另一个是键值对的值对象。
typedef struct redisObject{ //类型:包含字符串对象、列表对象、哈希对象、集合对象、有序集合对象。 unsigned type:4; //编码 unsigned encoding:4; //指向底层数据结构的指针 void *ptr; //... }robj;
编码介绍:
1)String:存储数字的话,采用 int 类型的编码,如果是非数字的话,采用 raw 编码;
2)List:List 对象的编码可以是 ziplist 或 linkedlist,字符串长度 < 64 字节且元素个数 < 512 使用 ziplist 编码,否则转化为 linkedlist 编码;
备注:这两个条件是可以修改的,在 redis.conf 中:list-max-ziplist-entries 512list-max-ziplist-value 64
3)Hash:Hash 对象的编码可以是 ziplist 或 hashtable。
当 Hash 对象同时满足以下两个条件时,Hash 对象采用 ziplist 编码,否则就是 hashtable 编码。
1.Hash 对象保存的所有键值对的键和值的字符串长度均小于 64 字节。2. Hash 对象保存的键值对数量小于 512 个。
4)Set:Set 对象的编码可以是 intset 或 hashtable,intset 编码的对象使用整数集合作为底层实现,把所有元素都保存在一个整数集合里面。
保存元素为整数且元素个数小于一定范围使用 intset 编码,任意条件不满足,则使用 hashtable 编码。
5)Zset:Zset 对象的编码可以是 ziplist 或 zkiplist,当采用 ziplist 编码存储时,每个集合元素使用两个紧挨在一起的压缩列表来存储。
Ziplist 压缩列表第一个节点存储元素的成员,第二个节点存储元素的分值,并且按分值大小从小到大有序排列。
当 Zset 对象同时满足一下两个条件时,采用 ziplist 编码,如果不满足以上条件的任意一个,ziplist 就会转化为 zkiplist 编码。
Zset 保存的元素个数小于 128。Zset 元素的成员长度都小于 64 字节。
备注:这两个条件是可以修改的,在 redis.conf 中:zset-max-ziplist-entries 128zset-max-ziplist-value 64
免责声明:本站发布的内容(图片、视频和文字)以原创、来自本网站内容采集于网络互联网转载等其它媒体和分享为主,内容观点不代表本网站立场,如侵犯了原作者的版权,请告知一经查实,将立刻删除涉嫌侵权内容,联系我们QQ:712375056,同时欢迎投稿传递力量。
Copyright © 2009-2022 56dr.com. All Rights Reserved. 特网科技 特网云 版权所有 特网科技 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 百度云 中国互联网举报中心 增值电信业务经营许可证B2
建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站