当前位置: 首页 > news >正文

Redis框架详解

目录

1. redis是什么

主要特点

2. redis中存储的数据类型

2.1 String类型

2.2 List类型

2.3 Hash类型

2.4 Set类型

2.5 Zset类型

2.6 其它类型

3.redis高可用框架

1. redis是什么

Redis 是一个开源的、基于内存的数据结构存储系统,是 Remote Dictionary Server(远程字典服务器)的缩写。可用作:

  • 数据库
  • 缓存
  • 消息中间件

主要特点

  • 基于内存操作,性能极高
  • 支持丰富的数据结构(字符串、哈希表、列表、集合等)
  • 支持数据持久化
  • 支持主从复制和集群
  • 单线程模型(核心操作)

2. redis中存储的数据类型

常见的5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合)。

2.1 String类型

String 是最基本的 key-value 结构,key 是唯一标识,value 是具体的值,value其实不仅是字符串, 也可以是数字(整数或浮点数),value 最多可以容纳的数据长度是512M。

常见指令:

操作常用指令value类型
查询GET key字符串
增加SET key value
删除DEL key
判断key是否存在EXISTS key
判断key中value长度STRLEN key
value值+1INCR key整数
value值-1DECR key
value值+10INCR key 10
设置过期时间60秒EXPIRE key 60
查看数据还有多久过期TTL keytime to live
设置值和过期时间

SETEX key 60 value

SET key value EX 60

不存在插入SETNX key value

应用场景:

  • 缓存对象数据
  • 计数(单线程原子操作):INCR key
  • 分布式锁:SETNX key value PX 1000,若key不存在,则插入成功即加锁成功,若key存在,加锁失败,同时给该key锁设置过期时间1秒。
  • 共享session信息:分布式系统,服务器共享redis中存储的session信息。

扩展:SETEX 是较早引入的命令,当时Redis主要使用作为时间单位;SET 命令的选项是后来添加的,增加了更精细的毫秒级控制,PX = Precise eXpire (in milliseconds)

2.2 List类型

简单的字符串列表,底层采用双链表,列表的最大长度为 2^32 - 1,也即每个列表支持超过 40 亿个元素。

常用指令:

操作常用指令
在value列表left左侧插入数据LPUSH key value
在value列表右侧right插入数据RPUSH key value
列表左侧弹出头元素LPOP key
列表右侧弹出尾元素RPOP key
返回指定区间内的元素LRANGE key start stop

应用场景:

  • 消息队列:

2.3 Hash类型

Hash 是一个键值对(key - value)集合,其中 value 的形式如: value=[{field1,value1},...{fieldN,valueN}]。Hash 特别适合用于存储对象

常用指令:

操作常用指令
增加HSET key field value(HMSET key field1 value1 field2 value2 )
获取HGET key field
删除HDEL key field
field的数量HLEN key

2.4 Set类型

无序并唯一的键值集合,一个集合最多可以存储 2^32-1 个元素。

常见指令:

操作指令备注
增加元素SADD key value
删除元素SREM key value
获取所有元素SMEMBERS key

应用场景:数据去重,数据唯一性,集合之间交集、并集、错集。

点赞:文章下点赞的用户数据

共同关注:不同的用户关注的相同的公众号数据

2.5 Zset类型

有序集合类型:元素依然是唯一的,不允许重复,但是每个元素是有顺序的。每个元素存储两个值,一个是顺序号,一个是元素值。

常用指令

操作指令备注
增加ZADD key score value
删除ZREM key value
返回元素的分值ZSCORE key value
某个元素的score增加ZINCRBY key score value

应用场景:排行榜、排序

2.6 其它类型

  • BitMap(2.2 版新增):二值状态统计的场景,比如签到、判断用户登陆状态、连续签到用户总数等;
  • HyperLogLog(2.8 版新增):海量数据基数统计的场景,比如百万级网页 UV 计数等;
  • GEO(3.2 版新增):存储地理位置信息的场景,比如滴滴叫车;
  • Stream(5.0 版新增):消息队列,相比于基于 List 类型实现的消息队列,有这两个特有的特性:自动生成全局唯一消息ID,支持以消费组形式消费数据。

3.redis高可用框架

框架:主从模式,数据修改只在主服务器上,然后将最新的数据同步给从服务器。

如果主服务器挂了,如何选择新的主服务器呢,引入哨兵机制,它会检测主节点是否存活,哨兵的作用:监控、选主、通知。

为了减少一个哨兵节点对主服务器判断的失误,所以,为了减少误判的情况,哨兵在部署的时候不会只部署一个节点,而是用多个节点部署成哨兵集群(最少需要三台机器来部署哨兵集群),通过多个哨兵节点一起判断,就可以就可以避免单个哨兵因为自身网络状况不好,而误判主节点下线的情况。同时,多个哨兵的网络同时不稳定的概率较小,由它们一起做决策,误判率也能降低。

这张图展示的是Redis哨兵(Sentinel)模式的架构相关逻辑。 在Redis哨兵模式中,存在主节点(Master)、从节点(Slave)和哨兵节点(Sentinel)。主节点负责处理写操作,从节点通过“写同步”从主节点同步数据,主要处理读操作。

哨兵节点的作用是监控主节点的状态。图中的哨兵A、B、C会对主节点是否下线进行判断与协商。比如哨兵B和C判定主节点“主观下线”(即自身认为主节点可能下线)后,会相互询问对方是否也认为主节点下线,哨兵C表示认同,而哨兵A则判定主节点在线且不认同其他哨兵的观点。当多数哨兵(通常是超过半数)判定主节点真正下线(客观下线)后,会触发故障转移流程,从从节点中选举出新的主节点,保证Redis服务的高可用性。

参考:https://www.xiaolincoding.com/redis/cluster/master_slave_replication.html


文章转载自:

http://wX0UfZ5S.bnLkc.cn
http://cRr5sTox.bnLkc.cn
http://uBaBi0tw.bnLkc.cn
http://8xbMHbxd.bnLkc.cn
http://GL70ACkm.bnLkc.cn
http://GeHUYyuS.bnLkc.cn
http://Ak8hat96.bnLkc.cn
http://8Ksbs0sR.bnLkc.cn
http://FGhAlgcX.bnLkc.cn
http://EJgnMZRJ.bnLkc.cn
http://BCGPs2hb.bnLkc.cn
http://so8jiKbp.bnLkc.cn
http://7BhHarPM.bnLkc.cn
http://hNCc7ni0.bnLkc.cn
http://EWjrmBcA.bnLkc.cn
http://7ZYMoxlU.bnLkc.cn
http://D6vGKtGg.bnLkc.cn
http://PXXUNzUQ.bnLkc.cn
http://U6ZSyF3N.bnLkc.cn
http://Ffu2gHyO.bnLkc.cn
http://Rh0tpTMJ.bnLkc.cn
http://l0y8r19N.bnLkc.cn
http://zIVMj4sw.bnLkc.cn
http://8ATnWDkZ.bnLkc.cn
http://a3fPWTvr.bnLkc.cn
http://TwUupFuw.bnLkc.cn
http://L44L6lhp.bnLkc.cn
http://f5K0jpzV.bnLkc.cn
http://2P5is6sr.bnLkc.cn
http://9sbXDS1f.bnLkc.cn
http://www.dtcms.com/a/383508.html

相关文章:

  • Redis----缓存策略和注意事项
  • Redis的大key问题
  • 微服务学习笔记25版
  • 地址映射表
  • AI Agent 软件工程关键技术综述
  • 命令行工具篇 | grep, findstr
  • 6【鸿蒙/OpenHarmony/NDK】多线程调用 JS 总崩溃?用 napi_create_threadsafe_function 搞定线程安全交互
  • OpenTenBase分布式HTAP实战:从Oracle迁移到云原生数据库的完整指南
  • LabVIEW信号监测与分析
  • 【大模型算法工程师面试题】大模型领域新兴的主流库有哪些?
  • Java队列(从内容结构到经典练习一步到位)
  • Cherno OpenGL 教程
  • RT-DETRv2 中的坐标回归机制深度解析:为什么用 `sigmoid(inv_sigmoid(ref) + delta)` 而不是除以图像尺寸?
  • OpenCV入门教程
  • 深度学习-计算机视觉-目标检测三大算法-R-CNN、SSD、YOLO
  • 冰火两重天:AI重构下的IT就业图景
  • 从ENIAC到Linux:计算机技术与商业模式的协同演进——云原生重塑闭源主机,eBPF+WebAssembly 双引擎的“Linux 内核即服务”实践
  • 从 MySQL 迁移到 GoldenDB,上来就踩了一个坑。
  • qt界面开发入门以及计算器制作
  • SQL 核心概念与实践总结
  • 【Tourbox】怎么复制预设?
  • RTT操作系统(2)
  • 基于STM32单片机智能手表GSM短信上报GPS定位防丢器设计
  • 力扣658.找到K个最接近的元素
  • LeetCode 面试经典 150_哈希表_赎金信(39_383_C++_简单)
  • LeetCode热题100--114. 二叉树展开为链表--中等
  • 【交易系统系列33】从Raft到Kafka:解构交易所核心系统的一致性与数据持久化之道
  • 数据结构---基于顺序存储结构实现的双端队列
  • C4D建模入门指南:核心术语与高效设置详解
  • Unity核心概念⑧:Input