本帖最后由 18037039769 于 2020-3-6 10:17 编辑
分布式缓存之--Redis首先我们使用一个新的技术,我们不能为了用而用,我们要知道为什么用? 1、为什么要使用缓存? 高性能: 一个用户A发起请求,通过ServiceA请求数据库来获取数据,但是数据库的性能相比Redis的速度要慢很多,响应时间比较长,这时又有一个用户B发起一个请求,和用户A要的是同一个数据,那么正常情况下我们又要去查询一遍数据库,然后再返回给用户,那么我们想一想,如果有很多用户都要去查询这一条数据,都去数据库查,响应都很慢,那么就降低了用户体验。 加入Redis缓存后,我们将用户A查询都数据放到Redis缓存中,那么接下来到用户再去查询这条数据到时候直接先查Redis缓存中是否存在这条数据,那么我们直接就返回给用户就可以了,不需要再去查数据库了,Redis响应速度极快这样就提高了用户体验感。
高并发: mysql数据库对高并发支撑并不是很高,加入Redis后,Redis是基于内存对,内存对读写速度很快,redis使用是多路复用技术,可以处理并发连接,redis是单线程的,可以省去很多上下文切换的时间;
2、Redis的线程模型是什么?
当客户端1请求连接redis进程的时候,会在redis进程内部建立一个server socket 并注册一个事件,redis进程中的io多路复用程序会将这个它压入队列中,然后交给文件事件分派器,分派器会交给连接应答处理器,当客户端要进行set key value操作的时候,同样会产生一个socket 注册一个命令请求事件,由io多路复用程序压入队列,文件事件分派器会交给处理器进程内存中key和value的设置。
3、Redis的数据结构及其作用 String:普通的get和set,简单的kv缓存
hash: 类似有map的一种结构,这个一般就是存储对象
list:list格式放入缓存中
set:无序集合,自动去重
sorted set: 去重可以排序
5、Redis的过期策略有哪些?内存淘汰机制有哪些? 过期策略:定期删除+惰性删除 定期删除:是指Redis会每隔100ms会随机抽取一些设置了过期时间的key进行扫描,看是否已经过期,如果已经到达过期时间就进行删除 惰性删除:是指因为Redis的定期删除是进行随机抽取的一些设置了过期时间的key进行删除,难免会漏掉一些已经过期但是没有被定期删除扫描到的key,那么这些key在你去获取它的value的时候,redis就会发现这个key已经过期了,就不会给你返回任何结果,并将这个key给删除。 淘汰机制: noeviction:当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧
allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,这个一般没人用吧
volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key(这个一般不太合适)
volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
|