Redis高级特性

Redis是一个高性能的内存数据库,除了基本的键值存储功能外,还提供了许多高级特性,能够满足不同的应用场景需求。以下是一些Redis的常用高级特性:

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

功能介绍

发布/订阅模式是一种消息通信模式,允许一个或多个发布者将消息发送到一个或多个订阅者。

用法

发布者和订阅者通过频道(channel)进行通信。发布者将消息发布到特定的频道,而订阅者则订阅这些频道以接收消息。

# 订阅频道
SUBSCRIBE channel1

# 发布消息
PUBLISH channel1 "Hello, Redis!"
场景应用

实时消息系统、通知系统、聊天室等。

2. 事务 (Transactions)

功能介绍

Redis提供简单的事务功能,可以确保一组命令按顺序执行,具有原子性。

用法

事务通过MULTI命令开始,EXEC命令结束,中间的命令将被顺序执行。如果在EXEC之前调用DISCARD,则取消事务。

MULTI
SET key1 value1
SET key2 value2
EXEC
场景应用

需要确保一组操作要么全部执行,要么全部不执行的场景,如银行转账。

3. 脚本 (Scripting)

功能介绍

Redis支持Lua脚本,可以将多个命令封装在一个脚本中执行,确保原子性和高效性。

用法

使用EVAL命令执行Lua脚本,脚本中的redis.call函数可以执行Redis命令。

-- Lua脚本示例
local value = redis.call("GET", KEYS[1])
return value
# 执行脚本
EVAL "return redis.call('GET', KEYS[1])" 1 key1
场景应用

需要执行复杂操作并确保原子性的场景,如分布式锁。

4. 持久化 (Persistence)

功能介绍

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

  • RDB (Redis Database)快照:在指定时间间隔保存数据快照。
  • AOF (Append Only File)日志:记录每次写操作,重启时重放日志。
配置示例
# 配置RDB持久化
save 900 1
save 300 10
save 60 10000

# 配置AOF持久化
appendonly yes
appendfilename "appendonly.aof"
场景应用

需要数据持久化存储的场景,如断电或服务器重启时数据不丢失。

5. 复制 (Replication)

功能介绍

Redis支持主从复制,可以将数据从一个Redis实例复制到另一个实例,实现数据冗余和负载均衡。

用法

在从节点上配置slaveof命令。

# 配置从节点
slaveof <masterip> <masterport>
场景应用

数据冗余、读写分离、高可用架构等。

6. 高可用和分布式 (Redis Sentinel 和 Redis Cluster)

Redis Sentinel
  • 功能介绍:提供监控、通知和自动故障转移功能,确保Redis高可用。
  • 用法:配置sentinel.conf文件,启动Sentinel实例。
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
Redis Cluster
  • 功能介绍:提供分布式存储,数据分布在多个节点上,支持自动分片和高可用。
  • 用法:配置多个Redis实例为集群节点,使用redis-trib工具进行集群配置。
redis-trib create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
场景应用

需要高可用性和分布式存储的场景,如大规模的缓存和数据存储系统。

7. 缓存淘汰策略

功能介绍

Redis提供多种缓存淘汰策略,以处理内存限制,确保在内存不足时可以清理过期或不常用的数据。

主要策略
  • noeviction:返回错误,不进行任何移除操作。
  • allkeys-lru:使用LRU算法移除任意key。
  • volatile-lru:使用LRU算法移除设置了过期时间的key。
  • allkeys-random:随机移除任意key。
  • volatile-random:随机移除设置了过期时间的key。
  • volatile-ttl:移除最近将要过期的key。
配置示例
maxmemory 100mb
maxmemory-policy allkeys-lru
场景应用

需要控制内存使用的缓存系统。

8. 地理空间索引 (Geospatial Indexes)

功能介绍

Redis提供地理空间数据存储和查询功能,可以存储地理位置并执行半径查询等操作。

用法

使用GEOADD添加地理位置,使用GEODIST查询距离,使用GEORADIUS进行范围查询。

# 添加地理位置
GEOADD locations 13.361389 38.115556 "Palermo"
GEOADD locations 15.087269 37.502669 "Catania"

# 查询两个位置之间的距离
GEODIST locations Palermo Catania km
场景应用

基于位置的服务,如查找附近的商家或用户。

9. HyperLogLog

功能介绍

HyperLogLog是一种概率数据结构,用于基数统计,具有固定的小内存占用。

用法

使用PFADD添加元素,使用PFCOUNT获取基数估计值。

# 添加元素
PFADD myloglog "foo" "bar" "baz"

# 获取基数估计值
PFCOUNT myloglog
场景应用

需要进行大规模唯一计数的场景,如统计网站的独立访问用户。

10. 位图 (Bitmaps)

功能介绍

Redis支持对字符串进行位操作,可以用于实现高效的位集合。

用法

使用SETBIT设置位,使用GETBIT获取位,使用BITCOUNT统计1的数量。

# 设置位
SETBIT mykey 7 1

# 获取位
GETBIT mykey 7

# 统计1的数量
BITCOUNT mykey
场景应用

用户签到、活跃用户统计等。

11. 流 (Streams)

功能介绍

Redis 5.0引入了流数据类型,用于处理消息队列和实时数据流。

用法

使用XADD添加消息到流,使用XRANGE读取消息,使用XREAD读取最新消息。

# 添加消息到流
XADD mystream * name Bob age 25

# 读取消息
XRANGE mystream - +
场景应用

实时日志收集、消息队列等。

12. RedisModules

功能介绍

Redis支持模块化扩展,可以通过加载Redis Modules来增加新的功能,如RediSearch、RedisGraph等。

用法

安装和加载模块,并使用模块提供的命令。

# 加载模块
loadmodule /path/to/module.so

# 使用模块命令
FT.CREATE myIndex ...
场景应用

需要扩展Redis功能的场景,如全文搜索、图数据库等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

渲染回调函数将音频传给音频单元

渲染回调函数将音频传给音频单元 渲染回调函数将音频传给音频单元了解音频单元渲染回调函数 渲染回调函数将音频传给音频单元 要将音频从磁盘或内存提供到音频单元输入总线&#xff0c;需使用符合 AURenderCallback 原型的渲染回调函数进行传输。当需要另一片样本帧时&#xf…

实现模型贴图的移动缩放旋转

技术&#xff1a;threejscanvasfabric 效果图&#xff1a; 原理&#xff1a;threejs中没有局部贴图的效果&#xff0c;只能通过map 的方式贴到模型上&#xff0c;所以说换一种方式来实现&#xff0c;通过canvasfabric来实现图片的移动缩放旋转&#xff0c;然后将整个画布以map…

【智能算法应用】麻雀搜索算法SSA优化Kmeans图像分割

目录 1.算法原理2.数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 2.数学模型 Kmeans是一种无监督的聚类算法,由于参数简洁,时间复杂度低已成功应用于图像分割,取得了良好的分割效果。但传统的 K 均值聚…

Go-知识测试-性能测试

Go-知识测试-性能测试 1. 定义2. 例子3. testing.common 测试基础数据4. testing.TB 接口5. 关键函数5.1 testing.runBenchmarks5.2 testing.B.runN5.3 testing.B.StartTimer5.4 testing.B.StopTimer5.5 testing.B.ResetTimer5.6 testing.B.Run5.7 testing.B.run15.8 testing.B…

无人机便携式侦测干扰设备(定全向)技术详解

无人机便携式侦测干扰设备&#xff08;定全向&#xff09;是一种专门针对无人机进行侦测和干扰的设备。它具备定向和全向两种工作模式&#xff0c;能够覆盖较宽的频率范围&#xff0c;有效侦测并干扰无人机与遥控器之间的通信信号&#xff0c;从而达到控制或驱离无人机的目的。…

1999-2022年企业持续绿色创新水平数据

企业持续绿色创新水平数据为研究者提供了评估企业在绿色技术领域创新持续性和能力的重要视角。以下是对企业持续绿色创新水平数据的介绍&#xff1a; 数据简介 定义&#xff1a;企业持续绿色创新水平反映了企业在一定时期内绿色专利申请的持续性和创新能力。计算方法&#xf…

收银系统源码-营销活动-积分商城

1. 功能描述 营运抽奖&#xff1a;智慧新零售收银系统&#xff0c;线上商城的营销插件&#xff0c;由商户运营&#xff0c;用户通过多种渠道可以获取积分&#xff0c;不仅支持在收银端抵用&#xff0c;还可以在积分商城内兑换优惠券或者真实商品&#xff0c;提升会员活跃度&am…

计算机图形学入门24:材质与外观

1.前言 想要得到一个漂亮准确的场景渲染效果&#xff0c;不只需要物理正确的全局照明算法&#xff0c;也要了解现实中各种物体的表面外观和在图形学中的模拟方式。而物体的外观和材质其实就是同一个意思&#xff0c;不同的材质在光照下就会表现出不同的外观&#xff0c;所以外观…

CH09_JS的循环控制语句

第9章&#xff1a;Javascript循环控制语句 本章目标 掌握break关键字的使用掌握continue关键字的使用 课程回顾 for循环的特点和语法while循环的特点和语法do-while循环的特点和语法三个循环的区别 讲解内容 1. break关键字 为什么要使用break关键字 生活中&#xff0c;描…

MongoDB集群搭建-最简单

目录 前言 一、分片概念 二、搭建集群的步骤 总结 前言 MongoDB分片&#xff08;Sharding&#xff09;是一种水平扩展数据库的方法&#xff0c;它允许将数据分散存储在多个服务器上&#xff0c;从而提高数据库的存储容量和处理能力。分片是MongoDB为了应对大数据量和高吞吐量需…

13 - Python网络编程入门

网络编程入门 计算机网络基础 计算机网络是独立自主的计算机互联而成的系统的总称&#xff0c;组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享。今天计算机网络中的设备和计算机网络的用户已经多得不可计数&#xff0c;而计算机网络也可以称得上是一个“复…

idea MarketPlace插件找不到

一、背景 好久没用idea了&#xff0c;打开项目后没有lombok&#xff0c;安装lombok插件时发现idea MarketPlace插件市场找不到&#xff0c;需要重新配置代理源&#xff0c;在外网访问时通过代理服务进行连接 二、操作 ### File-->setting 快捷键 Ctrl Alt S 远端源地…

uni-app 使用Pinia进行全局状态管理并持久化数据

1.引言 最近在学习移动端的开发&#xff0c;使用uni-app前端应用框架&#xff0c;通过学习B站的视频以及找了一个开发模板&#xff0c;终于是有了一些心得体会。 B站视频1&#xff1a;Day1-01-uni-app小兔鲜儿导学视频_哔哩哔哩_bilibili B站视频2&#xff1a;01-课程和uni的…

hdu物联网硬件实验1 小灯闪烁

物联网硬件基础实验报告 学院 班级 学号 姓名 日期 成绩 实验题目 配置环境小灯 实验目的 配置环境以及小灯闪烁 硬件原理 无 关键代码及注释 /* Blink The basic Energia example. Turns on an LED on for one second, then off for one sec…

01 Web基础与HTTP协议

1.1 Web 基础 本章将介绍 Web 基础知识&#xff0c;包括域名的概念、DNS 原理、静态网页和动态网页的相关知识。 1.1.1.域名概述 1.域名的概念 ip地址不易记忆 2.早期使用host文件解析域名 主机名重复主机维护困难 3.DNS 分布式层次式 4.域名空间结构 根域顶级域 组…

在原有的iconfont.css文件中加入新的字体图标

前言&#xff1a;在阿里图标库中&#xff0c;如果你没有这个字体图标的线上项目&#xff0c;那么你怎么在本地项目中的原始图标文件中添加新的图标呢&#xff1f; 背景&#xff1a;现有一个vue项目&#xff0c;下面是这个前端项目的字体图标文件。现在需要新开发功能页&#x…

使用POI实现Excel文件的读取(超详细)

目录 一 导入poi相关的maven坐标 二 实现创建并且写入文件 2.1实现步骤 2.2实现代码 2.3效果展示 ​编辑 2.4注意 三 实现从Excel文件中读取数据 3.1实现步骤 3.2实现代码 3.3结果展示 一 导入poi相关的maven坐标 <!-- Apache poi --><dependency><gro…

【JVM-04】线上CPU100%

【JVM-04】线上CPU100% 1. 如何排查2. 再举一个例子 1. 如何排查 ⼀般CPU100%疯狂GC&#xff0c;都是死循环的锅&#xff0c;那怎么排查呢&#xff1f;先进服务器&#xff0c;⽤top -c 命令找出当前进程的运⾏列表按⼀下 P 可以按照CPU使⽤率进⾏排序显示Java进程 PID 为 2609…

LeetCode题练习与总结:排序链表--148

一、题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&am…