Redis单机实现
Redis服务器
- 由多个redisDb对象组成,一个redisDb就是一个数据库,一般默认16个,可通过select index切换,数量可配置。
- redisDb中用一张字典表保存数据库中的所有键值对。
- 键都是字符串对象。
- 值是五种对象之一。
- 取值时通过键值获取值对象,再返回值对象嵌套的字符串对象值。
键过期时间的实现
- redis除了有一张字典表保存所有键值对,还有一张过期表保存所有键的过期时间
-
判断一个键是否过期是通过当前时间戳和过期字典中的时间戳来做对比。
-
过期策略三种(redis使用23种配合)
-
定时删除:设置一个过期键的同时设置一个定时器在到期后执行删除操作。内存友好,cpu不友好。
- 惰性删除:获取一个键时判断是否过期,过期则删除。内存不友好,cpu友好。
- 定期删除:定期遍历过期字典表,把过期键删除。难点是把握操作频率和时长。
-
- 对持久化的影响
- RDB:进行RDB的时候会判断键是否过期,过期的不会被写入RDB文件中。载入时,也会对过期键检测,过期键不会被载入。
- AOF:AOF时不会判断键是否过期,它只会在该键被删除时新增一条del命令。
- AOF重写时会过滤掉已过期的命令。