Redis

本文详细介绍了Redis的概念、用途(如缓存、计数器等)、线程模型、持久化策略(RDB和AOF)、事务处理、主从复制与哨兵机制,以及如何处理过期策略和缓存一致性问题,以及可能遇到的缓冲问题如穿透、冲击穿和雪崩及其解决方案。
摘要由CSDN通过智能技术生成

一、Redis概念

        redis是一个非关系型数据库,用键值对形式存储在内存中,读写速度非常快,支持多种数据类型,支持数据持久化。

二、Redis作用

        1.缓存 。适用于访问量大功能(例如:点赞,秒杀),访问量小修改少功能(例如:分类菜单),实时删除(例如:验证码)。

        2.计数器。例如:点赞

        3.排行榜。用zset

        4.数据去重。用set

        5.消息队列。适用于医院排号 用list4

        6.分布式锁。微服务中用

三、Redis线程模型

        Redis6.0之前是单线程模式完成客户端连接和读写命令。

        Redis3.0之后是使用多线程模式完成客户端连接请求过程,但键值对读写命令还是使用单线程,线程仍是安全状态。

        单线程速度也很快,其原因是

        1.基于内存操作:读写都在内存中,运算级别高。

        2.哈希表结构:通过key值计算哈希值来快速定位value。O(1)

        3.避免上下文(线程)切换:减少开销,没有死锁问题。

四、Redis持久化

        1.Redis数据库需要持久化的原因 : Redis是内存数据库,内存数据变化快,容易丢失(例如:断电)。 Redis数据库提供持久化机制来保存数据,其有两种方式:RDB、AOF。

        RDB(Redis DataBase)

        在指定时间间隔内,将内存中的数据通过快照的方式写入磁盘(二进制文件)中。是默认的持久化方式,二进制文件默认是dump.rdb。

触发快照机制:通过满足save规则:

        save 900 1:表示900秒内,至少有1个键被更改,则触发快照

         save 60 100:表示60秒内,至少有100个键被更改,则触发快照

        AOF(Append Only File)

        以日志的方式记录每个操作命令,只记录写操作不记录读操作,之追加不改写,回复数据时,逐行执行操作命令。

开启 AOF 机制:修改 redis.conf 配置文件:

        appendonly no 是默认不开启,改为yes

        appendfilename appendonly.aof 表示指定存储命令文件

AOF同步机制:

        appendfsync always 表示每次修改都会sync,比较消耗性能

         appendfsync everysec 表示每秒执行一次sync,可能会丢失这1s数据

五、Redis事务

概念:Redis事务是一组命令集合,所有命令序列化(打包),单线程执行任务 。

目的:保证一组命令是整体执行的,事务执行过程中,其他客户端不能打断。

操作过程:需要开启事务,在一个事务中,加多个命令,添加进去后不会立即执行 ,在执行exec命令后,才会执行此事务中的所有命令。即使命令执行报错,也不会影响其他命令执行(无原子性)。

redisTemplate.multi();//开启事务

        //命令1  

        //命令2

        //命令3

redisTemplate.exec();//提交事务

六、主从复制(Redis集群)

概念:将一台Redis服务器中数据复制到其他Redis服务器中,实现数据复制。将发送数据的Redis服务器称为主机,主节点,只进行写入、读取。接受数据的Redis服务器称为从机,从节点,只进行同步、读取。数据从主节点向从节点单向复制。

写入命令都直接发送到主机执行,主机自动将数据备份到从机,如果一台机器宕机,其他机器还存有数据,保证数据的完整,安全。实现读写分离,减轻Redis服务器压力。

主要作用:1.数据冗余 实现数据备份。

                  2.故障恢复 主节点遇到问题,从节点提供服务

                  3.负载均衡  读写分离,减轻Redis服务器压力

                  4.高可用基石 集群

七、哨兵机制

        在Redis集群中配置哨兵(进程),哨兵定期给每个Redis服务器发送命令。如果能接受响应,说明Redis服务器正常,否则Redis服务器故障。重点是检测主机,一旦主机宕机,哨兵在从机中选一个成为主机。

八、Key过期策略

例如:存储验证码,定时5分钟,5分后,redis立即删除还是定时删除过期key。

1.惰性删除:当key过期后,标记为过期状态,(字典中记录过期key),下次使用时再删除。

2.定期删除:在设定时间节点,去扫描过期key,删除过期key。

九、Redis和mysql如何保持数据一致

1.先更新MySQL中数据,在更新Redis中数据。缺点:若Redis更新失败,查询到的数据仍是旧数据。

2.先删除Redis中数据,再更新MySQL中数据,查询时再将数据添加到内存中。缺点:高并发时性能低,线程A删除了Redis中数据,正更新MySQL时,线程B查询Redis中数据,那么Redis中数据仍是MySQL中旧数据。

3.延时双删。先删除Redis中数据,再更新MySQL中数据,延迟几百毫秒后再删除Redis中数据,这样新旧数据就一致了。

十、缓冲穿透 缓冲击穿 缓冲雪崩

Redis使用时产生的安全问题。

缓冲穿透:

概念:key对应的数据在数据库中不存在。key对应数据在缓存中找不到,还是会去MySQL数据库中找。

解决方法:1.参数验证。 2.第一次找不到就在Redis中设置key键,值为null,以后再找此key就返回null。

缓冲击穿:

概念:key对应的数据在数据库中存在,但Redis中某个时间点(或热点)过期了,此时大量请求同时到来,Redis中不存在,从而去查询mysql。

解决方法:1.设置key过期时间,要注意不要在访问量大时过期。  2.给访问数据库的代码加锁,一个查询数据库后,把数据放入Redis中,其后的都访问Redis。

缓冲雪崩:

概念:高并发时,大量缓存失效,大量key过期,Redis宕机。

解决方法:1.随机设置key过期时间,避免大量key过期。  2.集群,可解决Redis宕机。  3.定时任务,定时查看key是否快过期,看重设过期时间。

  • 21
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值