Redis基本知识

一、什么是Redis
Redis是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,用于存储键值对、缓存、消息队列、分布式锁等。

二、Redis和mencached的区别
相同:都是基于内存的数据库,读写都很快
不同:
1.Redis支持的数据类型更丰富(string、list、hash、set、zset);而mencached只支持string
2.Redis支持数据的持久化,可以将内存中数据保存在磁盘中,重启的时候可以重新加载使用;mencached没有持久化功能
3.Redis原生支持集群模式

三、Redis实现持久化
1.AOF日志:Redis在执行完一条写操作命令后,把该命令以追加的方式写入到一个文件里面(先执行后写入),重启Redis时会读取该文件里的命令逐一操作来进行数据恢复
2.AOF重写机制:当AOF日志过大时,读取每一条键值对最新的操作命令记录到新的AOF文件中。相当于压缩了AOF日志。
3.RDB快照:每次执行把内存中所有的数据都记录到磁盘中,这样恢复数据的效率会比AOF高些。用save(主线程里执行)和bgsave命令。
4.混合持久化:工作在AOF日志重写的过程。新的AOF文件前半部分是RDB格式的全量数据,后半部分是AOF格式的增量数据。重启时由于前半部分是RDB全量数据所以加载速度会很快,后半部分的增量数据会使丢失的数据更少。

四、Redis实现服务高可用
1.主从复制:主服务器进行读写操作;从服务器只进行读操作;主服务器将写操作同步到从服务器
2.哨兵模式:哨兵群进行监控,当主服务器发生故障,选举出新的主服务器

五、Redis过期删除策略
1.惰性删除:数据库访问key时才检测key是否过期
2.定期删除:每隔一段时间随机从数据库中取出一定数量的key进行检查

六、Redis内存淘汰算法
1.LRU(least recently used,最近最少使用算法):最新操作的键会被移动到表头
2.Redis采用的近似LRU算法:在Redis对象结构体中添加一个额外字段来记录此数据的最后一次访问时间,使用随机采样的方式淘汰数据
3.缓存污染问题:应用一次读取了大量的数据,而这些数据只会被读取这一次,那么这些数据会留存在 Redis 缓存中很长一段时间,造成缓存污染。
解决:用LFU(least frequently used,最近最不常用)算法,根据访问次数而不是访问时间来淘汰
ps:过期删除策略,是删除已过期的 key,而当 Redis 的运行内存已经超过 Redis 设置的最大内存之后,则会使用内存淘汰策略删除符合条件的 key

七、Redis的三大缓存问题
1.缓存雪崩:大量数据同时过期,或Redis故障宕机,大量请求直接访问数据库导致数据库压力骤增
解决方法:
(1)均匀设置过期时间
(2)设置互斥锁。访问到过期数据,在对其进行缓存重构时加锁(锁要设置超时时间避免阻塞)。未能获得互斥锁的要么等待要么返回默认值或空值
(3)后台更新缓存
(4)服务器熔断或请求限流
(5)构建高可用的Redis主从集群
2.缓存击穿:频繁被访问的热点数据过期了,也会导致大量请求直接访问数据库
解决方法:
(1)互斥锁
(2)后台更新缓存
3.缓存穿透:数据在缓存和数据库里都没有。缓存里找不到->访问数据库->数据库找不到无法重构缓存
解决方法:
(1)限制非法请求
(2)设置空值或默认值,后续请求得到该值后不会继续访问数据库
(3)使用布隆过滤器(位图+哈希函数)。写入数据库数据时用布隆过滤器做标记,缓存失效后去布隆过滤器里快速判断数据是否存在。这样请求只会访问混存和布隆过滤器

八、Redis保证数据库和缓存一致性
先更新数据库,再删除缓存。并用以下两种方法异步操作缓存
1.重试机制:引入消息队列记录删除缓存的操作。删除缓存失败的话可以从消息队列中读数据重试删除操作
2.订阅MySQL binlog:更新数据库的时候产生一条日志记录在binlog里,通过订阅binlog日志拿到具体要操作的数据再去删除缓存

九、redis是单线程的吗?
1.redis单线程是指:接受请求-解析请求-处理数据读写-发送数据给客户端 这个过程是单线程完成的。实际上redis程序是多线程的,会启用后台线程来异步释放redis内存
2.为什么单线程还那么快?
(1)操作在内存中完成
(2)单线程避免了多线程之间的竞争,就没有切换开销、死锁问题
(3)redis采用了I/O多路复用也就是epoll机制

参考文档:小林coding图解Redis

  • 32
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值