redis memcached

redis是开源BSD许可高级的key-value存储系统(NoSQL)
可以用来存储字符串,哈希结构,链表,集合,因此,常用来提供数据结构服务

redis和memcached相比的独特之处:
1、redis可以用来做存储(storage),而memcached是用来做缓存(cache)
这个特点主要因为其有持久化功能

2、redis中存储的数据有多种结构,而memcached存储的数据只有一种类型“字符串”

redis  从海量数据查询某一个固定前缀的key要注意

少量的话用命令,get keys pattern 例如 keys  zhang*

海量的数据用 scan sursor [MATCH pattern] [COUNT count]  这个返回来的游标可能会重复所以记得把key去重

redis 设置分布式锁

setnx key value  如果设置成功,返回1,设置失败,返回0

解决setnx锁长期有效的问题

setnx  key value [EX seconds] [PX milliseconds] [NX|XX]  如果设置成功返回OK,否则返回nil

用redis的list作为队列,rpush生产消息,lpop消费消息

缺点,没有等待队列有值就去消费,导致读不到数据,

弥补,可以通过应用层引入sleep机制去调用lpop重新

也可以用blpop key [key ....] timeout 阻塞直到队列有消息或者超时

缺点,只能一个链接的消费者消费。

RDB持久化,保存某个时间点的全量数据快照

1.手动触发RDB

save命令:阻塞redis的服务器进程,知道rdb文件被创建

bgsave命令:fork出一个进程来创建rdb文件,不阻塞服务器进程

2,自动触发RDB

根据redis.conf配置里的save m n定时触发(用的是bgsave)

主从复制时,主节点自动触发

执行debug reload

执行shutdown且没有开启aof持久化

AOF(Append-only-file)持久化:保存写状态

记录下除了查询之外的所有变更数据库的状态的指令

以append的形式追加保存到AOF文件中(增量)

redis的集群原理

一致性哈希算法:对2的32次方取模,将哈希值空间组织成虚拟的圆环,然后在根据 redis服务器的各种参数(比如ip地址,名称)使hash计算出哈希值,映射到圆环上的位置。然后查询的key使用相同的函数hash计算出哈希值,顺时针查找第一个节点为要使用的redis服务器。

如果发生宕机就会跳过宕机机器查找下个机器节点,如果新增机器节点道理一样

hash环的数据倾斜问题,这时候一致性hash引入虚拟节点,来分担数据分配不均匀的问题

原文地址:https://www.cnblogs.com/wangpengtao/p/5757747.html