Redis中数据结构与数据操作的示例分析


小编给大家分享一下Redis中数据结构与数据操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Redis完成数据操作的速度能达到微秒级别,Redis能有这么突出的表现,主要原因有两个:Redis是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快;Redis拥有高效的数据类型和数据结构。为了实现key到value的快速访问,Redis使用哈希表来存储键值对,哈希桶中entry保存了指向实际key和value的指针,即使值是一个集合,也可以通过value指针查找到。当哈希表中数据越来越多后,会出现哈希冲突,也就是多个key的哈希值可能对应到同一个哈希桶中。Redis使用链式哈希来解决哈希冲突,就是将同一个哈希桶中的多个元素用一个链表来保存,元素之间依次用指针链接。如果哈希冲突越来越多,会导致哈希冲突链过长,进而导致查找元素耗时长、效率低。为了解决这个问题,Redis会对哈希表进行rehash操作,将多个entry元素分散保存,减少单个哈希桶中的元素个数,从而减少单个桶中的冲突。Redis默认使用两个全局哈希表来进行高效rehash,一开始默认使用哈希表1,哈希表2不分配空间,当数据不断增多时,redis通过如下步骤进行rehash:给哈希表2分配更大的空间把哈希表1中的数据拷贝到哈希表2中释放哈希表1的空间,留作下一次rehash扩容备用但是第2步如果一次性将大量数据进行拷贝,可能会造成Redis线程阻塞,无法服务其他请求,所以Redis采用了渐进式rehash,就是每处理一个请求,顺带将这个索引位置上的所有entry进行拷贝。对于String类型的value来说,找到哈希桶就可以直接进行CRUD操作了,而对于集合来说,通过全局哈希表找到对应的哈希桶后,在集合中再进行CRUD。集合的操作效率与底层数据结构和操作复杂度有关。单元素操作是基础,操作复杂度为O(1);Hash:HGET、HSET、HDEL;Set类型的SADD、SREM、SRANDMEMBER等。范围操作非常耗时,操作复杂度为O(N)。Hash:HGETALL;Set:SMEMBERS免费云主机域名;List:LRANGEZSet:ZRANGE统计操作通常高效,操作复杂度为O(1)。例外情况只有几个,操作复杂度为O(1)。List:LPOP、RPOP、LPUSH、RPUSH以上是“Redis中数据结构与数据操作的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注百云行业资讯频道!

相关推荐: ORA-14102: 只能指定一个 LOGGING 或 NOLOGGING 子句

问题描述:在做大批量索引迁移时,发现报错 ORA-14102: 只能指定一个 LOGGING 或 NOLOGGING 子句 造成此问题的原因是: 当导入的表里没有数据时,在给表创建索引和主键时会出现该错误。 解决办法有两种: 一、把语句中含有 NOLOGGIN…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/03 22:08
下一篇 01/03 22:08