NoSQL还是SQL?这一篇讲清楚
缓存技术PK:选择Memcached还是Redis?
除了缓存,Redis 都解决了哪些问题?
学会这15点,让你分分钟拿下Redis数据库
读完这篇文章,就基本搞定了Redis数据库
这可能是目前最全的Redis高可用技术解决方案总结 --redis 高可用架构
redis cli命令
1、一般缓存策略:
-
FIFO(First in First out)先进先出:
如果一个数据最先进入缓存中,则应该最早淘汰掉 -
LFU(Least Frequently Used)最近最少使用算法:
如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小 -
LRU(Least Recently Used)即最近最久未使用算法:
如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小
2、Memcached缓存:
- 特点:
- 协议简单
- 基于libevent的事件处理
- 内置内存存储方式
- memcached不互相通信的分布式
Memcached的数据回收机制:
使用的是LRU(即最低近期使用量)算法
-
数据结构:
- 1、slab_class里,存放的是一组组chunk大小相同的slab
- 2、每个slab里面包含若干个page,page的默认大小是1M,如果slab大小100M,就包含100个page
- 3、每个page里面包含若干个chunk,chunk是数据的实际存放单位,每个slab里面的chunk大小相同
Memcached将键名限制在250字节,值也被限制在不超过1MB,且只适用于普通字符串。相比之下,Redis则将键名与值的最大上限各自设定为512MB,且支持二进制格式。Redis支持六种数据类型
3、Redis缓存:
- 多样的数据模型
- 持久化
- 主从同步
- Redis通常将数据存储于内存中,或被配置为使用虚拟内存。
- Redis有一个很重要的特点就是它可以实现持久化数据,
通过两种方式可以实现数据持久化:
1、使用RDB快照的方式,将内存中的数据不断写入磁盘;
2、 或使用类似MySQL的AOF日志方式,记录每次更新的日志。
前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。- 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(驱逐):禁止驱逐数据
上面提到的LRU(Least Recently Used)策略,实际上Redis实现的LRU并不是可靠的LRU,也就是名义上我们使用LRU算法淘汰键,但是实际上被淘汰的键并不一定是真正的最久没用的, 这里涉及到一个权衡的问题,如果需要在全部键空间内搜索最优解,则必然会增加系统的开销,Redis是单线程的, 也就是同一个实例在每一个时刻只能服务于一个客户端,所以耗时的操作一定要谨慎 。为了在一定成本内实现相对的LRU, 早期的Redis版本是基于采样的LRU,也就是放弃全部键空间内搜索解改为采样空间搜索最优解。自从Redis3.0版本之后, Redis作者对于基于采样的LRU进行了一些优化,目的是在一定的成本内让结果更靠近真实的LRU。
- 策略规则:
- 如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用allkeys-lru
- 如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用allkeys-random
- volatile-lru策略和volatile-random策略适合我们将一个Redis实例既应用于缓存和又应用于持久化存储的时候,然而我们也可以通过使用两个Redis实例来达到相同的效果,
- 将key设置过期时间实际上会消耗更多的内存,因此我们建议使用allkeys-lru策略从而更有效率的使用内存
- 失效的内部实现:
- 消极方法(passive way),在主键被访问时如果发现它已经失效,那么就删除它
- 积极方法(active way),周期性地从设置了失效时间的主键中选择一部分失效的主键删除
- 主动删除:当前已用内存超过maxmemory限定时,触发主动清理策略,该策略由启动参数的配置决定
- Redis集群方案
Redis集群方案总结
Redis集群方案怎么做?大牛给你介绍五种方案!
Redis主从复制(一) -- 棒棒的
- 五种方案:
官方cluster方案
twemproxy代理方案
哨兵模式
codis
客户端分片
网友评论