Redis数据库存储和过期键实现原理
2017-09-14 15:11
351 查看
redis数据库
切换数据库
如图所示:
执行了“select 1”命令之后成功切换到了1号数据库,在提示符的后面的方括号中显示了当前数据库的编号,使用默认的0号数据库时没有这个提示。
数据库作用
redis分数据库的作用是隔离命名空间,在某一个数据库插入的数据在其他数据库是访问不到的:redis数据保存方式
redis是键值对数据库,所以数据的保存方式也是按键值对保存的。redis底层使用哈希表保存数据,哈希表就像java中的map结构一样,他们的键都是一个字符串,键的值可以是很多类型的数据,比如字符串,列表,集合,有序集合等等。后续的数据的增删改查操作都是在这个哈希表上操作。
redis过期机制
redis支持键过期机制,也就是可以为一个键定义个一个过期时间,当到这个时间点时,这个键自动失效。设置一个键过期时间可以使用exipre命令:上图的第一条命令设置一个键值对,x的值为5,第二条命令为键x设置过期时间为5秒,第三条命令是在第二条命令执行之后的5秒内执行的,所以此时x还未过期,能够得到x的值5,5秒之后再获取x的值,已经过期,得到nil值。
过期机制实现
redis会跟存数键值一样生成一个哈希表,专门存储键的过期时间,那么,redis是怎么删除已经过期的键值的呢?一般来说,删除一个过期键有三种方式:1. 定期删除:设置键过期时间的同时设置一个定时器,当时间到时定时删除键;
2. 定期删除:设置一个周期值,redis服务每隔一段时间执行一次过期检测,遍历一遍键值,将过期的键删除;
3. 惰性删除:将删除操作分摊到后续的操作中,每次增删改查数据库的时候都先检测一下键值是否已经过期,如果过期,先删除键值再执行常规后续操作。
这三种方式各有利弊:
1. 因为要为每一个键设置一个定时器,比较耗费CPU,但是因为键值一过期就立即删除,所以比较节省内存。
2. CPU和内存的消耗在三种方式中都处于居中水平。
3. 因为键值过期时候并不能够及时删除,并且如果有些键过期之后可能永远都不被访问,就导致这些垃圾数据常驻内存,成为另一种内存泄露,这种方式CPU耗费最小,内存消 耗最大。
redis过期机制中同时使用了第二种和第三种方法。在CPU和内存之间找到一个平衡点。
相关文章推荐
- Redis数据库存储和过期键实现原理
- Redis过期策略 实现原理
- Redis过期策略 实现原理
- Redis过期策略 实现原理
- Redis过期策略 实现原理
- Redis数据库的实现原理
- Redis过期策略 实现原理
- redis笔记-数据库之过期键删除策略
- Redis 设计与实现 (二)--数据库
- redis:字典实现及rehash原理
- redis持久化实现原理
- mysql主主同步两个数据库同时写入,实现原理:自动增长主键不重复
- 数据库切分的实现原理
- Redis源码剖析和注释(十四)---- Redis 数据库及相关命令实现(db)
- php实现redis数据库指定库号迁移的方法
- SQL Server中通过扩展存储过程实现数据库的远程备份与恢复
- HashMap实现原理,利用数组和链表存储元素
- 相同概率的抽奖程序另类实现——使用数据库,无需数学原理
- HTML5离线存储原理及实现