这篇文章给大家分享的是有关使用Redis做缓存的原因有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
对Redis,百度百科给出的的解释是
“Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API”
“Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。”
那么,Redis有什么优点呢
-
Redis支持数据持久化
-
Redis的读写性能非常优异
-
丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
-
支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
-
Redis的数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。
相对应的,Redis也有缺点
-
数据库容量会受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
-
Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
-
如果主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
-
Redis 较难支持在线扩容
-
Redis是单线程的,单台服务器无法充分利用多核服务器的CPU
为什么我们要使用Redis呢?
从高并发上来说:
-
直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库
从高性能上来说:
-
用户第一次访问数据库中的某些数据。因为是从硬盘上读取的所以这个过程会比较慢。将该用户访问的数据存在缓存中,下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据
为什么要使用Redis而不是其他的,例如Java自带的 map 或者 guava
-
缓存分为本地缓存和分布式缓存。以 Java 自带的 map 或者 guava为例子, 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
-
使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。
Redis为什么这么快
-
完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中
-
数据结构简单,对数据操作也简单
-
采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU
-
使用多路 I/O 复用模型,非阻塞 IO
感谢各位的阅读!关于“使用Redis做缓存的原因有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/205279.html