Redis 的一些关键知识点及示例

Redis 是一个开源的内存数据结构存储系统,广泛用于缓存、消息队列、实时分析等场景。以下是 Redis 的一些关键知识点及示例:

1. 基本数据类型

Redis 支持多种数据类型,每种数据类型都有其特定的操作命令。

1.1 字符串 (String)

字符串是 Redis 中最基本的数据类型,可以存储任何类型的值。

# 设置键值对
SET key "value"# 获取键值
GET key# 示例
SET name "Alice"
GET name  # 返回 "Alice"

1.2 哈希 (Hash)

哈希是一个键值对集合,适合存储对象。

# 设置哈希字段
HSET user:1 name "Alice"
HSET user:1 age 30# 获取哈希字段
HGET user:1 name# 示例
HSET user:1 name "Alice"
HSET user:1 age 30
HGET user:1 name  # 返回 "Alice"
HGETALL user:1  # 返回所有字段和值

1.3 列表 (List)

列表是一个有序的字符串集合,可以从两端进行操作。

# 从左侧插入元素
LPUSH list1 "a"
LPUSH list1 "b"# 从右侧插入元素
RPUSH list1 "c"# 获取列表长度
LLEN list1# 弹出左侧第一个元素
LPOP list1# 获取列表中的所有元素
LRANGE list1 0 -1# 示例
LPUSH list1 "a"  # list1: ["a"]
LPUSH list1 "b"  # list1: ["b", "a"]
RPUSH list1 "c"  # list1: ["b", "a", "c"]
LLEN list1       # 返回 3
LPOP list1       # 返回 "b", list1: ["a", "c"]
LRANGE list1 0 -1 # 返回 ["a", "c"]

1.4 集合 (Set)

集合是一个无序的字符串集合,自动去重。

# 添加元素到集合
SADD set1 "a"
SADD set1 "b"
SADD set1 "a"  # 重复元素不会被添加# 获取集合中的所有元素
SMEMBERS set1# 检查元素是否在集合中
SISMEMBER set1 "a"# 示例
SADD set1 "a"  # set1: {"a"}
SADD set1 "b"  # set1: {"a", "b"}
SADD set1 "a"  # set1: {"a", "b"}
SMEMBERS set1  # 返回 {"a", "b"}
SISMEMBER set1 "a"  # 返回 1 (true)
SISMEMBER set1 "c"  # 返回 0 (false)

1.5 有序集合 (Sorted Set)

有序集合类似于集合,但每个元素都会关联一个分数,元素按分数排序。

# 添加元素到有序集合
ZADD zset1 1 "a"  # zset1: {"a": 1}
ZADD zset1 2 "b"  # zset1: {"a": 1, "b": 2}# 获取有序集合中的所有元素
ZRANGE zset1 0 -1   # 返回 ["a", "b"]# 获取有序集合中元素的分数
ZSCORE zset1 "a"  # 返回 1

2. 发布/订阅 (Pub/Sub)

Redis 支持发布/订阅消息模式,适用于实时消息传递。

# 订阅频道
SUBSCRIBE channel1# 发布消息到频道
PUBLISH channel1 "Hello, World!"# 示例
# 终端1:
SUBSCRIBE channel1  # 订阅 channel1# 终端2:
PUBLISH channel1 "Hello, World!"  # 订阅者会收到消息 "Hello, World!"

3. 事务 (Transaction)

事务允许一次执行多个命令,保证原子性。

# 开始事务
MULTI# 添加命令到事务队列
SET key1 "value1"
SET key2 "value2"# 执行事务
EXEC# 示例
MULTI
SET key1 "value1"
SET key2 "value2"
EXEC  # 两个 SET 命令会被原子性地执行

4. 脚本 (Scripting)

Redis 支持使用 Lua 脚本执行复杂操作。

# 执行 Lua 脚本
EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 key "value"  # 等同于 SET key "value"

5. 持久化 (Persistence)

Redis 提供两种持久化方式:RDB 快照和 AOF 日志。

5.1 RDB (Redis Database)

RDB 是一种快照方式,将数据在某个时间点保存到磁盘。

# 手动触发 RDB 快照
SAVE  # 同步保存数据到磁盘# 异步触发 RDB 快照
BGSAVE   # 异步保存数据到磁盘

5.2 AOF (Append Only File)

AOF 记录每个写操作日志,重启时重放日志以恢复数据。

# 启用 AOF
CONFIG SET appendonly yes# 手动重写 AOF 文件 以减少体积
BGREWRITEAOF

6. 主从复制 (Replication)

Redis 支持主从复制,实现数据的高可用和读写分离。

# 配置从节点
SLAVEOF master_host master_port# 示例
SLAVEOF 127.0.0.1 6379  # 将当前节点配置为 127.0.0.1:6379 的从节点

7. 哨兵 (Sentinel)

哨兵用于监控 Redis 实例,实现自动故障转移。

# 启动哨兵
redis-sentinel /path/to/sentinel.conf# 示例
# sentinel.conf 配置文件中定义了主节点和监控参数
sentinel monitor mymaster 127.0.0.1 6379 2  # 监控主节点 mymaster

8. 集群 (Cluster)

Redis 集群允许在多个节点间分布数据,实现高可用和可扩展性。

# 创建集群
redis-cli --cluster create host1:port1 host2:port2 host3:port3 --cluster-replicas 1# 示例
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 1

9. 常用配置

Redis 提供多种配置选项,可以通过配置文件或命令行进行设置。

# 查看当前配置
CONFIG GET *# 设置最大内存为 256MB
CONFIG SET maxmemory 256mb

10. 安全性

Redis 提供密码保护和访问控制列表 (ACL) 来增强安全性。

# 设置密码
CONFIG SET requirepass "yourpassword"# 使用密码连接
redis-cli -a "yourpassword"

11. 性能优化

通过合理配置和使用,可以提升 Redis 的性能。

11.1 内存优化

使用合适的数据类型
合理设置最大内存和内存淘汰策略

Copy
# 设置最大内存
CONFIG SET maxmemory 256mb# 设置内存淘汰策略为 LRU
CONFIG SET maxmemory-policy allkeys-lru 

11.2 网络优化

使用更高效的网络协议
合理配置客户端连接数

# 设置最大客户端连接数
CONFIG SET maxclients 10000

11.3 持久化优化

根据业务需求选择合适的持久化方式
调整 RDB 和 AOF 的配置参数

# 设置 RDB 快照频率
CONFIG SET save "900 1 300 10 60 10000"# 设置 AOF 同步频率为每秒一次
CONFIG SET appendfsync everysec

12. 常见问题

12.1 内存不足

# 检查内存使用情况
INFO memory# 清理不必要的数据
DEL old_key  

12.2 性能瓶颈

分析慢查询日志
优化数据结构和访问模式
考虑使用集群或分片

# 设置慢查询日志阈值为 10 毫秒
CONFIG SET slowlog-log-slower-than 10000# 查看慢查询日志
SLOWLOG GET

12.3 数据丢失

检查持久化配置
确保主从复制和哨兵配置正确
定期备份数据

# 查看 RDB 配置
CONFIG GET save# 查看 AOF 配置
CONFIG GET appendonly# 手动触发备份
BGSAVE

13. 高级特性

13.1 Bitmaps

Bitmaps 是一种特殊的数据结构,用于处理位操作。

# 设置某个位的值
SETBIT bitmap1 7 1# 获取某个位的值
GETBIT bitmap1 7# 统计位图中值为1的位数
BITCOUNT bitmap1# 示例
SETBIT bitmap1 7 1  # 将 bitmap1 的第8位设置为1
GETBIT bitmap1 7  # 获取 bitmap1 的第8位的值,返回1
BITCOUNT bitmap1  # 统计 bitmap1 中值为1的位数,返回1

13.2 HyperLogLog

HyperLogLog 是一种用于基数估计算法的数据结构,适用于大规模数据去重统计。

# 添加元素到 HyperLogLog
PFADD hll1 "a" "b" "c"   # 添加元素到 hll1# 获取基数估计值
PFCOUNT hll1# 合并多个 HyperLogLog
PFMERGE hll2 hll1

13.3 Geospatial

Redis 提供地理空间数据的存储和操作功能。

# 添加地理空间数据
GEOADD locations 13.361389 38.115556 "Palermo"  # 添加地理位置 Palermo
GEOADD locations 15.087269 37.502669 "Catania"  # 添加地理位置 Catania# 获取地理空间数据的距离
GEODIST locations "Palermo" "Catania" km   # 获取 Palermo 和 Catania 之间的距离,返回166.2742 km# 获取指定范围内的地理空间数据
GEORADIUS locations 15 37 200 km # 获取指定范围内的地理位置

14. 实用工具

14.1 Redis CLI

Redis CLI 是 Redis 提供的命令行工具,用于与 Redis 服务器交互。

# 连接到 Redis 服务器
redis-cli -h host -p port# 执行 Redis 命令
redis-cli SET key "value"# 示例
redis-cli -h 127.0.0.1 -p 6379  # 连接到本地 Redis 服务器
redis-cli SET key "value"  # 设置键值对

14.2 Redis Sentinel

Redis Sentinel 是用于监控 Redis 实例和实现高可用性的工具。

# 启动 Redis Sentinel
redis-sentinel /path/to/sentinel.conf

14.3 Redis Cluster
Redis Cluster 是用于实现 Redis 分布式存储的工具。

# 创建 Redis 集群
redis-cli --cluster create host1:port1 host2:port2 host3:port3 --cluster-replicas 1# 示例
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 1  # 创建 Redis 集群

15. Redis 客户端

除了 Redis CLI,Redis 还支持多种编程语言的客户端库,常见的有:
Python: redis-py
Java: Jedis
Node.js: node_redis
Go: go-redis

15.1 Python 示例

import redis# 连接到 Redis 服务器
r = redis.Redis(host='localhost', port=6379, db=0)# 设置键值对
r.set('key', 'value')# 获取键值对
value = r.get('key')
print(value)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ToonCrafter - AI 生成动画越来越简单了,两张照片生成动画视频 本地一键整合包

动画制作对很多人来说应该都是一项非常专业且复杂的工作,需要学习专门的知识,掌握特定的工具,并且投入大量的时间精力才能得到成果,不过最近出现的一款 AI 动画制作工具 ToonCrafter 则有希望改变这一现状。它只需 2 张图像就生成…

如何使用Python中的collections模块提供的数据结构,如deque、Counter、OrderedDict等

Python 的 collections 模块提供了一些额外的数据结构,这些数据结构在内置的数据类型(如列表、字典、集合等)的基础上,增加了额外的功能或优化了性能。下面是如何使用 collections 模块中的 deque、Counter 和 OrderedDict 这三种…

[个人感悟] Java基础问题应该考察哪些问题?

前言 “一切代码无非是数据结构和算法流程的结合体.” 忘了最初是在何处看见这句话了, 这句话, 对于Java基础的考察也是一样. 正如这句话所说, 我们对于基础的考察主要考察, 数据结构, 集合类型结构, 异常类型, 已经代码的调用和语法关键字. 其中数据结构和集合类型结构是重点…

fl studio怎么设置中文及 2024年最新fl studio选购指南

FL Studio让你的计算机就像是全功能的录音室,漂亮的大混音盘,先进的创作工具,让你的音乐突破想象力的限制。zol提供FL Studio中文版下载。 FL Studio中文版下载软件简介 FL Studio 让你的计算机就像是全功能的录音室,漂亮的大混…

开发没有尽头,尽力既是完美

最近遇到了一些难题,开发系统总有一些地方没有考虑周全,偏偏用户使用的时候“完美复现”了这个隐藏的Bug...... 讲道理创业一年之久为了生存,我一直都有在做复盘,复盘的核心就是:如何提升营收、把控开发质量&#xff0…

Springboot 上传图片及访问

1、yml配置 下面的服务器根据自己所用的进行调整即可 upload:file:# 这是linux服务器的上传路径# location: file:/mnt/www/pp/test_ai/image#这是windows服务器的上传路径location: file:d://image/#这是访问的虚拟路径path: /temp-image/** fileServer: #这是访问图片的…

SQL Server中的CTE和临时表优化

在SQL Server中,优化查询性能是数据库管理的核心任务之一。使用公用表表达式(CTE)和临时表是两种重要的技术手段。本文将深入探讨CTE如何简化代码,以及临时表如何优化查询性能。通过实例和详尽解释,我们将展示这两种技…

Linux基础 (十五):TCP 协议特点和UDP协议

上一节,我们学习了TCP协议的服务器-客户端的编程流程以及对中间的过程进行了详细的讨论,那么,这一节,我们对于TCP协议的特点进行进一步的分析,这也是面试的重点和难点。 目录 一、TCP 协议特点 1.1 连接的建立与断…

单片机数码管时钟电路的设计

5 调试 数码管的引脚1~4,a~g以及小数点的排列都不是连续的,这就意味着难免需要飞线。数码管是分共阴和共阳的,起初我错把原理图中的共阳数码管当成了共阴数码管,焊上去了之后才发现,为了避免拆卸…

Unity Vuforia

首先在unity2019版本里可以在windows->PackageManager里搜Vuforia EngineAR; (unity2021版本里搜不到) 在官网注册账号: 添加识别图等; 将导出的unitypackage包导入unity中。 unity里导入package之后,新建场景&am…

web前端MVC框架:深入剖析与实战应用

web前端MVC框架:深入剖析与实战应用 在web前端开发的浩瀚星空中,MVC框架以其独特的魅力引领着开发者们探索未知的领域。MVC,即Model-View-Controller,是一种将应用程序的业务逻辑、数据模型和用户界面分离的设计模式。在web前端领…

Golang——gRPC与ProtoBuf介绍

一. 安装 1.1 gRPC简介 gRPC由google开发,是一款语言中立,平台中立,开源的远程过程调用系统。gRPC客户端和服务器可以在多种环境中运行和交互,例如用java写一个服务器端,可以用go语言写客户端调用。 1.2 gRPC与Protob…

④-1单细胞学习-cellchat单数据代码补充版

目录 1,数据输入及处理 ①载入包和数据 ②CellChat输入数据准备 ③构建CellChat对象 ④数据预处理 2,细胞通讯预测 ①计算细胞通讯概率 ②提取配受体对细胞通讯结果表 ③提取信号通路水平的细胞通讯表 ④细胞互作关系可视化 1)细胞…

IO流(缓冲流)

1.字节缓冲流 原理:字节缓冲输入流自带8KB缓冲池;字节缓冲输出流自带8KB缓冲池 public static void main(String[] args) throws IOException {try(InputStream is new FileInputStream("D:\\pt\\123.jpg");//1.定义一个字节缓冲输入流包装原始的字节输…

JAVA:在IDEA引入本地jar包的方法并解决打包scope为system时发布无法打包进lib的方案

一.引入本地Jar包的步骤 有时maven依耐的包是本地的jar包,此时需要进行以下步骤设置。 步骤1.在pom.xml中添加插件设置,将system范围包含进来,此设置是为了在打包时,本地jar包自动生成到部署包里。(若无法打进包,请参考下文的方案二) <plugin><groupId>org.…

Modbus主站和从站的区别

Modbus主站,从站 在工业自动化领域&#xff0c;Modbus是一种常用的通信协议&#xff0c;用于设备之间的数据交换。在Modbus通信中&#xff0c;主站和从站是两个关键的角色。了解主站和从站之间的区别对正确配置和管理Modbus网络至关重要。 Modbus主站的特点和功能 1.通信请求发…

硬盘坏了数据能恢复吗 硬盘数据恢复一般多少钱

在数字化时代&#xff0c;我们的生活和工作离不开电脑和硬盘。然而&#xff0c;硬盘故障是一个常见的问题&#xff0c;可能会导致我们的数据丢失。当我们的硬盘坏了&#xff0c;还能恢复丢失的数据吗&#xff1f;今天我们就一起来探讨关于硬盘坏了数据能恢复吗&#xff0c;硬盘…

Polar Web【困难】上传

Polar Web【困难】上传 Contents Polar Web【困难】上传探索&思路&效果进入环境绕过过程Webshell连接 EXPPayload 总结 探索&思路&效果 本题的主题可见为文件上传&#xff0c;详情在破解的过程中逐步发掘&#xff1a; 进入环境&#xff0c;为一个文件上传功界面…

苹果需要专注于让人工智能变得实用,而不是华而不实

谷歌和微软已将其开发者大会作为展示其生成式人工智能能力的平台&#xff0c;现在所有人的目光都集中在下周的全球开发者大会上&#xff0c;预计Apple Intelligence将在此首次亮相。 这家总部位于库比蒂诺的公司面临着巨大的压力。 苹果在人工智能竞赛中落后于同行&#xff0…

04-4.2.1 朴素模式匹配算法

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…