(7)缓存策略:memcached的缓存策略是LRU(最近最少使用)到期失效策略 。在memcached内存储数据项时,可以指定它在缓存的失效时间,默认为永久 。当memcached服务器用完分配的内时,失效的数据被首先替换,然后也是最近未使用的数据 。在LRU中,memcached使用的是一种Lazy Expiration策略,自己不会监控存入的key/vlue对是否过期,而是在获取key值时查看记录的时间戳,检查key/value对空间是否过期,这样可减轻服务器的负载 。
Memcache工作原理:

文章插图
Memcache的工作流程如下:
(1)先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作 。
(2) 如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序实现) 。
(3) 每次更新数据库的同时更新memcached中的数据,保证一致性 。
(4) 当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据 。
Memcache集群
memcached 虽然称为“分布式 ” 缓存服务器,但服务器端并没有 “ 分布式 ” 功能 。每个服务器都是完全独立和隔离的服务 。memcached 的分布式,是由客户端程序实现的 。
当向memcached集群存入/取出key value时,memcached客户端程序根据一定的算法计算存入哪台服务器,然后再把key value值存到此服务器中 。
存取数据分二步走,第一步,选择服务器,第二步存取数据 。

文章插图
分布式算法(Consistent Hashing):
选择服务器算法有两种,一种是根据余数来计算分布,另一种是根据散列算法来计算分布 。
- 余数算法:
优点:计算简单,高效 。
缺点:在memcached服务器增加或减少时,几乎所有的缓存都会失效 。
- 散列算法:(一致性Hash)

文章插图
如果添加了一台Memcached服务器,只在圆上增加服务器的逆时针方向的第一台服务器上的键会受到影响 。
一致性Hash算法:解决了余数算法增加节点命中大幅额度降低的问题,理论上,插入一个实体节点,平均会影响到:虚拟节点数 /2 的节点数据的命中 。
2、Redis
Redis 是一个开源(BSD许可)的,基于内存的,多数据结构存储系统 。可以用作数据库、缓存和消息中间件 。支持多种类型的数据结构,如 字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets) 与范围查询,bitmaps,hyperloglogs 和 地理空间(geospatial) 索引半径查询 。
内置了 复制(replication),LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence),并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability) 。
Redis常用数据类型
- String
应用场景:String是最常用的一种数据类型,与Memcache的key value存储方式类似 。
实现方式:String在Redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int 。
- Hash
应用场景:以存储一个用户信息对象数据,为例:

文章插图
实现方式:Redis Hash对应的Value,内部实际就是一个HashMap,实际这里会有2种不同实现 。
(1)Hash的成员比较少时Redis为了节省内存会采用类似一维数 组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap 。
推荐阅读
- 茶月饼和茶食品热销 茶企瓜分中秋经济大蛋糕
- 分布式微服到底是什么
- Win7系统硬盘分区怎么调整大小
- 大家都是怎么做站群的?
- 梦见家里人失踪到处找 梦见家人失踪到处找找到了打什么奖
- 茶路之旅风情展区成北交会大亮点
- 冲蹲便器水压小怎么办,蹲便器冲水太大怎么办
- 花洒底座是否都统一大小,花洒可以随便换吗
- 个性淘宝店名 淘宝网店店名大全
- 梦到被小孩缠着赶不走最后还是敢走了是什么意思 梦到被小孩缠着赶不走小女孩
