码迷,mamicode.com
首页 > 数据库 > 详细

redis数据库

时间:2018-12-07 16:45:21      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:操作   unix时间   服务   属性   unix   cpu   除了   就是   redis   

    (1)每个redis客户端都可以有自己的目标数据库,默认客户端选择的是0号数据库,但是客户端也可以自己选择数据库。同时客户端也会记录当前的目标数据库,这个属性是一个指向redisdb数组(记录所有可连接的数据库)其中一个。

    (2)redis是个键值对数据库,由一个字典(哈希表)保存所有的键值对,这个字典成为键空间。对redis键的增删改查其实都是对键空间的操作。每次读写键之后,redis都会做一些维护操作,例如更新该数据库的键空间被命中和不被命中次数、更新键的LRU时间、如果键过期就自动删除。

    (3)redis中除了键空间外,还有一种哈希表结构的空间:过期字典。过期字典中的键都是指针,专门指向键空间中的键,值是毫秒精度的Unix时间戳。

    (4)判断了一个键为过期后,该如何去删除,什么时候会被删除呢??有三种删除策略:

           (a)定时删除:待到特定时刻删除过期键。

           (b)惰性删除:放任过期键不管,只有每次取到一个键时,判断为过期的话就立即删除,如果该键一直没被客户端查到,就一直不删。

           (c)定期删除:每隔一段时间,就去过期空间检查,至于要删除多少键,检查多少个数据库,都是由算法来决定的。

            对于上面三种删除策略,各有好坏,定时删除对于内存来讲是个好事,可以及时释放内存,但是一个很大的弊端就是,如果在某个时刻过期键特别多的话,定时操作刚好在这段时间,那么会占用相当大一部分cpu资源,对服务器响应时间和吞吐量造成影响。惰性删除对CPU来讲是最友好的,程序只有在取到键的时候才会去检查是否过期,但是有个最不好的地方就是很容易造成内存泄露。定期删除是最折中的方案,每隔一段时间去检查过期键空间,并且还可以根据当前CPU的状态来定制一个算法,来决定删除多少键和检查多少过期空间,而且也可以有效的避免内存泄露

redis数据库

标签:操作   unix时间   服务   属性   unix   cpu   除了   就是   redis   

原文地址:https://www.cnblogs.com/Booker808-java/p/10083487.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!