【实用】Redis高级功能

目录

1. 内存淘汰

1.1 主动过期

1.2 内存策略

1.3 Redis淘汰机制

2. Redis事物

2.1 事物简介

2.2 Redis事物使用

2.3 Redis事物原理

2.4 Redis事物踩坑

3. Redis持久化

3.1 RDB

3.1.1 RDB 配置使用

3.1.2 RDB 内部流程

3.1.3 RDB 内部结构

3.1.4 RDB 配置建议

3.2 AOF

3.2.1 AOF 配置使用

3.2.2 AOF 内部流程

3.2.3 AOF 内部结构

3.2.4 AOF 配置建议

3.3 Redis混合持久化

4. Redis安全

4.1 Redis安全问题

4.2 Redis被攻击案例

4.3 Redis高危命令

5. Redis开发

5.1 常用语言客户端

5.1.1 Jredis

5.1.2 Redisson

5.2 LUA的使用

5.3 pipeline使用

5.3.1 pipeline简介

5.3.2 pipeline使用建议

5.4 Redis分布式锁

5.4.1 Redis Redlock

5.4.2 分布式锁的选择

5.5 Redis开发建议


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 th

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸葛本不亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值