首页   快速返回

redis知识点整理     所属分类 redis
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 xxx
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 命令进行修改,无需重启

上一篇     下一篇
A 股 的 真 相

10 Golden rules of doing business in China

java web项目中获取重要的请求信息

数据备份三二一原则

蘑菇街5万股期权值多少钱

Elasticsearch知识点整理