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

Redis 的标准使用规范之数据类型使用规范

数据类型使用规范


提示:以下是本篇文章正文内容,可供参考

(1)、字符文本(STRING)

【建议】选型为简易文本类缓存 :比如普通的字符、文本、Json
结构 ,通常能起到加速读写和降低后端压力的作用。
【建议】计数场景:用于对数值进行增减,同样适用于分布式系统
的增量和减量计算,如下:

incr/decr key // 自增 1
incrby/decrby key increment //增加指定数值

建议】共享 Session:在分布式系统中,用户的每次请求会访问
到不同的服务器,这就会导致 session 不同步的问题。

(2)列表(REDIS_LIST)

【建议】栈:由于列表存储的是有序字符串,满足队列的特点,也
就能满足栈先进后出的特点,使用 lpush+lpop 或者 rpush+rpop
实现栈。
【建议】有序的对象列表:列表的元素不但是有序的,而且还支持
按照索引范围获取元素。比如我们可以使用命令 lrange key 0 9
分页获取文章列表。

(3)哈希表(REDIS_HASH)

【建议】在客户端中使用 redis 提供的原生 ttl 过期策略。
如:redisson 中的 RedissonMapCache 中的 ttl 过期策略是
使用的 lua 脚本实现,在某些情况下使用会存在问题。
【建议】key、field、value 结构场景,如购物车:hset [key]
[field] [value] 命令, 可以实现以用户 Id,商品 Id 为 field,
商品数量为 value,恰好构成了购物车的 3 个要素。
【建议】对象存储场景:hash 类型的(key, field, value)的结构
与对象的(对象 id, 属性, 值)的结构相似,也可以用来存储对象。
说明:Redis 中的 Hash 和 Java 的 HashMap 更加相似,是数
组+链表的结构,当发生 hash 碰撞时将会把元素追加到链表上,
值得注意的是在 Redis 的 Hash 中 value 只能是字符串。

(4)集合(REDIS_SET)

说明:Redis 中的 Set 和 Java 中的 HashSet 类似,内部的
键值对是无序、唯一的。相当于一个特殊的字典,字典中所有的
value 默认都是一个 NULL 值。当集合中最后一个元素被移除之后,
数据结构被自动删除,内存被回收。
【建议】通用的 HashSet 集合使用场景,对于 Set 中的取值、判
断、统计,添加跟移出都有很便利的支持。
比如:社交领域的 好友、关注、粉丝、感兴趣的人等场景:
sinter 命令可以获得 A 和 B 两个用户的共同好友;
sismember 命令可以判断 A 是否是 B 的好友;
scard 命令可以获取好友数量;
关注时,smove 命令可以将 B 从 A 的粉丝集合转移到 A 的好
友集合。
【建议】Set 具备随机获取能力,建议在一些对集合值随机取数场
景使用。
类似首页展示随机:美团首页有很多推荐商家,但是并不能全
部展示,set 类型适合存放所有需要展示的内容,而 srandmember
命令则可以从中随机获取几个。
【建议】Set 具备 Single 能力,建议在一些对集合值需要去重的
场景中使用。
类似存储某活动中中奖的用户 ID,因为有去重功能,可以保
证同一个用户不会中奖两次。

(5)有序集合(REDIS_ZSET)

说明:zset 也叫 SortedSet,一方面保证了内部 value 的唯
一性,另方面它可以给每个 value 赋予一个 score,代表这个
value 的排序权重,所以又具备排序功能。
【建议】过期提醒、删除等场景,比如:存的时候将 score 设置成
当时的时间戳。再跑个定时任务来处理大于某个时间戳的成员,提
醒或者清除掉。
【建议】带排序条件的列表集合,比如排行榜场景,但是和 list
不同的是 zset 它能够实现动态的排序,例如: 可以用来存储粉
丝列表,value 值是粉丝的用户 ID,score 是关注时间,我们可
以对粉丝列表按关注时间进行排序。
另外如存储学生的成绩,value 值是学生的 ID, score 是他
的考试成绩。我们对成绩按分数进行排序就可以得到他的名次。

(6)Lua 脚本

【建议】不建议使用 Lua 脚本,如果特殊需求需要用到原子能力,
Lua 脚本应尽量简单,否则会影响性能。
【建议】使用有意义的变量名和函数名,遵循一致的命名约定。通
常, 变 量 名 和 函 数 名 使 用 小 写 字 母 和 下 划 线 , 如 local
my_variable。
【建议】尽量使用 local 变量来减少全局变量的使用,以避免意
外地修改全局变量;尽量避免使用全局变量,因为它们可能会导致
意外的副作用和错误。
【建议】为 Lua 脚本添加注释,以便其他人更容易理解脚本的功
能和实现;尽量使用统一代码格式化风格,如缩进、空格等,以提
高代码的可读性和可维护性。
【建议】在 Lua 脚本中使用 pcall 或 xpcall 函数来捕获和处
理错误,以确保脚本在出现错误时不会崩溃。
【建议】不要在代码里面动态修改 lua 脚本,那样每次请求都是
一个新的 Lua 脚本,消耗大量内存;所有的 Lua 脚本必须先在测
试环境测试完成才能上生产。
【建议】尽量避免在 Lua 脚本中使用循环,因为它们可能会导致
性能问题。如果必须使用循环,请确保循环次数尽可能少。
【建议】尽量避免在 Lua 脚本中使用递归,因为它们可能会导致
堆栈溢出和性能问题。

相关文章:

Redis 的标准使用规范之数据类型使用规范

数据类型使用规范 提示:以下是本篇文章正文内容,可供参考 (1)、字符文本(STRING) 【建议】选型为简易文本类缓存 :比如普通的字符、文本、Json 结构 ,通常能起到加速读写和降低后端压力的作用。 【建议】…...

人工智能技术导论——基于产生式规则的机器推理

在引出本章的内容之前先介绍一个概念 知识 知识的概念 知识(Knowledge)是人们在改造客观世界的实践中形成的对客观事物(包括自然的和人造的)及其规律的认识,包括对事物的现象、本质、状态、关系、联系和运动等的认识…...

Apache Guacamole 安装及配置VNC远程桌面控制

文章目录 官网简介支持多种协议无插件浏览器访问配置和管理应用场景 Podman 部署 Apache Guacamole拉取 docker 镜像docker-compose.yml部署 PostgreSQL生成 initdb.sql 脚本部署 guacamole Guacamole 基本用法配置 VNC 连接 Mac 电脑开启自带的 VNC 服务 官网 https://guacam…...

在Linux中从视频流截取图片帧(ffmpeg )

Linux依赖说明: 说明: 使用到的 依赖包 1. ffmpegsudo apt update sudo apt-get install ffmpeg2. imagemagick (选装) (检测图像边缘信息推断清晰度,如果是简单截取但个图像帧>用不到<)sudo apt-get install imagemagick备注: 指令及相关参数说明核心指令: (作用: 执…...

使用脚手架来创建 express 项目

使用脚手架&#xff08;scaffold&#xff09;可以快速搭建Express应用程序的基本结构。Express自身提供了一个官方脚手架工具叫做express-generator&#xff0c;它可以帮助你快速地生成一个包含基本文件结构的Express项目。 安装Express Generator 首先&#xff0c;你需要全局…...

单片机常用的软件架构

参考 9种单片机常用的软件架构...

服务器模型 Reactor 和 Proactor

Proactor 具体流程如下&#xff1a; 处理器发起异步操作&#xff0c;并关注 IO 完成事件&#xff1b;事件分离器等待操作完成事件&#xff1b;分离器等待过程中&#xff0c;内核并行执行实际的 IO 操作&#xff0c;并将结果存储入用户自定义的缓冲区&#xff0c;最后通知事件分…...

使用 Grype 检查 .jar 包中的漏洞

在开发和部署 Java 应用时&#xff0c;确保依赖库和项目文件中的安全性至关重要。Grype 是一款强大的开源工具&#xff0c;用于扫描项目文件&#xff08;如 .jar 包&#xff09;中的已知漏洞。本篇博客将介绍如何手动安装 Grype 并使用它检测 .jar 包中的安全漏洞。 一、手动安…...

IDEA 常用插件推荐,美观又实用!

1、 TONGYl Lingma - Your Al Coding Assistant. Type less, Code more. 通义灵码&#xff0c;是一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&…...

浮点数精度问题

为什么会产生精度问题&#xff1f; 我们带着这个问题去探寻浮点数二进制的存储原理 浮点数是怎么存在计算机中的&#xff1f; 浮点数在计算机中的表示通常遵循IEEE 754标准。其基本概念如下&#xff1a; 结构&#xff1a;浮点数由三部分组成&#xff1a; 符号位&#xff08;…...

RK3576芯片在智能家居里中型智慧屏产品的应用方案分析

智能家居在近年来得到了快速发展&#xff0c;AI技术不断发展&#xff0c;人机交互十分成熟&#xff0c;各种家电也都迎来了智能化浪潮&#xff0c;智能家居为人们提供了优秀的产品体验&#xff0c;受到主流消费者的青睐&#xff0c;智能家居里的中型智慧屏产品也随之兴起。 瑞芯…...

什么是生成式 AI?

人工智能 (AI) 通过使用机器学习与环境交互并执行任务来模仿人类行为&#xff0c;而无需明确指示要输出的内容。 生成式 AI 描述 AI 中用于创建原创内容的一类功能。 人员通常与聊天应用程序中内置的生成式 AI 交互。 此类应用程序的一个常见示例是 Microsoft Copilot&#xf…...

计算机网络期末试题及答案

一、选择题(每空2分&#xff0c;共20分) 1、下列关于常用交换技术的描述不正确的是&#xff08; &#xff09;。 A、电路交换是面向连接可靠的&#xff0c;适合大量的、连续的数据传输。 B、分组交换采用存储转发方式&#xff0c;以较小的固定长度的分组作为数据传输单…...

MySQL中DML操作(一)

添加数据&#xff08;INSERT&#xff09; 1.选择插入 INSERT INTO 表名(列名1 , 列名2 , 列名3......) VALUES(值1 , 值2 , 值3......); 示例&#xff1a; 向departments表中添加一条数据&#xff0c;部门名称为market&#xff0c;工作地点ID为1。 insert into department…...

Django 模板继承

Django 模板继承的语法主要涉及两个关键标签&#xff1a;{% extends %} 和 {% block %}。 语法详解 {% extends %}&#xff1a; 用于指定当前模板继承自哪个父模板。语法&#xff1a;{% extends "父模板的路径" %} {% extends "base.html" %}{% block %}&…...

黑马点评17——多级缓存-Lua语法

文章目录 Lua语法初始Lua变量和循环条件控制、函数 变量和循环函数和条件控制 Lua语法 初始Lua https://www.lua.org/ 魔兽的一些插件就是用lua开发的。 centOs已经装好了lua&#xff0c;直接用~ 变量和循环 条件控制、函数 变量和循环 函数和条件控制...

如何在Linux 上运行 SciChart WPF图表控件?

SciChart – 一个跨平台图表库&#xff0c;可实现 Windows Presentation Foundation (WPF)、JavaScript 以及原生 iOS (Swift/Objective-C) 和 Android (Java/Kotlin)&#xff0c;基于代号为 Visual Xccelerator 的专有 C 渲染引擎。这提供了 SciChart 众所周知的速度和性能&am…...

C--字符串函数处理总结

文章目录 函数接口strchrstrtok 常见应用int 转化 字符串1 2 3 4 (int ) ---> 1&#xff0c;2&#xff0c;3&#xff0c;4 &#xff08;char []&#xff09; 字符串转化为 int1,2,3,4&#xff08;char []&#xff09; ---> 1 2 3 4 (int ) 函数接口 strchr char *strch…...

PLSQL-将一份excel数据导入到一张物理表(Oracle)

–>> 很简单~ 平时用惯了DBeaver&#xff0c;突然要用PLSQL Developer&#xff0c;确实很生疏。 –>> 我的场景&#xff0c;将一份.csv文件数据手动导入到Oracle下的一张物理表中去。 研究了半天&#xff0c;看网上说的可以用&#xff1a;Tools → ODBC Importer &…...

【系统架构设计师】状态模式

状态模式(State Pattern)是行为设计模式的一种,它允许一个对象在其内部状态改变时改变它的行为。对象看起来像是改变了它的类。这种模式可以用于实现一些复杂的有限状态机,在不同的条件下改变对象的行为而无需修改对象本身。下面是一个关于状态模式的详细介绍,包括其概念、…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...