1.Redis概述
Redis:NoSQL数据库,使用内存作为介质,采用键值对(KV)保存数据。
-
性能优越:读的速度为是十一万次每秒(官方),写的速度为八万一千次每秒(官方)
-
应用场景:1.缓存热点或常用数据(热搜,热评)2.消息队列:(支付)3.高速读写(现场投票)
-
注意事项:
1.业务数据如果命中率很低,没有必要写入Redis
2.业务数据频繁需要写入数据库,也没有必要写入Redis
3.业务数据数据量过大,会给Redis带来很大的压力,也没有必要使用Redis
2.如何安装与配置:
1.启动服务器 :redis-server redis.window.conf (redis.window.conf配置文件,requirepass 可以设置密码,最前面不能为空格)
2.启动客户端: redis-cli.exe
3.可以使用桌面管理工具:RedisDesktopManager
3.五种数据类型
-
String set key value get key value
-
Hash
1.hset key 字段 value
2.hmset key 字段1 value1 字段2 value2 字段n value n (存储多个)
3.hget key 字段
4.hmget key 字段1 字段2 字段3 字段n (获取多个字段值)
5.hgetall key (获取键的所有字段与value)
-
List(实质上是一个栈)
1.lpush key value1 value2 value3 valuen
2.lrange key 开始下标 结束下标 (根据下标位置遍历)
-
Set(不可重复,无序)
1.sadd key value1 value2 value3
2.smembers key (获取所有的键)
-
Zset(可排序,根据score)
1.zadd key score1 value1 score2 value2 score3 value3 scoren value3
2.zrange key 开始下标 结束下标 (根据下标遍历)
3.zrangebyscore key 开始下标 结束下标(根据分数区间遍历)
常用命令
-
获取所有键:key *
-
获取键总数:dbsize
-
查询是否存在:exists key
-
删除键:del key
-
查询键类型:type key
-
查询Key的声明周期:del key pttl key
-
设置过期时间:expire key seconds pexpire key milliseconds
-
设置永不过期:persist key (永不过期状态为-1)
-
更改键名: rename key newKey
-
Redis为什么这么快?
1.采用内存作为存贮介质 2.kv键值对结构简单不会有太多的开销3.单线程,底层为C/C++
-
缓存穿透
用户不断发起请求,缓存与数据库中都没有要查询的数据。例如ID为-1或者ID为非常大的数据。
解决:1.增加接口层校验,id进行校验,拦截
2.将要查询的数据的值设置为空,防止被同一个ID多次攻击
-
缓存击穿
缓存有没有但数据库中有的数据(如:缓存时间到期),并发很高,都去数据库读取数据了,数据库压力瞬间增大。
解决方案:热点数据永不过期,定时的更新缓存数据
-
缓存雪崩
缓存中的数据大批量的到期,而查询数量巨大,引起数据库压力过大甚至down。与缓存击穿不同的是,数据大量到期,击穿是一个数据过期,并发很高。
解决方案:1.热点数据永不过期2.数据过期时间随机,防止同一时间过期。3.缓存数据分布式部署,热点数据均匀分布在不同的缓存数据库中。