Redis(远程字典服务器)
- 防止在高并发的情况,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。
- Redis可以支持每秒十几万此的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,更让人欣慰的是它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。
- Redis采用的是K-V模型存储数据的。
- 默认占6379端口
Redis 在 Java Web 中的应用
- 存储 缓存 用的数据;
- 需要高速读/写的场合使用它快速读/写;
- 们把数据放在 Redis 中,也就是直接放在内存之中,让服务端直接去读取内存中的数据,那么这样速度明显就会快上不少,并且会极大减小数据库的压力。
- 但是使用内存进行数据存储开销也是比较大的,所以我们只是使用 Redis 存储一些常用和主要的数据,比如用户登录的信息等。
Redics使用中需要考虑的问题
- 业务数据是否常用。
- 该业务数据是读操作多,还是写操作多?如果写操作多,频繁需要写入数据库,也没有必要使用缓存;
- 业务数据的大小,若果过于大,也没必要使用,会给缓存带来很大的压力。
Redis的特点
使用逻辑图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d26acaee8e155b9dc8f6aec99401d060.png#pic_center)
- 第一次读取数据时,读取Redis会失败,然后去读取数据库中的数据,然后把读取到的数据写入到Redis中。
- 第二次读取数据时,直接读取Redis中的数据。
- 如果业务数据写次数远大于读次数那么就没有必要使用 Redis。
案例(秒杀商品)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7d3c6c91e35be88c1cdbf3b611ff33d2.png#pic_center)
- 发送请求,读取redis。
- 判断读写业务是否结束(当商品数量为0时,则成立)
- 如果不成立则不会操作数据库。
- 成立则把Redis缓存的数据一次性批量的写入数据库。
redis keys命令
set key value;设置key和value
get key;得到value
dump key;序列化
exists key; 检查客运是否存在
EXPIRE key seconds; 设置key的过期时间
PERSIST key; 移除key的过期时间
randomkey; 返回一个随机的KEY
type key; 返回key所存储的类型
String字符串
mset key value [key value] 设置多个key 和value
strlen key 返回可以对应的字符串值的长度
setex key seconds value 将value关联到key并设置过期时间
mget key [key] [key] 获取多个key 对应的value
Hash哈希
hmset key filed " " filed " "
hdel key filed [filed]
hget key filed 得到所有的key
hgetall key获取在哈希表中指定 key 的所有字段和值
hkeys key 返回所有的key
hlen key 返回key的长度
hvals key 获取所有的值
List列表
LPUSH KEY VALUE 将一个值插入一个列表中
LRANGE KEY 0 10 找出列表中10个value
LLEN KEY 获取列表的长度
LPOP KEY 移出并获取列表的第一个元素
RPOP KEY 移除列表的最后一个元素,返回值为移除的元素
Set集合
SADD key member1 [member2]向集合添加一个或多个成员
SCARD key 获取集合的成员数
SINTER key1 [key2]
SMEMBERS key 返回集合中的所有成员
SPOP key 移除并返回集合中的一个随机元素
SINTERSTORE destination key1 [key2] 返回给定所有集合的交集
SREM key member1 [member2]移除集合中一个或多个成员
SRANDMEMBER key [count]返回集合中一个或多个随机数
Sorted Set 有序集合
ZADD key score1 member1 [score2 member2] 添加多个成员
ZCARD key 获取有序集合的成员数
ZCOUNT key min max计算在有序集合中指定区间分数的成员数
ZREM key member [member ...]移除有序集合中的一个或多个成员
ZREMRANGEBYSCORE key min max移除有序集合中给定的分数区间的成员ZSCORE key member返回有序集中,成员的分数值
HyperLogLog
PFADD key element [element ...] 添加指定元素
PFCOUNT key 返回基数估算值
PFMERGE destkey sourcekey [sourcekey ...]将多个HyperLogLog 合并为一个 HyperLogLog
演示
![](https://i-blog.csdnimg.cn/blog_migrate/c7e87f1c6b2624fa7665ef585ab80978.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2e918913a7465e77328e6683a3774af1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/02c09ba9bed329295a7fe888151c6423.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a022bfe18aa6da1462f969abb8a28e46.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b95524c6a30ca04a930789cc29e91556.png)