Redis-知识点提炼

本文详细介绍了Redis的特点,包括数据结构多样性、内存存储、单线程设计、RDB和AOF持久化机制、主从复制以及分布式锁实现。此外,还讨论了看门狗机制和缓存问题解决方案,以及Redis的事务操作特点。
摘要由CSDN通过智能技术生成

Redis的特点

Redis作为我们开发过程中常用的非关系型数据库,其特点是数据结构多样,速度快,单线程执行,内存存储数据。

Redis的基础数据类型

1、Hash
Hash 由多个KV值组成,就像Java数据结构中的HashTable一样,适合存储对象,在Java程序中有时候需要经常改变的对象不适合使用序列化存储,多次反复更改会让JVM运行速度变慢,放到redis中使用Hash存储效率会更高。
2、String
最常见的数据类型,存储字符串,最大可以保存512M。
3、set
作为一种集合,无序性和不可重复是set的特点。
4、sort set
在set的基础上增加了排序的特点,在该集合内部会以一个关键字作为排序的特征,始终保持有序的特性。
5、List
存储list的时候会保存存入时的顺序,可以做队列使用。
还有一些其他不常用的数据类型。

Redis单线程

作为面试中常见的问题,Redis为何单线程还能如此快速,答案有三个
1、使用内存存储。
2、没有上下文切换的消耗。
3、基于非阻塞的IO多路复用模型,并且底层重写了与操作系统的交互VM机制。

Redis持久化机制

在Redis中持久化机制有两种分别是RDB和AOF

RDB

RDB的存储机制就是保存整个Redis的数据快照文件到磁盘中,如果是手动触发会让redis阻塞。
在Redis中的自动触发机制,使用了fork指令,生成一个子线程,通过让子线程进行保存数据快照的操作,再完成之后再通知主线程已经完成,从而达到不阻塞主线程的操作。

AOF

AOF的存储机制是将在redis中运行的指令保存到本地文件中,复原存储数据,也就是将之前执行过的指令重新执行一遍。
redis中也有对应的优化机制,固定时间redis会重写AOF文件,重写会优化其中的指令,包括删除无用的指令、将多次指令合并成一个指令,从而减少无效指令,提高运行效率。

redis主从复制

redis主从复制是高可用中基础的部分,因为redis cluster 和 redis sentinel 都是基于主从复制实现的,主从复制顾名思义会有一个主节点和多个从节点,可以实现由主节点写入数据,子节点从主节点复制数据,实现读写分离,在写少读多的场景下可以极大提高读写效率。

主从节点建立联系的过程

主节点会主动给子节点发送主节点信息,子节点会接受到主节点的IP和PORT并在本地保存变量,然后子节点会发起socket连接,在收到accept指令成功建立socket之后会再次发送ping信息,如果没有接收到pong信息,则会断开重连。

redis客户端

有多个redis客户端,分别也有不同的特点
1、Redission 促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列。
2、luettce 高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
3、Jedis 老牌客户端,提供了比较多面的redis命令支持。

Redisson分布式锁的实现

redisson提供了分布式锁的实现,使用了redis中setnx 指令,将查看数据是否已经存在,如果不存在则创建数据,两项操作合并实现原子性,满足了分布式操作要求。因为redis实现的分布式的AP模式,没有即时同步数据,所以要保证分布式锁还需要与其他节点确认是否锁是否已经被占用,redisson中实现了红锁机制,在保证当前节点锁没有被占用后,会向其他节点发送请求,如果有半数以上的节点都接受了请求,这才视为取锁成功。

看门狗机制

redisson中实现分布式锁会存在Java程序如果崩溃终止,但是没有释放分布式锁的话,那么资源就会陷入死锁,为了解决这一问题redisson提出了看门狗机制,在获取了分布式锁之后,会设置一个过期时间,默认是30S,同时会在java程序中创建一个协程,每过十秒就会将该锁过期时间设置为30S,这样就算系统突然崩溃,那么在30S之后锁也会自动释放。

缓存击穿、缓存雪崩、缓存降级、缓存穿透的区别

缓存雪崩指的是有大量数据同时过期,导致有大量请求到达数据库。对应的解决方法,不同的数据过期时间加一个随机值,将数据过期时间错开,不在同一时间过期就行。
缓存穿透指的是有大量无规则数据,在redis中没有对应的缓存,必须到数据库中查找,从而堆积大量的无效查找,所以导致数据库有大量请求。 对应的解决方法,使用过滤器,过滤掉无效的请求。
缓存击穿在热点数据过期的瞬间,有大量请求到达数据库。对应的解决方法,热点数据永不过期或每有请求访问就延长数据的存活时间。
缓存降级,在数据库中有大量请求无法响应的时候,启动降级策略,将请求阻塞或直接返回无法访问,保证程序不宕机为前提,降低系统可用性。

redis事务操作

redis中数据通过multi 指令开启,然后输入指令,由exec指令为结尾,中间的命令开始执行,要么全部成功要么全部失败,但是如果在执行命令过程中指令错误,那么redis是不会停止指令并且回滚数据的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值