作用:非关系型数据库,减轻DB的访问压力,基于内存中,存放小量的热点数据。以键值对的形式存放数据,数据类型有5种。
有许多种常用的命令,但在代码中用方法来操作数据。
存储的数据类型:key———>String:仅用于存储一个值
key ———>map:存储一个对象数据
key————>list:使用listjiegou实现队列(先进先出)、栈(先进后出)数据结构
key————>set:交集、差集、并集操作,也可以用来去重
key————>sortset:排行榜、积分榜等排名数据的存储结构
代码中提交命令到redis的方式:1、直接连接,提交命令;
2、创建连接池,提交命令
3、管道操作,将所有命令放到pipeline中,一次性提交命令
redis的密码和事务:在nginx中有内网和外网两块网卡,redis在内网中,没必要使用密码也安全;
开启事务后,命令都被存放在对列中,提交时一起执行,改成功的成功,改失败的失败,互不影响。命令:multi(开启) exec(提交) discard(取消)
redis的持久化机制:
RDB : 默认的持久化机制,生成dump.rdb文件
速度快存储的是二进制文件
时机:redis.conf文件进行配置,无法保证数据安全
AOF : 默认关闭,在redis容器的date目录下,存储文本文件,越往后存储越慢;
时机:每秒持久化一次,或者没插入一条命令持久化一次,自己设置
两种方式推荐同时开启,redis 文件重启后,优先加载aof文件。若先开启RDB,再开AOF,并且RDB执行了持久化,那么AOF会覆盖掉RDB文件的内容。
redis的删除策略:不会立即删除,因为过期就删除,太浪费资源;
定期删除:redis定期查看设置了过期时间的key,每隔100ms检查3个key;
惰性删除:查询一个过了生存时间的key,redis会查看当前key的生存时间,过期就删除,然后返回空值。
redis的淘汰机制:redis内存已满,添加一个新数据,执行淘汰机制。默认是内存不足时,直接保
错。指定淘汰机制的方式:maxmemory-policy 设置redis最大内存:maxmemory 字节大小
缓存问题:
穿透:原因:redis 和DB都没有指定的数据
方法: mql中不存在这样的数据,则存入redis中一个垃圾数据,并设置随机超时时间
获取ip地址,对ip地址访问次数添加限制
id是自增时,在redis中放最大的id,查询前先比价id,id是String时,全部id放入set中,查询前看set有没有,有返回,无返回空值;
击穿:原因:redis中设置时间的key突然失效,大量请求直接打到DB,造成DB宕机
方法:去掉热点数据的生存时间
在访问缓存没有时,访问数据库的方法加锁
雪崩:原因:redis中的key同时大量失效,大量并发请求打到数据库造成宕机
方法:缓存中的热点数据到期时间,不要设置相同的到期时间,设成随机的
倾斜:原因:热点数据都放在一个redis节点上,导致redis宕机
方法:主从架构,搭建大量从节点,环缓解reids的压力
前期做好规划,让热点数据均匀分布在每一台redis服务器上,防止单点高并发
至于redis 的分布式,随后再说!!!