redis和cache的使⽤场景和区别
⾸先,我们要明确,为什么涉及到⾼并发后,我们要⽤到数据缓存。这是因为当⼀个业务接⼝被⽤户调⽤后,系统⾸先会进⼊对应业务⽅法中进⾏逻辑运算,之后会根据逻辑运算结果,访问对应的数据SQL语句,对数据进⾏调⽤或者修改。这⼀系列的业务流程⾛完是需要时间的。但在⾯对⾼并发的环境下,哪怕是1毫秒的反映时间,都是⾄关重要。如何提⾼业务接⼝的交互效率,这⾥就可以使⽤数据缓存(对于公共数据来说,在⽤户第⼀次访问的时候根据访问KEY将返回值缓存起来,当⽤户下次再次访问的时候,直接从缓存当中调⽤对应数据,从来提⾼接⼝相应速度)。
我遇到的缓存主要有redis和Cache两种。两个⼤致都是将数据放到缓存中以便⽤户下次调⽤时直接返回。但是两者的差异也是蛮⼤的,因此在不同的项⽬当中也会选择不同的⽅式。
先看看redis和Cache的区别吧
1、 Redis和cache都是将数据存放在内存中,都是内存数据库。不过cache还可⽤于缓存其他东西,例如图⽚、视频等等。
2、Redis不仅仅⽀持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3、虚拟内存-Redis当物理内存⽤完时,可以将⼀些很久没⽤到的value 交换到磁盘
4、过期策略–cache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如业务配置进⾏设定
5、分布式–设定cache集,利⽤magent做⼀主多从;redis可以做⼀主多从。都可以⼀主⼀从
6、存储数据安全–cache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)
7、灾难恢复–cache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复
8、Redis⽀持数据的备份,即master-slave模式的数据备份。
关于redis和memcache的不同,下⾯罗列了⼀些相关说法,供记录:
redis和memecache的不同在于[2]:
1、存储⽅式:
cache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存⼤⼩redis支持的数据结构
redis有部份存在硬盘上,这样能保证数据的持久性,⽀持数据的持久化(笔者注:有快照和AOF⽇志两种持久化⽅式,在实际应⽤的时候,要特别注意配置⽂件快照参数,要不就很有可能服务器频繁满
载做dump)。
2、数据⽀持类型:
redis在数据⽀持上要⽐cache多的多。
3、使⽤底层模型不同:
新版本的redis直接⾃⼰构建了VM 机制 ,因为⼀般的系统调⽤系统函数的话,会浪费⼀定的时间去移动和请求。
4、运⾏环境不同:
redis⽬前官⽅只⽀持LINUX 上去⾏,从⽽省去了对于其它系统的⽀持,这样的话可以更好的把精⼒⽤于本系统 环境上的优化,虽然后来微软有⼀个⼩组为其写了补丁。但是没有放到主⼲上。
个⼈总结⼀下,有持久化需求或者对数据结构和处理有⾼级要求的应⽤,选择redis。其他简单的key/value存储,选择cache。
cached介绍
cached 是⼀个⾼性能的分布式内存对象缓存系统,⽤于动态Web应⽤以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从⽽提供动态、数据库驱动⽹站的速度,现在已被LiveJournal、hatena、Facebook、Vox、LiveJournal等公司所使⽤。
cached⼯作⽅式分析
许多Web应⽤都将数据保存到 RDBMS中,应⽤服务器从中读取数据并在浏览器中显⽰。 但随着数据量的增⼤、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 ⽹站显⽰延迟等重⼤影响。Memcached是⾼性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提⾼动态Web等应⽤的速度、 提⾼可扩展性。
其中的过程是这样的:
1.检查⽤户请求的数据是缓存中是否有存在,如果有存在的话,只需要直接把请求的数据返回,⽆需查询数据库。
2.如果请求的数据在缓存中不到,这时候再去查询数据库。返回请求数据的同时,把数据存储到缓存中⼀份。
3.保持缓存的“新鲜性”,每当数据发⽣变化的时候(⽐如,数据有被修改,或被删除的情况下),要同
步的更新缓存信息,确保⽤户不会在缓存取到旧的数据。
Memcached作为⾼速运⾏的分布式缓存服务器,具有以下的特点:
1.协议简单
2.基于libevent的事件处理
3.内置内存存储⽅式
Redis 介绍
Redis是⼀个key-value存储系统。和Memcached类似,它⽀持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都⽀持push/pop、add/remove及取交集并集和差集及更丰富的操作,⽽且这些操作都是原⼦性的。在此基础上,redis⽀持各种不同⽅式的排序。与memcached⼀样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写⼊磁盘或者把修改操作写⼊追加的记录⽂件,并且在此基础上实现了master-slave(主从)同步,当前 Redis的应⽤已经⾮常⼴泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使⽤Redis的缓存服务。
Redis ⼯作⽅式分析
Redis作为⼀个⾼性能的key-value数据库具有以下特征:
1.多样的数据模型
2.持久化
3.主从同步
Redis⽀持丰富的数据类型,最为常⽤的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis通常将数据存储于内存中,或被配置为使⽤虚拟内存。Redis有⼀个很重要的特点就是它可以实现持久化数据,通过两种⽅式可以实现数据持久化:使⽤RDB快照的⽅式,将内存中的数据不断写⼊磁盘;或使⽤类似MySQL的AOF⽇志⽅式,记录每次更新的⽇志。前者性能较⾼,但是可能会引起⼀定程度的数据丢失;后者相反。 Redis⽀持将数据同步到多台从数据库上,这种特性对提⾼读取性能⾮常有益。
综合结论
应该说Memcached和Redis都能很好的满⾜解决我们的问题,它们性能都很⾼,总的来说,可以把Redis理解为是对Memcached的拓展,是更加重量级的实现,提供了更多更强⼤的功能。具体来说:
1.性能上:
性能上都很出⾊,具体到细节,由于Redis只使⽤单核,⽽Memcached可以使⽤多核,所以平均每⼀个核上Redis在存储⼩数据时
⽐ Memcached性能更⾼。⽽在100k以上的数据中,Memcached性能要⾼于Redis,虽然Redis最近也在存储⼤数据的性能上进⾏优化,但是⽐起 Memcached,还是稍有逊⾊。
2.内存空间和数据量⼤⼩:
MemCached可以修改最⼤内存,采⽤LRU算法。Redis增加了VM的特性,突破了物理内存的限制。
3.操作便利上:
MemCached数据结构单⼀,仅⽤来缓存数据,⽽Redis⽀持更加丰富的数据类型,也可以在服务器端直接对数据进⾏丰富的操作,这样可以减少⽹络IO次数和数据体积。
4.可靠性上:
MemCached不⽀持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis⽀持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。
5.应⽤场景:
Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,⼤数据量的情况(如⼈⼈⽹⼤量查询⽤户信息、好友信息、⽂章信息等)。
Redis:适⽤于对读写效率要求都很⾼,数据处理业务复杂和对安全性要求较⾼的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很⾼)。
需要慎重考虑的部分
1.Memcached单个key-value⼤⼩有限,⼀个value最⼤只⽀持1MB,⽽Redis最⼤⽀持512MB
2.Memcached只是个内存缓存,对可靠性⽆要求;⽽Redis更倾向于内存数据库,因此对对可靠性⽅⾯要求⽐较⾼
3.从本质上讲,Memcached只是⼀个单⼀key-value内存Cache;⽽Redis则是⼀个数据结构内存数据库,⽀持五种数据类型,因此Redis 除单纯缓存作⽤外,还可以处理⼀些简单的逻辑运算,Redis不仅可以缓存,⽽且还可以作为数据库⽤
4.新版本(3.0)的Redis是指集分布式,也就是说集本⾝均衡客户端请求,各个节点可以交流,可拓展⾏、可维护性更强⼤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论