初识Redis

178 阅读3分钟

基本概念

数据结构
  • SDS: simple dynamic string
  • List: 双向链表
  • Set: Hash的一种变种,通过hash存储于数组中;
  • Hash:类似java语言的HashMap,
  • ZSet:底层实现skipList
    对于set,zset, hash和list类型,当键-值为整型或短字符串时,
        底层实现使用压缩列表(内存连续且耗用内存小)
    对于set,当全是整型时,使用整数集合
位操作及其使用场景
操作解释操作范例
setbit设置SETBIT key offset value
getbit获取GETBIT key
bitcount计算被设置为 1 的比特位的数量BITCOUNT key [start] [end]
bitpos位图中第一个值为 bit 的位置BITPOS key bit [start] [end]
bitop对一或多个字符串 key 进行位元操作, destkey保存结果BITOP operation destkey key [key …]

| BITFIELD|||

bitmap用以记录网站登陆次数

架构

  • single 单机模式
  • Replica 副本模式(5.0.4前称master-slave模式) - 保证数据安全
    适合读写分离,且读多写少。副本节点负责读操作,主节点负责写操作。
    主节点写操作完成后,副节点信息同步问题
  • Sentinel 哨兵模式 ----保证高可用 Availability
    基于主从复制架构,分布式系统中增加setinel来保证主节点工作
  • Cluster 集群模式

持久化

  • RDB
    快照保存方式。属于全量复制。可采取save(同步阻塞)和bgsave(异
    步非阻塞)两种方式。定期持久化,恢复耗时短,无法实时持久化
  • AOF
    保存数据增删改查操作。增量方式保存。实时持久化

垃圾回收

  • 定时回收
  • 惰性回收:再次访问时确定是否回收并执行回收操作
垃圾回收算法
    noeviction: 报错
    volatile-lru:超时键值的时间上来说最少访问算法 (访问一次即替换
        表头,linkedhashmap的实现
    allkeys-lru
    volatile-lfu:超时键值的频次上来说最少访问,堆的实现
    allkeys-lfu
    volatile-random:随机删除
    allkeys-random
    volatile-ttl

Redis分布式锁 vs Zookeeper分布式锁

锁概念
锁/异同互斥抢占等待中断资源访问者队列
线程锁超时中断/阻塞中断有,如AQS
分布式锁超时中断根据实现方式
分布式锁/异同死锁解决等待队列锁操作问题/锁失效
memcached分布式锁
redis分布式锁超时释放set+nx+ex锁早释放;del归属和原子性适合业务耗时不长
zookeeper分布式锁
chubby分布式锁
Redis分布式锁解决框架

参考:Redisson-githubredis-分布式

Redis vs Spring

  • spring-boot内置redis的自动装配机制,提供两种 1. Jedis 2. Lettuce(响应式开发)

  • spring-boot 2.0及其后续版本优先支持Lettuce相关连接,当lettuce相关依赖不存在时,使用Jedis, 可通过排除lettuce相关api实现jedis的选用。

Screenshot 2021-07-29 at 10.30.35 PM.png Screenshot 2021-07-29 at 10.00.45 PM.png

延伸

  • lfu 不适合作为热点数据查询算法,热点数据存在阶段性,历史访问频次会影响新数据查询。较适合随机访问场景,数据的平均访问量相当

  • paxos--选举算法