redis主要使用场景(Redis从简介应用到总结)
redis主要使用场景(Redis从简介应用到总结)消息中间件使用Redis发布/订阅进行进程间通信5. sorted set:sorted set多了一个权重参数score 集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作2. Hash:Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象;3. List:使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能;4. Set:因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能 可以计算共同喜好,全部的喜好,自己独有的喜好等功能;
简介Redis(redis.io) 是一个高性能的key-value数据库。在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C ,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端
特性- Redis是单线程;
- Redis支持数据的持久化;
- Redis支持主从同步 数据可以从主服务器向任意数量的从服务器上同步;
- Redis的所有操作都是原子性的;
- Redis 具有publish/subscribe特性 设置key有效期等
查询内存比查询数据库效率高,辅助存储,减轻数据库压力
场景热点缓存、session共享、分布式锁、自增id、验证码等
数据模型1. String:最常规的set/get操作,value可以是String也可以是数字。一般做一些计数功能的缓存,又或者存session等;
2. Hash:Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象;
3. List:使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能;
4. Set:因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能 可以计算共同喜好,全部的喜好,自己独有的喜好等功能;
5. sorted set:sorted set多了一个权重参数score 集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作
常见应用消息中间件
使用Redis发布/订阅进行进程间通信
缓存同步
使用Redis发布/订阅特性配合谷歌GuavaCacheManager组件实现缓存数据的即时同步
Session共享
@EnableRedisHttpSession这个注解是由spring-session-data-redis提供的。通过EnableRedisHttpSession注解来开启spring session支持
热点数据存储
很常见的场景用于统计网站访问数量,当前在线人数等
问题总结Redis单Key大数据
所谓的大key就是存储本身的key值空间太大,或者hash,list,set等存储中value值过多。
影响:查询慢,影响正常业务访问;单线程,使得其他请求阻塞;元素个数建议尽量不要超过5000
解决:将大key进行分割,根据业务数据的某个特性维度,均匀划分成若干个子key
关于RedisTemplate里存取Long类型
存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
原因:取值过程中将结果反序列化为Object类型,所以这里便是问题的根源所在,对于数值类型,取出后统一转为Object 导致泛型类型丢失,数值自动转为了Integer类型
redis的过期策略以及内存淘汰机制
redis采用的是定期删除 惰性删除策略
redis默认每个100ms检查,是否有过期的key 有过期key则删除
redis不是每个100ms将所有的key检查一次,而是随机抽取进行检查,惰性删除派上用场
定期删除没删除key,也没即时去请求key 内存淘汰机制?
在redis.conf中有一行配置
# maxmemory-policy volatile-lru //移除最近最少使用的key
noenviction(驱逐):不删除任意数据会直接返回错误