Redis 简单描述
Nosql 开源数据库之一 , Key-Value存储结构,
目前支持5种数据类型 string, hash, list, set , zset(sort set)
使用理由:快,方便,上手简单
快:
1. 绝大部分请求是纯粹的内存操作
2. 采用单线程,避免了不必要的线程上下文切换和竞争条件
3. redis 是单线程,但不是纯粹的单线程(单线程模型IO多路复用【非阻塞IO】)
A.IO多路复用(O(n))- select : 当IO发生了,无差别轮训所有流,流越多轮询事件越长
B.IO多路复用(O(n))- poll:基本同上 select
C.IO多路复用- epoll(非阻塞IO): 简单理解-基于事件驱动,有操作就处理,没操作就休眠
可能发生的问题:
1. 缓存db双写一致性问题
2. 缓存雪崩(批量Key一起并发): 高并发场景下,大量Key集体失效。导致请求直接指向DB,而导致系统部分或全部暂时崩溃
A. 配置缓存集群和DB集群高可用。
B. 永不过期,~。~
C. 不同Key设置不同过期时间,尽量达到平均分布,避免同一时间key的集体失效
D. 限流降级: 在Key失效后,通过锁(lock,分布式锁)限制 Key对应的 读/写 DB的操作。比如一个Key失效了,在重新获取Key对应的DB数据的时候来一个锁,限制下这个Key对DB的操作,其他操作这个Key的线程稍等。
E. 缓存预热:正式部署前/在即将大量访问前,先把可能大量访问的数据先缓存到Redis中。
3. 缓存穿透(Key不存在高并发):利用缓存和数据库都不存在的key,来执行请求,从而绕过缓存每次都吧请求指向DB
A. 布隆过滤器:先将可能存在的数据存到一个足够打的bitmap中,一个一定不存在的数据会被这个bitmap拦截,从而避免了对db的查询压力。 但是Bloom filter 也会有误判。
B. 缓存Null对象:set xxKey null(时间一定要比较短,一般几分钟,因为如果是攻击那么会一直新建key。还有就是如果在这几分钟内,如果这个key被业务系统添加了相应的value,那么再次访问还是会返回null,这个时候可利用mq或者其他方式在设置值的时候顺便更新下这个key对应的value就可以了)
4. 缓存击穿(单个Key存在高并发):key在db中存在,但是缓存已过期,若此时有大量的这个Key的请求...
A. 互斥锁/同限流降级:当key失效后,先加锁(lock,分布式锁),获取到锁之后在去db抓取数据。
B. 永不过期,~。~
C. 异步构建缓存/超时标记: 即将过期的时候主动去更新它
使用场景:
1. 配合DB做数据缓存,分布式sessino共享
2. zset 热点数据排序
3. 分布式锁(可对比zookeeper实现)
4. 要求不是太苛刻的 延时操作(基于key过期的发布订阅事件实现,需定义配置文件)
5. 部分业务场景下 可list(zrangebylex) 分页,模糊搜索
6. 点赞,好友等相互关系的存储(set)
等等。。。
Redis 安装
1. 下载windows版本 https://github.com/MicrosoftArchive/redis/releases

随便选哪一个都行,不过个人习惯是直接zip,绿色。

解压之后 cmd 打开目录,开启redis服务

redis-server.exe redis.windows.conf
redis默认端口 6379
这里指定配置文件,前面先不管配置,后面的话会单独简单说一下配置文件。

redis-cli.exe -h 127.0.0.1 -p 6379 ,由于是本机默认配置, 所以直接 redis-cli 也可以链接
redis客户端 指定ip 端口 其他或密码等等。链接
基础用法展示

