memcache?memcache的特点
一、redis和memcached的区别
Redis和Memcached都是内存缓存系统,但它们有以下几个方面的区别:
1.数据类型:Redis支持更多的数据类型,包括字符串、哈希、列表、集合和有序集合等,而Memcached只支持简单的键值对。
2.存储方式:Redis可以将数据持久化到磁盘上,以便在重启后恢复数据,而Memcached只能将数据存储在内存中,重启后数据会丢失。
3.性能:在读取方面,Memcached的性能比Redis略高,因为它只是一个简单的键值存储系统。但在写入方面,Redis的性能比Memcached高,因为它支持更多的数据类型和更复杂的操作。
4.分布式:Memcached天生就是分布式的,可以通过添加节点来扩展缓存容量,而Redis需要使用集群来实现分布式缓存。
5.应用场景:由于Redis支持更多的数据类型和更复杂的操作,因此它更适合用于需要高级数据结构和复杂操作的应用程序,如社交网络和实时分析。而Memcached更适合用于简单的键值存储和缓存,如Web应用程序中的页面缓存和会话管理。
二、memcache与redis有何区别,redis有哪些优势呢
简介
说到缓存技术,只要有一定经验的开发人员,肯定会想到redis和memcached这两个。并且在BAT里,redis已经逐渐取代了memcached,成为分布式场景广泛使用的缓存方案。接下来,我们就分析下,redis是如何取代memcached,成为开发者的宠儿的。
一、支持的存储类型不同
虽然redis和memcached都是内存型数据库,并且memcached不仅能够存储string类型,还能够存储图片、文件、视频等格式的文件。然而对于更多的使用内存数据库做缓存以及分布式方案的程序开发者来说,memcached提供的string类型存储的应用场景非常有限,而存储图片视频的功能又十分鸡肋(许多公司的用户场景是没这方面需求)。相比之下,redis提供set,hash,list等多种类型的存储结构,非常适合分布式缓存的实现。
二、数据落盘
memcached数据不可恢复,虽然大多数人使用缓存以及分布式方案都不会要求数据持久化,但是谁也不能保证不出现万一的情况。一旦发生稳定性问题,memcached挂掉后,数据是不可恢复的,而redis除了支持在配置里打开数据落盘(RDB),还能通过aof来找回数据。
三、内存空间与数据量
memcached可以修改最大内存,使用的是LRU算法,而redis目前底层使用了自己的VM,引入了新的特性突破了物理内存的限制。个人认为在这方面依然是redis更加优秀一些。
备注:value值-redis最大可以达到1GB,而memcache只有1MB;
四、使用场景
(1)、会话缓存(SessionCache)
最常用的一种使用Redis的情景是会话缓存(sessioncache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?
幸运的是,随着Redis这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。
(2)、全页缓存(FPC)
除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。
再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。
此外,对WordPress的用户来说,Pantheon有一个非常好的插件wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。
(3)、队列
Reids在内存存储引擎领域的一大优点是提供list和set操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对list的push/pop操作。
如果你快速的在Google中搜索“Redisqueues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。
(4),排行榜/计数器
Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(SortedSet)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:
当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:
ZRANGEuser_scores010WITHSCORES
AgoraGames就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。
(5)、发布/订阅
最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!(不,这是真的,你可以去核实)。
(6)、其他
但是如果是对缓存的数据格式有更多的要求,且对安全性也有很高的要求的话,建议还是使用redis,这也是redis目前正在逐渐代替memcached的根本原因。
五、总结
六、快问快答
1、redis常见性能问题和解决方案?
(1)Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2)如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3)为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4)尽量避免在压力很大的主库上增加从库
(5)主从复制不要用图状结构,用单向链表结构更为稳定,即:Master<-Slave1<-Slave2<-Slave3…
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
2、MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
相关知识:redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis提供6种数据淘汰策略:
voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰;
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰;
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰;
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰;
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据;
七、经典架构
---------------END----------------
后续的内容同样精彩
三、memcached是什么
memcached是一键简单便捷的手机物理实验演示软件,memcached这款软件为用户提供了强大的物理模拟功能,帮助模拟出真实的物理实验室,用户可以在软件中进行各种物理电路实验,自由的布置电路,完美的复原了每一个电器模拟细节和电学性质等等。