Redis Remote Dictionary Server
数据类型
String List Set zset(SortedSet) hash
set key value string 最大能存储 512MB
hmset name key1 value1 key2 value2
lpush name value 头部添加
rpush name value 尾部添加
llen name 返回 list 长度
sadd name value
zadd name score value
每个元素关联一个 double 类型的分数
zset 的成员是唯一的,但分数(score)可以重复
Redis 与 memcached 区别 memcached 只支持 string ,redis 支持多种数据类型 redis 支持持久化 Redis 单线程 ,memcached 多线程 memcached 单 key 最大 1M ,redis 512M
所有数据放到内存,保证性能 ,通过异步的方式将数据写入磁盘 如果设置了最大使用内存,不能继续插入新值。
maxmemory 268435456
可以通过设置 LRU 算法来删除部分 key,释放空间。默认按照过期时间,如果 set 时候没有加上过期时间会导致写满 maxmemory。
内存使用情况查看 redis-cli info
设置了 maxmemory,一般都要设置过期策略 #最大内存 单位字节 maxmemory xxx #默认 maxmemory-policy noeviction
volatile-lru -> remove the key with an expire set using an LRU algorithm allkeys-lru -> remove any key accordingly to the LRU algorithm volatile-random -> remove a random key with an expire set allkeys-random -> remove a random key, any key volatile-ttl -> remove the key with the nearest expire time (minor TTL) noeviction -> don't expire at all, just return an error on write operations
持久化方案 RDB 定时对数据进行快照 默认的文件名为 dump.rdb 方便备份恢复, 恢复速度快
AOF Append Only File 记录每次对服务器写的操作
AOF 文件后台重写 减少占用大小
同时开启两种持久化方式, 重启时优先载入 AOF 文件来恢复数据
Redis 集群方案
twemproxy codis 与 twemproxy 类似 使用一致性 hash, 支持扩容 自动迁移数据 类似 memcached 集群方案,客户端处理分布 redis cluster3.0 自带的集群 不使用 一致性 hash 使用 hash 槽 ,支持设置从节点 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。 主从复制 异步复制 分片( shard ) 单线程 单台 redis 处理能力有限 单机多个实例 提升多核利用率
查询路由(Query routing) 客户端随机地请求任意一个 redis 实例,然后由 Redis 将请求转发给正确的 Redis 节点。 Redis Cluster 实现了一种混合形式的查询路由,但并不是直接将请求从一个 redis 节点转发到另一个 redis 节点,而是在客户端的帮助下直接 redirected 到正确的 redis 节点。
使用场景
会话缓存 分布式 session 队列 排行榜 /计数器 发布 /订阅 聊天系统
Java 客户端
Redisson、Jedis、lettuce
Redisson 是一个高级的分布式协调 Redis 客服端,能帮助用户在分布式环境中轻松实现一些 Java 的对象 Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog
Jedis Java 实现的客户端,提供了比较全面的 Redis 命令支持 Redisson 实现了分布式和可扩展的 Java 数据结构
常用命令
ping 连通性测试 EXPIRE 过期时间设置 PERSIST 永久有效设置 info 状态信息
Redis 回收机制
过期策略以及内存回收机制 passive (被动)和 active (主动) 当一些客户端进行访问的时候,key 被动过期 定时删除 时间事件,定期清理已经过期的键 maxmemory-samples 3 非精准算法
Redis 事务
事务相关命令 MULTI、EXEC、DISCARD、WATCH
Redis 如何做大量数据插入 pipe mode
pipeline
同事执行多个命令 最后一个命令返回结果
常见性能问题和解决方案 Master 最好不做持久化,如 RDB 内存快照和 AOF 日志文件 如果数据比较重要,Slave 开启 AOF 备份数据,策略设置为每秒同步一次 为了主从复制的速度和连接的稳定性,Master 和 Slave 最好在同一个局域网内 尽量避免在压力很大的主库上增加从库 主从复制用单向链表结构更为稳定,Master > Slave1 > Slave2 ... 方便解决单点故障问题,实现 Slave 对 Master 的替换。如果 Master 挂了,可以立刻启用 Slave1 做 Master
配置实时生效 通过 CONFIG SET 命令进行修改,无需重启
更多文章 http://codefun007.xyz