Redis 常用知识

1、redis中有5种基本的数据类型

String ,list ,set zset,hash

String使用方法:

Set key value;

Get key

设置一个不存在的字符串,返回0,表示设置失败,已存在,返回1,表示设置新值成功,nx 表示not。

Setnx key value

Get key。

一次性设置多个

mset key1 value1 key2 value2

Hash 哈希

Hset hash key1 value1

Hget hash key1

// 设置一个不存在对的值

Hsetnx hash key1 value1

List 类型

lpush key1 value1 value2 value3

获取某一段数据

lrange list1 0  -1 (0: 第一个,1:最后一个)

在列表后面添加数据

rpush list 1 2

按下标获取数据

lindex list 1

set 集合

sadd 向key对应的set 集合中添加元素

sadd myset a b

获取整个集合的元素

smembers myset

删除集合中的一个数据

strem myset two

spop 随机删除set中的一个元素并返回该元素

spop 随机删除set中的一个元素并返回该元素

Zset 有序集合

向有序集合zset中添加元素并制定顺序,如果元素已存在就更新元素顺序

zadd myset1 1 one

zadd myzet1 2 two

Zrange myset1 0 1

删除一个元素

zrem myzset1 two

1、redis 底层数据存储结构

typedef struct redisObject{

   // 类型

   Unsigned type:4;

  // 编码

   Unsigned encoding:4;

  // 指向底层数据结构的指针

   Void *ptr;

  // 引用计数

   int refcount;

  // 记录最后一次被程序访问的时间

   Unsigned lru:22;

}

Redis的底层实现原理是通过encoding的编码方式实现的。

Zset 是怎么保持有序的呢

  1. 使用ziplist编码方式,ziplist 编码的有序集合对象使用压缩列表作为底层实现,每个集合元素使用两个紧挨在一个一起的压缩节点保存,一个节点保存元素的成员,地儿节点保存元素的分值。并且压缩列表内的元素按分值从小到大的顺序进行排列,小的放在位置靠近表头的位置,大的放置在靠近表尾的位置。
  2. 使用跳跃表的方式

typedef struct zset{

     //跳跃表

     zskiplist *zsl;

     //字典

     dict *dice;} zset;

 跳跃表的方式:

跳跃表到大key是score,value 是数值通过key的大小来保持排序。

编码转换

  1. 保存元素数量小于128
  2. 保存的所有元素长度都小于64字符

不能满足上面两个条件使用skiplist 编码。保存的所有元素长度都小于64字节。

引用:

Redis:有序集合类型zset的实现原理_一蓑烟雨任平生-CSDN博客

Redis:有序集合类型zset实现原理 - 简书

Redis 如何解决hash冲突问题

Redis 使用两个全局hash表,才用rehash 也就是重新hash的方式来解决hash冲突的问题。

Redis执行持久化的方式

RDB 快照方式,AOF 指令执行记录的方式

Redis的高可用方式

1、主从

读写分离: 主从都可以担任读的操作,从节点担任写的操作

故障恢复:当主节点出现问题了,还有其他节点可以使用

负载均衡:Master节点提供写服务,slaver节点读服务分担压力

同步分为三种情况:1、第一次同步2、正常运行期间的同步 3、网络断开时的同步

主从是其他集群的基础。

2、哨兵

加入了哨兵集群对主从进行监控,哨兵之间通过主节点的发布订阅机制进行通信,哨兵通过master节点接受到从节点的列表进行对从节点监控。

3、集群cluster

通过分片来进行管理,集群上每个节点共同承担16384 的 slots

引用:Redis 面霸篇:从高频问题透视核心原理

穿透,击穿,雪崩

REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案 - 大码哥 - 博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值