分类目录归档:redis

redis 一些常见问题


缓存问题

缓存穿透

查询不存在的key,会穿透缓存查询数据库,高并发的情况下,给数据库带来压力而宕机

解决方案

  1. 对查询结果为空的情况也进行缓存,混存ttl设置短一点,或者key 对应的数据insert 之后清理缓存,问题是:缓存太多空值占用了更多的空间
  2. 使用布隆过滤器,在缓存之前在加一层布隆过滤器,在查询的时候先去布隆过滤器查询key是否存在如果不存在就直接返回,存在再查缓存和DB

缓存雪崩

当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统比如DB 带来很大压力 突然间大量的key失效或者redis 重启,大量访问数据库,数据库崩溃

解决方案

  1. key

Read more

Redis 高可用


高可用方案

主从复制

redis支持主从复制,可以通过执行slaveof(redis5 以后改为replicaof)或者在配置文件中设置slaveof(replicaof)来开启复制功能。 住对外从对内,主可写从不可写,主挂了,从不可以为主

主从配置

主redis 配置

无需特殊配置

从Redis 配置

修改从服务器上的redis.conf 文件: # slaveof replicaof 127.0.0.1 6379

作用

读写分离

  1. 一主多从,主从同步
  2. 主负责写,从负责读
  3. 提升redis的性能和吞吐量
  4. 主从的数据一致性问题

数据容灾

  1. 从机是主机的备份
  2. 主机宕

Read more

redis 拓展


事务

redis 事务

  1. redis的事务是通过multi,exec,discard 和watch这四个命令来完成的
  2. redis的单个命令都是原子性的,所以这里需要确保事务性的对象是命令集合,不能保证时时一致性,只能是最终一致性
  3. redis将命令集合序列化并确保处于同一事务的命令集合连续且不被打断的执行
  4. redis 不支持回滚操作, redis持久化但不保证数据的完整性

事务命令

multi: 用于标记事务块的开始,redis 会讲后续的命令逐个放入队列中,然后使用exec原子化地执行这个命令队列
exec:执行命令队列
discard:清除命令队列
watch:监视key
unwatch:

Read more

redis RDB 和AOF


redis 持久化

Redis 是内存数据库,关机后数据会消失,重启后如果需要快速恢复数据,需要提供持久化机制 当然,redis 持久化是为了快速恢复数据不是为了存储数据,redis有两种持久化方式RDB 和 AOF

当然 Redis持久化不保证数据的完整性,当redis 用作DB,DB数据要完整,所以一定要有一个完整的数据源(文件,mysql)
在系统启动时,从这个完整的数据源中将数据load到redis中
数据量较小,不易该表,比如:字典库,可以通过info 命令可以查看关于持久化的信息

RDB

rdb(redis database) 是redis默认的存储方式,RDB方式是通过快

Read more

缓存原理和设计


缓存原理和设计

缓存的基本思想

什么是缓存

缓存原来是指CPU上的一种告诉存储器,它先于内存与CPU 交换数据,速度很快,现在指存在计算机上的原始数据的复制集,便于快速访问。 这是以空间换时间的方法

缓存的使用场景

DB缓存,减轻DB服务器压力

一般情况下数据存在数据库中,应用程序直接操作数据库,当访问量上万,数据库压力增大,可以采取的方法是: 读写分离,分库分表,当访问量达到10万,百万,需要引入缓存,将已经访问过的内容或数据存储起来,当再次访问时,先访问缓存,缓存命中返回数据,不命中再找数据库,并回填到缓存。

提高系统响应

数据库的数据是存在文件中,在大量瞬时访问呢时,MySQL单机会因为

Read more