31-redis
最开始使用memcache做缓存数据库,但是它不能进行数据持久化,而是放在内存中
- 持久化:把数据存储在磁盘上
- 内存中的数据的特点:一旦断电,数据就会丢失
使用redis做缓存数据库,可以把数据存在内存中,加快我们读取数据的速度,同时,它可以定时去同步数据到磁盘,进行内存数据持久化。它还有个重大优势:缓存数据库之间可以自动同步
功能强大,但是比较复杂,所以在使用过程中也存在一定的问题。
性能测试人员需要了解redis的使用,原理,存在的问题,发现问题,如何给出调优建议。
redis介绍
- 非关系性数据库「Nosql」「Not only sql」
- key-value形式的非关系性数据库。一个key,对应value
非关系型数据库
- 没有声明查询语言
- 没有预定义的模型
- 非机构化,不可预知的数据
- 高性能,高可用性,高可伸缩性
NoSQL分类
- 列存储:Hbase
- 文档存储:Mongodb
- key-value存储:redis
value的类型
典型的有五种
- 字符串
- 列表
- 哈希
- 集合
- 有序集合
doctor安装redis
1 | docker run -itd --name you_redis_name -p 6379:6379 redis redis-server --appendonly yes |
连接redis
RemoteDictionaryServer(Redis)
https://gitee.com/qishibo/AnotherRedisDesktopManager/releases
常用操作
查看redis的所有配置参数
在客户端模式下执行
1 | config get * |
插入数据
字符串
1 | set strkey value |
列表
1 | lpush listkey zhongxin |
哈希
1 | hset hxkey filed1 hashvalue1 filed2 hashvalue |
集合
1 | sadd zsetkey 1 redis |
自带性能测试工具
1 | redis-benchmark -n 10000 -q |
redis穿透、雪崩、击穿
穿透
key查不到(例如 id为负数),去存储层数据库中获取,失去了缓存意义
解决办法:程序层做逻辑检查
雪崩
redis缓存数据库中大量的key在同一时间失效,请求这些key获取不到数据,从而去获取更底层的DB数据库
解决办法:设置key失效时间随机
击穿
持续长时间大并发请求某一个热点key,在key失效的瞬间,就突破了缓存