Redis基本知识点

Redis

1) 特点

a) 是一个Key-Value类型的内存数据库
b) 全部数据都加载到内存中进行操作,支持RDB/AOF持久化到硬盘机制,每秒可以处理超过 10万次读写操作
c) 支持保存多种数据结构: String,Hash,List,Set,Sorted Set
d) 单进程单线程,利用队列技术将并发访问变为串行访问
e) 使用List做FIFO双向链表,可实现一个轻量级的高性能消息队列服务
f) 读写分离
Master会将数据同步到slave,而slave不会将数据同步到master
slave启动时会连接master来同步数据
master写数据,slave读数据

缺陷: Master和Slave都必须保存完整的数据,数据量很大的情况下,集群的扩展能力受限于单个节点的存储能力

2) 内存回收策略: 各种淘汰算法

3) 持久化机制

a) 定时快照方式(RDB),会阻塞主线程的工作

b) 基于语句追加文件的方式(AOF),类似mysql的binlog,记录了写操作的日志; 发生重写时会影响Redis性能

4) 使用场景

a) 会话缓存: 用户登录信息/购物车信息等
b) 全页面缓存: 缓存整个html页面
c) 队列: 使用list和set
d) 计数器: increment方法
e) 排行榜: 集合(Set)和有序集合(Sorted Set)
f) 分布式锁
采用redis2.6.12版本以后的set, 增加了设置超时的选项
代码
public static boolean tryGetDistributedLock(Jedis jedis, String lockKey, String requestId, int expireTime) {
        String result = jedis.set(lockKey, requestId, "NX", "PX", expireTime);
        if ("OK".equals(result)) {
            return true;
        }

}

5) 集群/分布式方案

a) 自定义算法分片: 数据分布在若干个Redis上, 通过自定义路由算法,到对应的Redis存取数据
b) 代理分片:codis(豌豆荚)/ Twemproxy(Twitter)
c) redis cluster
分片采用slot(槽)的概念,一共分成16384个槽
每个Redis的键值对,根据key进行散列,分配到这16384个slot中的某一个中
集群中的每个redis节点负责分摊这16384个slot中的一部分
当动态添加或减少节点时,需要将16384个槽做个再分配,槽中的键值也要迁移
推荐的方案是将node节点配置成主从结构,一个master主节点挂n个slave从节点, 如果主节点失效Redis Cluster会根据选举算法从slave节点中选择一个上升为主节点,整个集群继续对外提供服务
客户端可以连接任意一个node进行操作,就像操作单一Redis实例一样

猜你喜欢

转载自blog.csdn.net/zyf_balance/article/details/78729181