~ 使用redis缓存数据需要注意的问题以及个人的一些思考和理解
来源:互联网 发布:短信猫用什么网络 编辑:程序博客网 时间:2024/05/17 04:42
http://www.cnblogs.com/linkstar/p/5970354.html
之前我有博客也尝试过使用redis,在实际的项目中确实作用挺大的。至少对于数据的频繁读取来说都起着至关重要的作用。
但是随着技术的学习,慢慢的业务要复杂起来,以后也许会用到redis集群,所以在这边查询了一些资料,做了一些思考和理解。
如果有问题,请提出,虚心接受,认真学习。
一般的redis逻辑
请求过来,redis里面有没有?有就给用户
没有查询数据库
数据库里面有没有?没有告诉用户没有
有就查询出来,给用户,并且存放到redis
redis缓存会出现什么问题?
redis缓存数据库的数据,有一点就显得特别重要,那就是数据一致性的问题。
单个数据库在多线程操作的时候如果不是数据库锁的限制会出现很多数据不一致的问题,ACID这里我就不多说了。
redis缓存也会有这样的问题,就是数据库的数据更新到redis是会有时间差的,这样的时间差就会导致数据不一致。
比如一件商品价格在数据库里面是500,然后redis也是500,但是突然数据库修改成了600,如果所有用户都是读入数据库的话,数据库会加锁,然后避免用户读出之前那个500,但是redis的更新怎么说都是有时间差的,所以用户就有可能读取到500这个数据。
这就是数据不一致的问题。
redis适合缓存怎么样的数据?
这里的数据分为两块,第一是数据库的数据,第二是页面的一些静态数据。
这里说的是数据库的数据。
页面的一些静态数据不适合存放在缓存中。
然后对于上面提出的数据不一致的问题,所以缓存的数据也有要求。
不要缓存那些对于数据一致性要求很高的数据。
如果这个数据存在被修改的可能性,那么最好不要存缓存,要么,就不要放数据库,只放缓存。
那些对于数据一致性不高的数据,都是可以放的。
强调一点是,如果这个数据放了,但是对于这个数据的操作不是修改,而是只有删除的话,也是可以存放缓存的,因为在实际操作中,如果一个删除操作被执行的时候,缓存可以先进行删除,这样就能确保没有用户能够读取到删除之后的数据,然后再对数据库进行删除。
redis集群
redis集群,这边我给出的建议是使用redis的主从复制功能,这个功能和mysql的主从复制是一个道理,都能很好的确保数据的一致性。
具体redis集群的配置以及实验我会在后面新的博客中给出的。
总结一下:具体的使用过程中,使用redis的超时可以对数据进行一些持久化管理,对于一些数据一致性不高的数据进行缓存,使得读取速度提高,使用redis集群时可以是用主从复制功能,Redis集群没有中心节点,并且带有复制和故障转移特性,这可以避免单个节点成为性能瓶颈,或者因为某个节点下线而导致整个集群下线。
本人的经验也不多,希望有经验的师傅们能提供多一些的建议。
- 使用redis缓存数据需要注意的问题以及个人的一些思考和理解
- ~ 使用redis缓存数据需要注意的问题以及个人的一些思考和理解
- 使用redis缓存数据需要注意的问题以及个人的一些思考和理解
- 使用Redis需要注意的数据安全问题
- 使用IOCP需要注意的一些问题
- 使用ViewStub需要注意的一些问题
- vector使用需要注意的一些问题
- 虚继承的理解以及需要注意的问题
- Genymotion安装教程以及一些需要注意的问题
- Java 泛型以及一些需要注意的问题
- 使用AIDL,客户端调用和Service回调,以及一些需要注意的细节
- 数据恢复过程中需要注意的一些问题
- NSNotificationCenter的使用以及需要注意的问题
- 对模板缓存的一些个人理解
- 个人对Redis的一些简单理解
- iBatis下使用like查询,以及需要注意的问题
- 使用异常时需要注意的一些问题(转)
- 关于SelectOjbect使用需要注意的一些问题
- java 集合类
- STM32的CAN波特率计算
- PopupWindow 系统6.0以上 setOutsideTouchable失效分析
- Frangment嵌套出现重叠的情况
- Mapreduce 整个工作机制图
- ~ 使用redis缓存数据需要注意的问题以及个人的一些思考和理解
- jquery清空元素内容
- PHP判断是否为移动端访问
- 关于Hibernate一级缓存的快照问题
- 给初学者的RxJava2.0教程(五)
- 数据库并发控制
- javaOOp 字符流读取文件
- ARIMA时间序列分析
- android 创建一个简单的自定义对话框