一、什么叫缓存穿透
别人故意访问一个你数据库里面不存在的数据,(redis里面查不到,就会查数据库),
别人访问的参数就是你数据库里面不存在的,那是不是永远都会查数据库,所以如果
这个时候请求量大了,数据库压力就会变得非常大。
二、什么是Redis?
Redis是以key-value形式存储。键可以包含:(String)字符串,哈希,(list)链表,
(set)集合,(zset)有序集合。这些数据集合都指出push/pop,add/remove及取
交集和并集以及更丰富的操作。redis支持各种不同方式排序,为了保证效率,数据
都是缓存在内存中,它可以从周期性的把更新的数据写入到磁盘或者把修改操作
写入追加的文件中。
redis定位是缓存,提高数据读写速度,减轻对数据库存储与访问压力。
三、Redis的优缺点
优点:
高并发读写
海量数据的高效率存储和访问
数据的可拓展性和高可用性
单线程操作,每个操作都是原子操作,没有并发相关问题
缺点:
事务处理非常简单
无法做太复杂的关系数据库模型
基于内存容易丢失数据
四、如何使用Redis?
NoSQL应用场景
1. 数据频繁更新且一致性要求不高:如接口限流、(阅读数/评论数/分享数等)
2. 基于List实现栈/队列等特殊结构
3. 子主题4
4. 基于经纬度的地址位置操作:Redis GEO
缓存
Redis缓存的优缺点:
优点:
提高查询性能,减少IO操作
减轻MySQL数据库负担
减轻应用服务器 cpu 和 内存负担
缺点:
数据一致性问题
可能丢失数据
什么样的数据适合做缓存:
查询频率高、修改频率低、一致性要求较低
缓存操作流程:
1.读取redis数据,有则直接返回
2.redis中没有,查询mysql数据库
3.将mysql数据库的数据存储到redis
4.返回该数据
五、全局命令
常用
keys: 返回满足的所有键keys* (可以模糊查询)
exists: 判断是否存在指定的key
expire: 设置某个key的过期时间,使用ttl查看剩余时间
persist: 取消过期时间
flushdb: 清空当前数据库,flushall清空所有数据库
select: 选择数据库,数据库为0到15(一共16个数据库)默认进入的是0数据库
六、持久化机制
RDB快照模式
基本概念:snapshotting(快照)默认方式,将内存中以快照的方式写入到二进制
文件(默认为dump.rdb)中。可以配置设置自动做快照持久化方式,我们可以
配置redis在n秒内如果超过m个key就修改自动做快照。
优点:二进制文件恢复速度快
缺点:时间间隔长丢失数据较多
持久化配置:
save 900 1 #第900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #第300秒内入宫超过10个key被修改,则发起快照保存
AOF日志模式
基本概念:
append-only-file(缩写aof)的方式,由于快照方式是在一定时间间隔
做一次,所以能发生redis意外down的情况就会丢失最后一次快照后的所有
修改的数据。
aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写
命令都通过write函数追加到命令中,当redis重新启动时会重新执行文件中保存的
写命令来在内存中重建这个数据库的内容。
这个文件在bin目录下:appendonly.aof aof不是立即写到硬盘中,可以通过配置
文件修改强制写到硬盘中。
优点: 持久化效果较好
缺点:变动较多时持久化文件较大,恢复较慢
持久化配置:
appendonly yes // 启动持久化方式有三种修改方式
always(每次):#appendfsync always // 收到命令就立即写到磁盘,效率最慢,但是能保证完全的持久化
evertsec(每秒):#appendfsync everysec //每秒写入磁盘一次,在性能和持久化方面做了很好的折中
no(依赖操作系统):#appendfsync no //完全以依赖os性能最好,持久化没保证
混合持久化
基本概念:由于RDB持久化效果不好,而AOF恢复效率又太差,因此Redis在4.0版本带来
了新的混合持久化模式,分别基于两者特点进行了结合,使持久化操作可以同时拥有RDB的
快速恢复特性,也可以持AOF的更安全的持久化特性。
开启混合持久化后,持久化数据同样被保存到aof文件中,但是该文件的前半部分为RDB,
后半部分为AOF指令。
优点:结合RDB和AOF的持久化优点
缺点:Redis版本必须4.0以上
持久化配置:开启AOF持久化(必须)启用 aof-use-rdb-preamble yes