美文网首页
Redis基本知识及数据一致性问题

Redis基本知识及数据一致性问题

作者: KewinHu | 来源:发表于2020-12-03 17:15 被阅读0次

在了解Redis之前,首先给自己提几个疑问:我们得知道Redis是用来做什么的?在什么时候能使用到?它得优势在什么地方?使用它又需要注意什么?接下来我们带着心中得疑问一步一步共同学习下。

简介

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

Redis数据类型

String(字符串):Redis最基本的数据类型,一个键对应一个值,一个键值最大存储512MB

Hash(哈希):hash是一个键值对的集合,是一个String类型的field和value的映射表,适合用于存储对象

 List(列表):是redis的简单的字符串列表,按插入顺序排序

 Set(集合):是String字符串类型的无序集合,也不可重复

 ZSet(sorted  set  有序集合)是String类型的有序集合,也不可重复。有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序。

1.Redis是用来做什么的

缓存,内存作为数据存储介质,读写数据的效率极高,可设置持久化

消息通知(发布-订阅),是进程中的一种消息通信模式,发送者pub发送消息,订阅者sub接收消息,一对一相当于私聊,一对多相当于群聊

高速队列

2.什么时候能用到

2.1 缓存

高并发的数据,可以放入Redis缓存

频繁访问且变动较小的数据可以放入Redis缓存,减少db的io

分布式中可以用来缓存会话

排行版

购物车

...

2.2 发布-订阅

应用中聊天,消息交流

支付完成后,等待服务器通知支付结果

实时公告或通知

....   

PS:如果数据量大,可以去看看Kafka

2.3 队列

支付系统,大量的下单,可以放入队列用于缓冲

注册、登录等待 发送短信

...

PS:量大可以使用RabbitMQ

3.Redis优点

1.基于内存,数据读写速度快,性能高

2.支持持久化存储

3.支持多种数据类型

4.丰富特性:过期策略,事务,支持多db

4.数据一致性问题

这里主要讨论下Redis作为缓存时数据一致性问题

在数据量不大的情况下,一般采用先访问Redis,如果Redis中不存在访问的数据,则去Db中查询,把查询的结果缓存到Redis,当有新数据来就直接写入Db

如果高并发的情况下

4.1 先更新Redis,Reids更新成功后,在更新Db

1) Redis写入成功,后续得Db写入由于某种原因更新失败,出现数据不一致

4.2 更新Db,删除Redis缓存

1) 当高并发得情况下,很可能在更新Db动作没完成时候出现一次新得查询请求

解决方案:

读取数据时,如果Redis中数据不存在,则去Db查询,更新缓存,但新得数据来得时候,我们先更新Db,如果Db数据更新成功,此时则让Redis缓存失效(或者删除对应Redis缓存),达到同步得效果,如果Db更新失败 则无需更新Redis。此时有朋友肯定会想,如果缓存失效(或者删除对应Redis缓存)没成功怎么办,这是一个疑问,在网上看到有人提出了,重试机制,诶,这个很可以,方案中再加入策略

相关文章

网友评论

      本文标题:Redis基本知识及数据一致性问题

      本文链接:https://www.haomeiwen.com/subject/lfiipktx.html