目录
1. 内存淘汰
1.1 主动过期
- 通过EXPIRE/EXPIREAT等命令主动设置key的过期时间。
1.2 内存策略
- volatile-lru->removethekeywithanexpiresetusinganLRUalgorithm
- volatile-random->removearandomkeywithanexpireset
- volatile-ttl->removethekeywiththenearestexpiretime(minorTTL)
- allkeys-random->removearandomkey,anykey
- allkeys-lru->removeanykeyaccordingtotheLRUalgorithm
- noeviction->don'texpireatall,justreturnanerroronwriteoperations
127.0.0.1:60000> set jingbotest
OK
127.0.0.1:60000> get jingbo
"test"
127.0.0.1:60000> expirejingbo30
(integer) 1
127.0.0.1:60000> ttljingbo
(integer) 27
127.0.0.1:60000> ttljingbo
(integer) 26
127.0.0.1:60000> ttljingbo
(integer) 25
127.0.0.1:60000> ttljingbo
(integer) 24
redis> SET mykey"Hello"
"OK"
redis> EXISTS mykey
(integer) 1
redis> EXPIREATmykey1293840000
(integer) 1
redis> EXISTS mykey
(integer) 0
redis>
1.3 Redis淘汰机制
1. 主动淘汰
- 在beforeSleep方法中执行key快速过期检查
- 在serverCron方法中执行key过期检查,serverCron方法执行周期为1秒钟执行server.hz次,hz默认为10,所以约100ms执行一次。hz设置越大过期键删除就越精准,但是cpu使用率会越高,这里建议线上redis采用的默认值。redis主要是在这个方法里删除大部分的过期键。
2. 被动淘汰
- 使用内存超过最大内存被迫根据相应的内存策略删除符合条件的key。(触发时影响相应时间)
- 在key写入之前进行被动检查,检查key是否过期,过期就进行删除。
- randomkey命令,该命令随机从redis获取键,每次获取到键的时候会检查该键是否过期。
2. Redis事务
2.1 事务简介
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的逻辑工作单位,由RDBMS中的事务管理子系统负责事务的处理。
2.2 Redis事务使用
1.开始事务
redis127.0.0.1:6379> MULTI
2.命令入队
redis127.0.0.1:6379> set jingbotest
redis127.0.0.1:6379> set zbdba test
3.执行事务
redis127.0.0.1:6379> EXEC
2.3 Redis事务原理

2.4 Redis事务踩坑
1.业务反映Redis夯住
2.查看slow log
3.发现MULTI
注意:合理使用事务,避免长事务对线上造成影响。
3. Redis持久化
Redis是缓存数据库,但是也提供了如下数据落盘的方式:
- RDB // 做一份内存快照
- AOF // 将Redis执行的命令追加到AOF文件中
- MIX // 在内存快照的基础上追加AOF文件
3.1 RDB
3.1.1 RDB 配置使用
# save <seconds> <changes>
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
# Note: you can disable saving completely by commenting out all "save" lines.
# It is also possible to remove all the previously configured save
# points by adding a save directive with a single empty string argument
# like in the following example:
save 900 1
save 300 10
save 60 10000
save “” 关闭bgsave
- stop-writes-on-bgsave-error yes // bgsave失败停止写入
- rdbcompressionyes // 是否压缩RDB
- rdbchecksumyes// 是否对RDB做校验
- dbfile

本文深入探讨Redis的高级功能,包括内存淘汰策略、事务处理、持久化机制(RDB和AOF)、安全性以及开发实践。详细介绍了Redis的主动过期、内存策略,如volatile-lru、volatile-random等。此外,还涵盖了Redis事务的使用、原理及其注意事项。对于持久化,解析了RDB和AOF的配置、内部流程和配置建议。文章还讨论了Redis的安全问题,如防止被攻击的措施。在开发部分,提到了常用的语言客户端如Jredis和Redisson,以及LUA脚本和pipeline的使用建议。最后,文章给出了Redis分布式锁的实现及其选择策略,并给出了Redis开发的最佳实践。
最低0.47元/天 解锁文章
1085

被折叠的 条评论
为什么被折叠?



