【中间件】Redis

一、什么是Redis

  • Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理
  • 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型
  • 内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。

二、Redis优势

  1. 高性能:Redis以内存作为数据存储介质,因此读写速度非常快。它使用单线程模型,避免了多线程带来的上下文切换开销,进一步提高了性能。

  2. 数据结构丰富:Redis支持多种数据结构,如字符串、列表、哈希、集合、有序集合等,这使得开发人员可以更方便地存储和操作数据。

  3. 持久化支持:Redis可以将数据持久化到磁盘,以便在重启后恢复数据。它提供了两种持久化方式:RDB(Redis Database)和AOF(Append Only File),开发人员可以根据需求选择适合的方式。

  4. 高可用性:Redis支持主从复制、哨兵和集群等机制,以实现高可用性和数据的容错性。主从复制可以实现数据的读写分离,提高系统的并发处理能力;哨兵可以监控主节点的状态,并在主节点宕机时自动切换为新的主节点;集群则可以将数据分布在多个节点上,提供更高的吞吐量和可扩展性。

  5. 支持事务和Lua脚本:Redis支持事务,可以将多个命令打包成一个事务进行原子性的执行。此外,它还支持通过Lua脚本执行复杂的操作,进一步提高了开发的灵活性。

  6. 缓存功能:作为一种常见的缓存方案,Redis可以将热门数据存储在内存中,加快读写速度,并减轻后端数据库的压力。

  7. 分布式锁支持:Redis可以使用其原子性操作的特性实现分布式锁,解决并发场景下的资源竞争问题。

  8. 丰富特性:支持 publish/subscribe, 通知, key 过期等等特性。

三、Redis的5种基本数据类型

  1. String(字符串):最基本的数据类型,可以存储任意类型的数据,例如整数、浮点数、JSON字符串等。
    • 缓存数据:将经常访问的数据存储在Redis的String类型中,加速读取速度。
    • 计数器:使用INCR命令可以实现自增或自减操作,可以用于记录网站的访问量或用户的积分。

# 设置键为"key1"的值为"hello"
SET key1 "hello"
# 获取键为"key1"的值
GET key1
  1. Hash(哈希):类似于字典或关联数组,用于存储键值对的集合。可以对某个键的单个字段进行操作,也可以对整个哈希对象进行操作。
    • 用户信息存储:将用户的基本信息存储在一个Hash类型的键中,每个字段存储一个属性,方便查询和修改。
    • 商品信息存储:将商品的各个属性(名称、价格、库存等)存储在一个Hash类型的键中,方便获取商品详情。
# 设置键为"user"的哈希对象的字段和值
HSET user name "John"
HSET user age 25
# 获取键为"user"的哈希对象的字段值
HGET user name
HGET user age
  1. List(列表):有序的字符串列表,可以在列表的两端进行插入和删除操作。常用于实现队列、栈等数据结构。
    • 消息队列:将需要处理的任务或消息作为列表中的元素,通过LPUSH和RPOP等操作进行任务的发布和消费。
    • 历史记录:将用户的操作记录存储在列表中,可以通过向列表头部或尾部插入元素来记录最新的操作。
# 在列表的头部插入值
LPUSH fruits "apple"
LPUSH fruits "banana"# 获取列表中的所有值
LRANGE fruits 0 -1
  1. Set(集合):无序的字符串集合,不允许重复的元素。可以进行交集、并集、差集等集合操作。
    • 好友列表:将用户的好友关系存储在一个集合中,通过SADD和SREM等操作来添加或删除好友。
    • 唯一值存储:可以用集合存储唯一的标签、用户标识等,通过SADD命令来保证元素的唯一性。
# 添加元素到集合
SADD colors "red"
SADD colors "blue"# 获取集合中的所有元素
SMEMBERS colors
  1. Sorted Set(有序集合):类似于Set,但每个成员都关联着一个分数,用于进行排序。可以根据分数进行范围查询和按分数排序。
    • 排行榜:将用户的分数作为有序集合的分数,用户的ID作为成员,通过ZADD和ZREVRANGE命令来实现排名查询。
    • 任务调度:将需要按照优先级执行的任务存储在有序集合中,通过ZADD和ZRANGE命令来按优先级获取任务。
# 添加带有分数的元素到有序集合
ZADD scores 90 "Alice"
ZADD scores 85 "Bob"# 获取有序集合中分数最高的元素
ZREVRANGE scores 0 0

这些数据类型除了支持基本的操作(如读取、写入、删除),还提供了一系列丰富的操作方法,例如对字符串进行自增、对列表进行范围查询、对集合进行交集运算等。

除了这些基本数据类型,Redis还提供了其他高级数据结构,如位图(Bitmap)、布隆过滤器(Bloom Filter)、HyperLogLog等,用于解决特定的问题和优化性能。

四、Redis的持久化机制

数据在重启或异常情况下的可恢复性:RDB(Redis Database)和AOF(Append Only File)。

  1. RDB持久化:
    • RDB持久化通过将Redis内存中的数据快照(Snapshot)写入磁盘来进行持久化。RDB文件是一个二进制文件,包含了当前数据库的数据状态。
    • RDB持久化可以手动或自动触发,手动触发可以使用SAVE或BGSAVE命令,自动触发可以通过配置设置定期保存快照的时间。
    • RDB持久化的优点是快速、紧凑和经济,适合用于备份数据、离线分析等。
    • RDB持久化的缺点是在发生故障时会丢失最后一次快照之后的数据。
  2. AOF持久化:
    • AOF持久化通过将Redis的写命令追加到AOF文件的末尾来进行持久化。AOF文件是一个文本文件,记录了对Redis服务器进行写操作的命令。
    • AOF持久化可以以三种方式进行:关闭(关闭持久化),每秒同步(每秒同步一次AOF文件),文件追加(每条写命令追加到AOF文件)。
    • AOF持久化的优点是在故障恢复时有更好的数据完整性,可以通过AOF文件重放恢复所有写操作。
    • AOF持久化的缺点是相对于RDB持久化,AOF文件会更大,恢复时间更长。

可以根据业务需求选择合适的持久化机制,也可以同时使用两种机制来提供更好的数据保护。

AOF和RDB一起使用的好处:

  • AOF:每个写操作都以追加方式记录,可以实现较高的写性能 ,保证较高的数据安全性
  • RDB:保存数据的快照,恢复速度更快,适用于定期备份和灾难恢复

注:两种方式全部开启的话,Redis重启时会默认使用AOF的方式重新构建数据

AOF和RDB的优势对比:

*表示相对有优势的点

优势AOFRDB
数据安全性*增量持久化,每个写操作以追加方式记录,保证数据安全性快照备份,保存整个数据集,确保数据的完整性
写入性能相对较慢,因为需要将每个操作追加到AOF文件中*相对较快,因为只需要在特定间隔生成一次RDB文件
恢复速度相对较慢,需要执行AOF日志文件中的所有写操作恢复数据*相对较快,只需要加载RDB文件即可恢复数据
文件大小AOF文件通常会比RDB文件更大,因为记录每个写操作*RDB文件通常比AOF文件更小,因为只保存数据的快照
适用场景*适用于数据安全性要求较高的场景,如金融、电商等*适用于对性能和存储空间要求较高的场景,如游戏、社交媒体等
容灾备份*提供增量备份,记录数据修改操作,确保数据的完整性*提供快照备份,方便定期备份和灾难恢复
恢复点选择*可以选择恢复到任意的AOF文件位置,灵活度更高只能恢复到最近生成的RDB文件,不如AOF灵活
内存效率略低,因为需要记录每个写操作到AOF文件中*较高,因为RDB文件保存了数据的快照,不需要记录每个操作
使用复杂度相对较高,需要更多的配置和监控,如AOF重写,文件合并等*相对较低,只需定期生成RDB文件

五、Redis具体业务场景的使用示例

  1. 缓存:Redis最常见的使用场景是作为缓存层,将频繁读取的数据存储在Redis中,以减轻数据库的压力。
    例如,将热门商品、用户登录信息、验证码等缓存到Redis中,可以大幅提高访问速度和系统的扩展性。

  2. 会话管理:Redis可用于存储用户会话数据
    例如用户登录状态、购物车信息等。通过将会话数据存储在Redis中,可以实现分布式系统下多台服务器之间实时共享用户的登录状态和购物车数据。

  3. 分布式锁:Redis提供了原子性操作和高性能的特点,非常适合实现分布式锁。
    在分布式系统中,可以使用Redis的 SETNX 命令来实现分布式锁,以保证在多个进程或服务器之间互斥地访问共享资源。

  4. 计数器、排行榜:Redis的原子性操作和高性能特点使其成为实现计数器和排行榜的理想选择。
    例如,可以使用Redis的 INCRBY 命令来实现实时计数器,记录网站的访问量或用户的点赞数;使用有序集合来存储用户的积分信息,并根据积分进行排行。

  5. 消息队列:Redis的发布/订阅功能可以用于实现简单的消息队列。
    消息发布者将消息发布到指定的频道,而订阅者可以订阅感兴趣的频道并接收消息,从而实现简单的消息通信和任务分发。

  6. 实时更新:Redis的高性能和持久化功能使其非常适合处理实时更新的场景
    例如实时聊天、实时数据分析等。通过将实时数据存储在Redis中,并使用Redis的发布/订阅功能或数据持久化功能,可以实现实时更新和处理实时数据。

分布式锁,分布式缓存,lau脚本,数据类型详解等待后续补充

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

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

相关文章

六通道串口服务器

型号:SG-TCP232-620 1.1 功能 1.1.1 基本功能 串口服务器是串口 RS232/422/485 和以太网之间的一个转换器,实现串口数 据和以太网数据的双向透明传输,可以让串口设备立即联网,典型应用拓扑如下: 1.1.2 特色功能…

Ubuntu 18.04 中安装 RDKit(针对 Python 2.7)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

websocket前后端长连接之java部分

一共有4个类,第一个WebSocketConfig 配置类 Configuration EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer {Autowiredprivate WebSocketHandler webSocketHandler;Autowiredprivate WebSocketInterceptor webSocketInterceptor;Overridepubli…

PyCharm中Python项目打包并运行到服务器的简明指南

目录 一、准备工作 二、创建并设置Python项目 创建新项目 配置项目依赖 安装PyInstaller 三、打包项目 打包为可执行文件 另一种打包方式(使用setup.py) 四、配置服务器环境 五、上传可执行文件到服务器 六、在服务器上运行项目 配置SSH解释…

【UE5 C++课程系列笔记】05——组件和碰撞

效果 可以看到我们可以实现的功能是 (1)可以通过鼠标旋转视角 (2)通过使用Pawn移动组件来控制Pawn移动 (3)Pawn碰到物体会被阻挡然后逐渐滑动 (4)通过空格切换激活/关闭粒子效果…

格网法计算平面点云面积(matlab版本)

1、原理介绍 格网法计算平面点云面积,其思想类似高中油膜法计算面积。其将点云投影到水平面,再将点云划分成尺寸相同的格网。最后,统计格网内包含点的数量number,那么可利用如下公式计算得到点云的面积: Aeranumber*L…

ZooKeeper 基础知识总结

先赞后看,Java进阶一大半 ZooKeeper 官网这样介绍道:ZooKeeper 是一种集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。 各位hao,我是南哥,相信对你通关面试、拿下Offer有所帮助。 ⭐⭐⭐一份南哥编写…

2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

ATTCK红队评估实战靶场(二)

http://vulnstack.qiyuanxuetang.net/vuln/?page2 描述:红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习、视频教程、博客三位一体学习。本次红队环境主要Access Token利用、WMI利用、域漏洞利用SMB relay,EWS re…

如何启用本机GPU硬件加速猿大师播放器网页同时播放多路RTSP H.265 1080P高清摄像头RTSP视频流?

目前市面上主流播放RTSP视频流的方式是用服务器转码方案,这种方案的好处是兼容性更强,可以用于不同的平台,比如:Windows、Linux或者手机端,但是缺点也很明显:延迟高、播放高清或者同时播放多路视频视频容易…

rocylinux9.4安装prometheus监控

一.上传软件包 具体的软件包如下,其中kubernetes-mixin是下载的监控kubernetes的一些监控规则、dashbaordd等。 二.Prometheus配置 1.promethes软件安装 #解压上传后的软件包 [rootlocalhost ] cd /opt [rootlocalhost opt]# tar xf prometheus-2.35.3.linux-amd…

第五课 Unity资源导入工作流效率优化(AssetGraph工具)

上期我们学习了简单的animation动画的优化,接下来我们继续资源导入效率的优化 工程目录 首先我们来学习一下工程目录结构及用途 Asset文件夹:用来储存和重用的项目资产 Library文件夹:用来储存项目内部资产数据信息的目录 Packages文件夹…

Docker pull镜像拉取失败

因为一些原因,很多镜像仓库拉取镜像失败,所以需要更换不同的镜像,这是2024/11/25测试可用的仓库。 标题1、 更换镜像仓库的地址,编辑daemon.json文件 vi /etc/docker/daemon.json标题2、然后将下面的镜像源放进去或替换掉都可以…

天锐绿盾加密软件与Ping32联合打造企业级安全保护系统,确保敏感数据防泄密与加密管理

随着信息技术的飞速发展,企业在日常经营过程中产生和处理的大量敏感数据,面临着越来越复杂的安全威胁。尤其是在金融、医疗、法律等领域,数据泄漏不仅会造成企业巨大的经济损失,还可能破坏企业的信誉和客户信任。因此,…

人工智能-深度学习-Torch框架-手动构建回归流程

from sklearn.datasets import make_regression import math import random import torch from sklearn.datasets import make_regression: 导入make_regression函数,用于生成回归数据集。 import math: 导入math模块,用于进行数学计算,例如…

java全栈day10--后端Web基础(基础知识)之续集

一、Servlet执行流程 二、Http协议(相对Tomcat和servlet重要一点) 2.1Http-概叙 2.2Http-请求协议 2.2.3请求数据格式 2.2.3请求数据获取 先启动服务器 访问/hello Servlet 访问浏览器端Http协议数据 查看数据

web安全之信息收集

在信息收集中,最主要是就是收集服务器的配置信息和网站的敏感信息,其中包括域名及子域名信息,目标网站系统,CMS指纹,目标网站真实IP,开放端口等。换句话说,只要是与目标网站相关的信息,我们都应该去尽量搜集。 1.1收集域名信息 知道目标的域名之后,获取域名的注册信…

基于YOLOv8深度学习的智慧农业棉花采摘状态检测与语音提醒系统(PyQt5界面+数据集+训练代码)

智慧农业在现代农业中的应用日益广泛,其核心目标是通过智能化手段实现农业生产的自动化、精准化和高效化,而精准采摘技术作为智慧农业的重要组成部分,正受到越来越多的关注。棉花作为一种经济作物,其采摘过程传统上依赖于人工劳作…

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost) vcpkg的自动链接功能非常方便,但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例,程序中调用tinyxml2的函数后,若vcpkg中同时存在opencv和…

gitlab自动打包python项目

现在新版的gitlab可以不用自己配置runner什么的了 直接写.gitlab-ci.yml文件就行,这里给出一个简单的依靠setup把python项目打包成whl文件的方法 首先写.gitlab-ci.yml文件,放到项目根目录里 stages: # List of stages for jobs, and their or…