redis 知识点整理

2018-12-14 13:28:59 +08:00
 dyyx

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 命令进行修改,无需重启

更多文章 http://codefun007.xyz

6745 次点击
所在节点    Redis
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/517525

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX