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 项目
使用脚手架(scaffold)可以快速搭建Express应用程序的基本结构。Express自身提供了一个官方脚手架工具叫做express-generator,它可以帮助你快速地生成一个包含基本文件结构的Express项目。 安装Express Generator 首先,你需要全局…...
单片机常用的软件架构
参考 9种单片机常用的软件架构...

服务器模型 Reactor 和 Proactor
Proactor 具体流程如下: 处理器发起异步操作,并关注 IO 完成事件;事件分离器等待操作完成事件;分离器等待过程中,内核并行执行实际的 IO 操作,并将结果存储入用户自定义的缓冲区,最后通知事件分…...
使用 Grype 检查 .jar 包中的漏洞
在开发和部署 Java 应用时,确保依赖库和项目文件中的安全性至关重要。Grype 是一款强大的开源工具,用于扫描项目文件(如 .jar 包)中的已知漏洞。本篇博客将介绍如何手动安装 Grype 并使用它检测 .jar 包中的安全漏洞。 一、手动安…...

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

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

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

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

计算机网络期末试题及答案
一、选择题(每空2分,共20分) 1、下列关于常用交换技术的描述不正确的是( )。 A、电路交换是面向连接可靠的,适合大量的、连续的数据传输。 B、分组交换采用存储转发方式,以较小的固定长度的分组作为数据传输单…...

MySQL中DML操作(一)
添加数据(INSERT) 1.选择插入 INSERT INTO 表名(列名1 , 列名2 , 列名3......) VALUES(值1 , 值2 , 值3......); 示例: 向departments表中添加一条数据,部门名称为market,工作地点ID为1。 insert into department…...
Django 模板继承
Django 模板继承的语法主要涉及两个关键标签:{% extends %} 和 {% block %}。 语法详解 {% extends %}: 用于指定当前模板继承自哪个父模板。语法:{% extends "父模板的路径" %} {% extends "base.html" %}{% block %}&…...

黑马点评17——多级缓存-Lua语法
文章目录 Lua语法初始Lua变量和循环条件控制、函数 变量和循环函数和条件控制 Lua语法 初始Lua https://www.lua.org/ 魔兽的一些插件就是用lua开发的。 centOs已经装好了lua,直接用~ 变量和循环 条件控制、函数 变量和循环 函数和条件控制...

如何在Linux 上运行 SciChart WPF图表控件?
SciChart – 一个跨平台图表库,可实现 Windows Presentation Foundation (WPF)、JavaScript 以及原生 iOS (Swift/Objective-C) 和 Android (Java/Kotlin),基于代号为 Visual Xccelerator 的专有 C 渲染引擎。这提供了 SciChart 众所周知的速度和性能&am…...
C--字符串函数处理总结
文章目录 函数接口strchrstrtok 常见应用int 转化 字符串1 2 3 4 (int ) ---> 1,2,3,4 (char []) 字符串转化为 int1,2,3,4(char []) ---> 1 2 3 4 (int ) 函数接口 strchr char *strch…...

PLSQL-将一份excel数据导入到一张物理表(Oracle)
–>> 很简单~ 平时用惯了DBeaver,突然要用PLSQL Developer,确实很生疏。 –>> 我的场景,将一份.csv文件数据手动导入到Oracle下的一张物理表中去。 研究了半天,看网上说的可以用:Tools → ODBC Importer &…...
【系统架构设计师】状态模式
状态模式(State Pattern)是行为设计模式的一种,它允许一个对象在其内部状态改变时改变它的行为。对象看起来像是改变了它的类。这种模式可以用于实现一些复杂的有限状态机,在不同的条件下改变对象的行为而无需修改对象本身。下面是一个关于状态模式的详细介绍,包括其概念、…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

Appium下载安装配置保姆教程(图文详解)
目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...

从0开始学习R语言--Day17--Cox回归
Cox回归 在用医疗数据作分析时,最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据,往往会有很多的协变量,即使我们通过计算来减少指标对结果的影响,我们的数据中依然会有很多的协变量,且…...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地
NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配,成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景,通过标准化 SQL 工作台与细粒度权限管控两大能力,助力企业安全高效…...

【JavaEE】万字详解HTTP协议
HTTP是什么?-----互联网的“快递小哥” 想象我们正在网上购物:打开淘宝APP,搜索“蓝牙耳机”,点击商品图片,然后下单付款。这一系列操作背后,其实有一个看不见的“快递小哥”在帮我们传递信息,…...

智能照明系统:具备认知能力的“光神经网络”
智能照明系统是物联网技术与传统照明深度融合的产物,其本质是通过感知环境、解析需求、自主决策的闭环控制,重构光与人、空间、环境的关系。这一系统由智能光源、多维传感器、边缘计算单元及云端管理平台构成,形成具备认知能力的“光神经网络…...

2025年上海市“星光计划”第十一届职业院校技能大赛 网络安全赛项技能操作模块样题
2025年上海市“星光计划”第十一届职业院校技能大赛 网络安全赛项技能操作模块样题 (二)模块 A:安全事件响应、网络安全数据取证、应用安全、系统安全任务一:漏洞扫描与利用:任务二:Windows 操作系统渗透测试 :任务三&…...

leetcode.多数元素
169. 多数元素 - 力扣(LeetCode) import java.util.HashMap;public class LeetCode169 {public int majorityElement(int[] nums) {int count nums.length;int res count/2;Scanner scanner new Scanner(System.in);HashMap<Integer,Integer> …...