Redis 知识点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Redis 知识点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3990字,纯文字阅读大概需要6分钟。
内容图文
![Redis 知识点](/upload/InfoBanner/zyjiaocheng/862/7df995777187407c8b8418d17edf17a7.jpg)
一:Redis 基本数据类型有哪些,及其对应的应用场景
可以参考redis 应用场景
String(字符串),hash(哈希),list(列表),set(集合),sortedSet(有序集合)
应用场景举例:
string(字符串)—缓存、计数器、session共享、限速
hash(哈希)—用户信息、商品信息、订单信息 (hash用来保存一些对象信息)
list(列表)—消息队列、文章列表、好友列表
set(集合)—标签、共同好友、兴趣
zset(sorted set:有序集合) —排行榜
应用场景:
1.String类型:
1)增减操作
微博的粉丝数,关注数等需要时时更新的数据
在redis中为大V设定用户信息,以用户主键和属性为剑值,如:
key的命名规则:以表名+主键+主键值+字段 :字段值。以这样的规则来命名就可以很好的来管理我们的键值。
2)时效操作
保存token等需要过期的信息
2.hash类型:
hash是一个string类型的field和value的映射表,hash类型的(key, field, value)的结构与对象的(对象id, 属性, 值)的结构相似
购物车功能可以采用hash 如:
3.list类型
特点:list可以从左右两端进行添加
list类型的lrange命令可以按照范围查看队列中的数据:
可将每隔一段时间计算一次的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名、斗鱼年终盛典主播排名等.
4.set类型
与hash相比值是不允许重复的
1:粉丝排行榜等
2:充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的intersections交集命令就可以充分发挥它的方便和效率的优势了。
5.sortedSet类型
特点:每一个value都可以设置一个数值,可以利用这个数值来排序
游戏排名、微博热点话题等使用场景
二. redis和关系型数据库一起操作时实现事务一致性问题
写代码判断redis是否操作成功
1.使用@Transactional 开启事务回滚
2.先操作关系型数据库在操作redis
3.redis 操作完判断是否操作成功,失败则跑错触发事务对关系型数据库进行回滚
三.redis事务:
如果一定要使用spring提供的注解式事务,建议初始化两个RedisTemplate Bean,分别设置enableTransactionSupport属性为true和false。针对需要事务和不需要事务的操作使用不同的template。
从个人角度,我不建议使用redis事务,因为redis对于事务的支持并不是关系型数据库那样满足ACID。Redis事务只能保证ACID中的隔离性和一致性,无法保证原子性和持久性。而我们使用事务最重要的一个理由就是原子性,这一点无法保证,事务的意义就去掉一大半了。所以事务的场景可以尝试通过业务代码来实现。
四.redisson 分布式锁 实现原理
五. 可重入锁实现原理
场景:2个锁嵌套,造成死锁
a{
外部加锁();
int();
外部解锁();
}
int(){
内部加锁();
内部解锁()
}
当进程进入int()要进行内部加锁时,发现已经外部加锁了,只能进行等待外部解锁后才能在加锁,这些线程就卡住了,造成死锁。
利用了redis的hash 进行操作,key 为锁名,hashkey 为加锁次数key,每次加锁hashval就加1,解锁就减1,解锁时判断为0时 删除锁。
六. redis 持久化
RDB:将数据库的快照以二进制的方式保存到磁盘中
AOF:以协议文本的方式,将所有对数据库进行过写入的命令及参数记录到AOF文件,以此达到记录数据状态的目的
七.redis雪崩,击穿,穿透
缓存穿透
缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。
解决方案:
1.对请求进行过滤校验, 对 id<=0 的不合法请求直接拦截, 可使用布隆过滤器.
2.对不存在的数据缓存一个空数据,如果在缓存和数据库中都找不到请求的数据,就返回这个空数据。缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击
缓存击穿
缓存击穿是指缓存中没有但数据库中有的单条数据(通常由缓存过期造成)被并发查询,并发请求非常多,同时读缓存没有读到又同时去读数据库,造成数据库压力过大.
解决方案:
1.设置热点数据永远不过期。
2.加互斥锁,读数据库时需要获取锁,一条请求拿到锁之后读取数据并更新缓存,其他未获得锁请求延时后再去读取缓存数据.
缓存雪崩
缓存雪崩发生时说明缓存中大批量的数据过期,而查询量巨大,请求直接到达数据库,造成数据库压力剧增.
解决方法:
1.随机设置缓存数据过期是时间,防止大规模缓存数据同时间过期.
2.设置热点数据永不过期.
3.分布式部署的缓存将热点数据均匀分布在不同的缓存数据库中.
八.缓存一致性(redis和数据库缓存一致性)
要求数据库数据更新时缓存中的数据也能实时更新.
解决方法:
1.数据库更新时立即去更新缓存.
2.读缓存数据前判断缓存是否是最新的,不是则先进行更新.
九.redis 主从负责 哨兵
内容总结
以上是互联网集市为您收集整理的Redis 知识点全部内容,希望文章能够帮你解决Redis 知识点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。