浅谈redis

Redis是一个内存数据库,以其高速性能和丰富的数据类型著称。它采用单线程模型,支持字符串、列表、集合、哈希和有序集合等五大数据类型,以及地理位置、基数计算和位图等特殊类型。Redis事务虽然不保证原子性,但提供了一定的命令批量执行能力。主从复制确保数据冗余和故障恢复,哨兵模式则实现了自动故障切换。此外,还讨论了缓存穿透、缓存击穿和缓存雪崩的问题及其解决方案。
摘要由CSDN通过智能技术生成

redis

谈谈你对redis的理解

  1. 非关系数据库
  2. 他是单线程的:数据放在内存中,单线程操作效率高(多线程会造成CPU的上下文切换)
  3. 基于内存操作(周期性的把更新的数据写入到磁盘(RDB)或者 把修改操作写入追加的文件记录(AOF))

五大基本数据类型

  1. strng(最常用)
  2. list(列表)底层链表 可以用来消息订阅
  3. set(集合)
  4. hash(哈希 hset key field value)map集合 更适合对象的存储
  5. Zset(有序集合)zset k1 score1 v1 score1 数字 后面可以根据这个排序

三种特殊的数据类型

  1. Geospatial 地理位置
  2. Hyperloglog 基数 返回不重复的元素个数 网页的uv一个网站访问多次还是算作一个人
  3. Bitmap 就只有0 和 1 两个状态 员工打卡不打卡

事务操作

  1. 本质:一组命令的集合,一个事务中的所有命令都会被序列化,按顺序执行。
  2. redis事务没有隔离级别
  3. redis的单挑命令是原子性的,但是事务不保证原子性
  4. redis事务步骤:
    1. 开启事务(multi)
    2. 命令入队(…)
    3. 执行事务(exec)
    4. 放弃事务 discard

注意:编译型异常(代码有问题! 命令有错!) ,事务中所有的命令都不会被执行

​ 运行时异常(1/0), 如果事务队列中存在语法性,那么执行命令的时候,其他命令是可以正常执行 的,错误命令抛出异常!

监控

悲观锁: 很悲观,认为什么时候都会出问题,无论做什么都会加锁!

乐观锁: 很乐观,认为什么时候都不会出问题,所以不会上锁!

​ 更新数据的时候去判断一下,在此期间是否 有人修改过这个数据,

​ 获取version 更新的时候比较 version

  • watch命令进行监控
  • unwatch在事务执行失败的时候新进行解锁,获取最新的值再次监视
  • 在一个watch中只监控count 减少2 但是开启了另外一个线程增加out数字2就会报错
  • 这时候需要unwatch取消监控,对一个监控的key可以增加又可以修改
  • 在这里插入图片描述

主从复制

  1. 把一个redis服务器的数据复制到另外一台,前一个叫做主机,后一个叫做从机
  2. 复制是单向的,只能从主机复制到从机
  3. 默认情况下都是主机,谁是谁的从机需要配置
  4. 可以用作负载均衡:主机负责写操作,从机读操作
  5. 保证了在一个服务器崩了,情况下扔可以用一段时间

配置

  1. 端口
  2. pid名字
  3. log文件名
  4. dump.rdb名字

测试:

  1. 从机没有写操作
  2. 主机断开后,从机依旧是从机没有写操作
  3. 主机断开后,重新连接,从机依旧可以获取到主机数据
  4. 命令行配置:从机重启后就会变成主机
  5. 配置文件配置:从机重启后还是从机
  6. 如果主机断开了连接,我们可以使用 SLAVEOF no one 让自己变成主机

复制原理

  1. 全量复制:从机连接的时候就会把主机磁盘的数据加载到内存中
  2. 增量复制:主机的新的修命令会传递到从机

哨兵模式

概念

​ 主机断开连接后自动选取一个新的主机

作用

  • 独立的进程监控这几台服务器
  • 通过发送命令让服务器返回它的运行状态
  • 当哨兵模式检测到主服务宕机后,会自动把从机切换成主机,然后通过发布订阅模式通知其他的从机修改文件,切换主机

改进

​ 一个哨兵监控可能会出现错误,可以使用多个哨兵进行监控,并且哨兵烧饼之间还能互相监控,这就是多哨兵模式

缺点

  • redis不容易扩容
  • 哨兵模式配置麻烦

缓存穿透

概念(查不到造成的)

​ 缓存中查不到就要去数据库中查找,发现数据库中也没有

​ 如果很多人都去访问这个数据缓存中没有,都去数据库中查找,数据库压力太大,出现缓存穿透

解决方案

布隆过滤器

缓存空对象

存在问题

​ 1、缓存大量的空健,空间浪费

​ 2、即使对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间窗口的不一致,这对于 需要保持一致性的业 务会有影响

缓存击穿

概念(量太大,缓存过期)

​ 缓存的一个key是一个热点数据(微博热搜),当这个key在一个失效的瞬间,持续的大并发穿破缓存,直接请求数据库

解决方案:

缓存不过期

加上互斥锁

缓存雪崩

概念

​ 一个时间段缓存都过期了,redis宕机

解决方案

redis集群:增加redis服务器数量

限流降级:对一个key只允许一个线程查询写缓存

数据预热:把可能照成大量访问的数据先访问一遍,放在缓存中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值