V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dyyx
V2EX  ›  Redis

redis 知识点整理

  •  
  •   dyyx · 2018-12-14 13:28:59 +08:00 · 6920 次点击
    这是一个创建于 2200 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5847 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:55 · PVG 09:55 · LAX 17:55 · JFK 20:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.