redis概述

缓存是如何实现高性能的
当第一次查询的时候,缓存里面没有数据,回去数据库查,然后存入缓存,当再去查询的时候,或者是查询相同数据的时候,就不用去数据库里面查了,直接去缓存里面找,大大提高了效率,如果这个信息改了的话,我们只需要将缓存里的数据跟数据库里的数据同步一下就行了。
在这里插入图片描述
缓存是如何实现高并发的
高峰期的时候有5000个请求,如果缓存里面有数据,就走缓存,比如4000个走缓存,1000个请求走数据库,这就避免了数据库宕机的可能新,缓存是走内存的,不是走磁盘,是可以支持高并发的
在这里插入图片描述
redis单线程模型
核心:文件事件处理器
客户端与redis是基于socket进行通信的,当客户端发送set k v请求的时候,会产生AE_READABLE事件,IO多路复用程序会监听这个事件压到队列里面,然后文件事件分派器会找命令请求处理器从socket中读出来key和value,在自己的内存中完成设置
在这里插入图片描述
为啥redis单线程模型效率这么高
1.纯内存操作
2.核心是基于非阻塞的io多路复用模型
3.单线程反而避免了多线程频繁的上下文切换问题
io多路复用模型不负责处理,只负责监听socket,有的话就直接压到队列
redis的数据类型以及运用场景
String:做简单的kv缓存
hash:类似map,一般结构化数据,可以把对象缓存再redis
list:可以存储一些列表型的数据结构,还可以通过Irange从某个元素读取多少个元素,实现下拉不分页
set:去重
zset:去重排序,根据分数排序
redis的过期策略
1.设置过期时间(定期删除+惰性删除)
redis内存淘汰机制
如果redis内存占用过多的时候,此时会进行内存淘汰
noeviction:当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了
allkeys-lru:移除最近最少使用的key,一般就是用这个
allkeys-random:随机移除key
volatile-lru:在设置里过期时间的键空间,移除最近最少使用的key
volatile-random:在设置里过期时间的键空间,随机移除key
volatile-tt:在设置里过期时间的键空间,删除最先过期的key
手写LRU算法
public class LRUCache<K, V> extends LinkedHashMap<K, V> {

private final int CACHE_SIZE;

// 这里就是传递进来最多能缓存多少数据
public LRUCache(int cacheSize) {
    super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true); // 这块就是设置一个hashmap的初始大小,同时最后一个true指的是让linkedhashmap按照访问顺序来进行排序,最近访问的放在头,最老访问的就在尾
    CACHE_SIZE = cacheSize;
}

@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
    return size() > CACHE_SIZE; // 这个意思就是说当map中的数据量大于指定的缓存个数的时候,就自动删除最老的数据
}

redis不能支撑高并发的瓶颈
单机在几万
reids持久化
redis持久化的意义,在于故障恢复
redis突然挂了,里面有很重要的数据会丢失,重启之后,要去恢复redis很费劲
想办法从内存持久化到磁盘,然后定期同步和备份到一些云存储服务上去,保证数据不丢失全部
在这里插入图片描述
如果不做持久化还有可能出现redis缓存雪崩的问题,当重启redis,然后没有做数据备份,所有的请求都会直接去mysql里面去查,这时候就会出现缓存雪崩的显现,mysql直接就挂了,mysql挂了,就无法找到数据恢复到redis。
redis持久化:RDB
每个几分钟,几小时,几天,生成redis内存中数据的一份完整的快照
redis持久化:AOF
在这里插入图片描述
redis缓存雪崩
redis宕机,大量数据访问mysql,数据库扛不住这么大的并发,直接挂掉,那么整个系统也就挂了
在这里插入图片描述
如何解决缓存雪崩
事前要保证redis的高可用
先去系统内部缓存ehcache查,没有就去redis查。redis没有就去数据库查,但是去数据库查询之前要用hystrix做限流
在这里插入图片描述

缓存穿透
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值