缓存 --- Redis基本数据类型

缓存 --- Redis基本数据类型

  • Redis Intro
  • 5种基础数据类型

Redis Intro

  • RedisRemote Dictionary Server)是一款开源的高性能键值存储系统,常用于缓存、消息中间件和实时数据处理场景。以下是其核心特点、数据类型及典型使用场景:

核心特点

特性说明
基于内存数据存储在内存中,读写速度极快(微秒级响应)。
持久化支持支持 RDB(快照)和 AOF(日志)两种持久化方式,保障数据安全。
数据结构丰富提供字符串、哈希、列表、集合等 8 种数据结构
高可用与分布式支持主从复制、哨兵模式(Sentinel)和集群模式(Cluster),实现容灾和水平扩展。
原子操作所有操作是原子的,支持事务和 Lua 脚本。
发布订阅提供 Pub/Sub 模式,支持简单的消息队列功能。

5种基础数据类型

String

  • String 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value;
  • String 类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象;
  • String 类型是 Redis 最基本的数据类型,String 类型的值最大能存储 512MB;
    在这里插入图片描述
序号语法描述
1SET key value设置指定 key 的值
2GET key获取指定 key 的值
3GETRANGE key start end返回 key 中字符串值的子字符,end=-1 时表示全部
4SETBIT key offset value对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
5MSET key value [key value ...]同时设置一个或多个 key-value 对
6MGET key1 [key2..]获取所有(一个或多个)给定 key 的值
7GETSET key value将给定 key 的值设为 value ,并返回 key 的旧值(old value)
8SETNX key value只有在 key 不存在时设置 key 的值
9STRLEN key返回 key 所储存的字符串值的长度
10MSETNX key value [key value ...]同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
11INCR key将 key 中储存的数字值增一
12DECR key将 key 中储存的数字值减一
13INCRBY key increment将 key 所储存的值加上给定的增量值
14DECRBY key decrement将 key 所储存的值减少给定的增量值
15APPEND key value如果 key 已经存在并且是一个字符串,APPEND 命令将指定的 value 追加到该 key 原来值 value 的末尾
127.0.0.1:6379> set k1 tom
OK
127.0.0.1:6379> get k1
"tom"
127.0.0.1:6379> set k1 harry
OK
127.0.0.1:6379> get k1
"harry"
127.0.0.1:6379> set k2 5
OK
127.0.0.1:6379> INCR k2
(integer) 6
127.0.0.1:6379> get k2
"6"
127.0.0.1:6379> INCRBY k2 101
(integer) 107
127.0.0.1:6379> get k1
"harry"
127.0.0.1:6379> APPEND k1 Potter
(integer) 11
127.0.0.1:6379> get k1
"harryPotter"

List

  • Redis列表是简单的字符串列表,按照插入顺序排序。
  • 你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
    在这里插入图片描述
序号命令语法描述
1LPUSH key value1 [value2]将一个或多个值插入到列表头部,压子弹
2LPOP key移出并获取列表的第一个元素,发射子弹
3LRANGE key start stop获取列表指定范围内的元素
4LPUSHX key value将一个值插入到已存在的列表头部
5LLEN key获取列表长度
6`LINSERT key BEFOREAFTER pivot value`
7LINDEX key index通过索引获取列表中的元素
8LREM key count value移除列表元素
9LSET key index value通过索引设置列表元素的值
127.0.0.1:6379> LPUSH names zhangsan lisi wangwu
(integer) 3
127.0.0.1:6379> LLEN names
(integer) 3
127.0.0.1:6379> LRANGE names 0 2
1) "wangwu"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379> LPUSHX names louis
(integer) 4
127.0.0.1:6379> LRANGE names 0 2
1) "louis"
2) "wangwu"
3) "lisi"

SET

  • Redis 的 Set 是 String 类型的无序(号)集合。集合中成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
    在这里插入图片描述
序号命令语法描述
1SADD key member1 [member2]向集合添加一个或多个成员
2SMEMBERS key返回集合中的所有成员
3SCARD key获取集合的成员数
4SRANDMEMBER key [count]返回集合中一个或多个随机数
5SISMEMBER key member判断 member 元素是否是集合 key 的成员
6SREM key member1 [member2]移除集合中一个或多个成员
7SDIFF key1 [key2]返回给定所有集合的差集
8SINTER key1 [key2]返回给定所有集合的交集
9SUNION key1 [key2]返回所有给定集合的并集
10SPOP key移除并返回集合中的一个随机元素
11SSCAN key cursor迭代集合中的元素
127.0.0.1:6379> SADD course redis
(integer) 1
127.0.0.1:6379> SADD course mysql
(integer) 1
127.0.0.1:6379> SADD course redis
(integer) 0
127.0.0.1:6379> SADD course mongodb
(integer) 1
127.0.0.1:6379> SMEMBERS course
1) "mongodb"
2) "mysql"
3) "redis"
127.0.0.1:6379> SRANDMEMBER course
"mongodb"
127.0.0.1:6379> SRANDMEMBER course
"redis"
127.0.0.1:6379> SRANDMEMBER course
"mysql"
127.0.0.1:6379> SRANDMEMBER course
"mongodb"
127.0.0.1:6379> SRANDMEMBER course
"mysql"
127.0.0.1:6379> SMEMBERS course
1) "mongodb"
2) "mysql"
3) "redis"

ZSET

  • Redis 有序集合和集合一样也是string类型元素的集合且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数
  • redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
    在这里插入图片描述
序号命令语法描述
1ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员,或者更新已存在成员的分数
2ZCARD key获取有序集合的成员数
3ZCOUNT key min max计算在有序集合中指定区间分数的成员数
4ZRANK key member返回有序集合中指定成员的索引
5ZSCORE key member返回有序集中,成员的分数值
6ZREM key member [member ...]移除有序集合中的一个或多个成员
127.0.0.1:6379> ZADD leaderboard 100 "Alice"
(integer) 1
127.0.0.1:6379> ZADD leaderboard 200 "Bob"
(integer) 1
127.0.0.1:6379> ZADD leaderboard 150 "Charlie"
(integer) 1
127.0.0.1:6379> ZADD leaderboard 100 "Alice"
(integer) 0
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES
1) "Alice"
2) "100"
3) "Charlie"
4) "150"
5) "Bob"
6) "200"
127.0.0.1:6379> ZRANK leaderboard "Charlie"
(integer) 1
127.0.0.1:6379> ZREVRANK leaderboard "Charlie"
(integer) 1
127.0.0.1:6379> ZSCORE leaderboard "Bob"
"200"
127.0.0.1:6379> ZINCRBY leaderboard 50 "Alice"
"150"
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES
1) "Charlie"
2) "150"
3) "Alice"
4) "150"
5) "Bob"
6) "200"
127.0.0.1:6379> ZCOUNT leaderboard 100 200
(integer) 3
127.0.0.1:6379> ZREM leaderboard "Charlie"
(integer) 1
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES
1) "Alice"
2) "150"
3) "Bob"
4) "200"操作说明:
1. ZADD:向 ZSET 中添加成员及其分数。
2. RANGE:按分数从小到大返回 ZSET 中的成员及其分数。
3. ZRANK:返回成员在 ZSET 中的排名(从小到大)。
4. REVRANK:返回成员在 ZSET 中的排名(从大到小)。
5. ZSCORE:返回指定成员的分数。
6. ZINCRBY:增加指定成员的分数。
7. ZCOUNT:返回分数在指定范围内的成员数量。
8. ZREM:移除 ZSET 中的指定成员。

HASH

  • Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
    在这里插入图片描述
序号命令语法描述
1HSET key field value将哈希表 key 中的字段 field 的值设为 value
2HGET key field获取存储在哈希表中指定字段的值
3HGETALL key获取在哈希表中指定 key 的所有字段和值
4HEXISTS key field查看哈希表 key 中,指定的字段是否存在
5HKEYS key获取所有哈希表中的字段
6HVALS key获取哈希表中所有值
7HLEN key获取哈希表中字段的数量
8HMGET key field1 [field2]获取所有给定字段的值
9HMSET key field1 value1 [field2 value2]同时将多个 field-value (域-值)对设置到哈希表 key 中
127.0.0.1:6379> HMSET hpe name zhangsan age 18 gender men birth 2000-01-01
OK
127.0.0.1:6379> HKEYS hpe
1) "name"
2) "age"
3) "gender"
4) "birth"
127.0.0.1:6379> HvalS hpe
1) "zhangsan"
2) "18"
3) "men"
4) "2000-01-01"
127.0.0.1:6379> HGETALL hpe
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "gender"
6) "men"
7) "birth"
8) "2000-01-01"

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

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

相关文章

Redis命令——list

列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素(element),⼀个列表最多可以存储个元素 在 Redis 中,可以对列表两端插入(push)和弹出(pop),…

Android Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?

🌱《Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?》 在 Jetpack Compose 的世界里,UI 是响应式的。这意味着当状态发生变化时,UI 会自动重组&#xff0…

使用 PCL 和 Qt 实现点云可视化与交互

下面我将介绍如何结合点云库(PCL)和Qt框架(特别是QML)来实现点云的可视化与交互功能&#xff0c;包括高亮选择等效果。 1. 基本架构设计 首先需要建立一个结合PCL和Qt的基本架构&#xff1a; // PCLQtViewer.h #pragma once#include <QObject> #include <pcl/point…

mybatis plus打印sql日志到指定目录

1、mybatis plus打印sql日志 参考文档&#xff1a;mybatis plus打印sql日志_mybatisplus日志打印-CSDN博客 2、修改 修改InfoLevelLogger Override public void debug(String s) {// 修改这里logger.info(s);log.debug(s); } 增加&#xff1a;log.debug(s); 修改logback.x…

vue3 watch和watchEffect 的用法和区别

在 Vue 3 里&#xff0c;watch 和 watchEffect 都是用于响应式数据变化的 API&#xff0c;但它们在使用方法和应用场景上存在差异。下面详细介绍它们的用法和区别。 用法 watch watch 用于监听特定的响应式数据源&#xff0c;当数据源发生变化时&#xff0c;会执行相应的回调…

Qt中修改了UI设计文件后编译不生效问题的解决办法

复制工程过来后&#xff1a; 1、删除build文件 2、删除.user文件&#xff0c;恢复为文件最初的那样 3、执行make distclean,删除所有由先前构建过程生成的文件 4、再次打开工程&#xff0c;修改ui文件编译生效&#xff01;

EtherCAT转ProfiNet边缘计算网关配置优化:汽车制造场景下PLC与机器人协同作业案例

1.行业背景与需求分析 智能汽车焊装车间是汽车制造的核心工艺环节&#xff0c;某德国豪华品牌在其上海MEB工厂新建的焊装车间中&#xff0c;采用西门子S7-1500PLC作为ProfiNet主站&#xff0c;负责整线协调与质量追溯&#xff1b;同时部署KUKAKR1500Titan机器人&#xff08;Eth…

day46—双指针-两数之和-输入有序数组(LeetCode-167)

题目描述 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 &l…

线性代数 | 知识点整理 Ref 1

注&#xff1a;本文为 “线性代数 | 知识点整理” 相关文章合辑。 因 csdn 篇幅合并超限分篇连载&#xff0c;本篇为 Ref 1。 略作重排&#xff0c;未整理去重。 图片清晰度限于引文原状。 如有内容异常&#xff0c;请看原文。 线性代数知识汇总 Arrow 于 2016-11-27 16:27:5…

比特币的跨输入签名聚合(Cross-Input Signature Aggregation,CISA)

1. 引言 2024 年&#xff0c;人权基金会&#xff08;Human Rights Foundation&#xff0c;简称 HRF&#xff09;启动了一项研究奖学金计划&#xff0c;旨在探讨“跨输入签名聚合”&#xff08;Cross-Input Signature Aggregation&#xff0c;简称 CISA&#xff09;的潜在影响。…

3.基础开发工具

1.软件包管理器 1.1什么是软件包 • 在Linux下安装软件, ⼀个通常的办法是下载到程序的源代码, 并进⾏编译, 得到可执⾏程序. • 但是这样太⿇烦了, 于是有些⼈把⼀些常⽤的软件提前编译好, 做成软件包(可以理解成windows上 的安装程序)放在⼀个服务器上, 通过包管理器可以很…

Golang errors 包快速上手

文章目录 1.变量2.类型3.函数3.1 New3.2 Is简介函数签名核心功能示例代码使用场景注意事项小结 3.3 As简介函数签名核心功能示例代码使用场景注意事项小结 3.4 Unwrap简介函数签名核心功能使用示例使用场景注意事项小结 3.5 Join简介函数签名核心功能使用场景注意事项小结 4.小…

Java File 类详解

Java File 类详解 File 类是 Java 中用于表示文件和目录路径名的抽象类&#xff0c;位于 java.io 包中。它提供了丰富的 API&#xff0c;用于操作文件系统&#xff0c;包括创建、删除、重命名、查询文件属性等功能。 1. File 类核心知识点 &#xff08;1&#xff09;构造方法…

基于javaweb的SpringBoot儿童爱心管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

Unity Nav Mesh导航系统的简单使用

标题 1.下载。2.面板位置3.object面板4.Area面板5.Bake面板6.Agent面板7.Nav Mesh Agent组件8.Nav Mesh Obstacle组件9.简单使用 1.下载。 unity2022以上版本要去packageManager中下载。 2.面板位置 3.object面板 Navigation Static&#xff1a;设置该物体是否被列入静态寻路…

FairyGUI图标文字合批失败的原因

1&#xff09;FairyGUI图标文字合批失败的原因 2&#xff09;为什么Cubemap的内存占用超高 3&#xff09;如何找到网格某个切面的中心点 4&#xff09;为什么SafeZone在倒屏后方向相反 这是第428篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了…

[BUG]Cursor C++扩展不支持

本文内容组织形式 问题描述失效原因解决方案使用野版C Extension 猜你喜欢结语 问题描述 日期&#xff1a;20250419 操作系统&#xff1a; mac C代码没有办法进行跳转&#xff0c;并且和以前的文本标亮也不同 并且还有如下问题弹窗 C/C 扩展只能与 Microsoft Visual Studio…

深⼊理解 JVM 执⾏引擎

深⼊理解 JVM 执⾏引擎 其中前端编译是在 JVM 虚拟机之外执⾏&#xff0c;所以与 JVM 虚拟机没有太⼤的关系。任何编程语⾔&#xff0c;只要能够编译出 满⾜ JVM 规范的 Class ⽂件&#xff0c;就可以提交到 JVM 虚拟机执⾏。⾄于编译的过程&#xff0c;如果你不是想要专⻔去研…

Ubuntu 部署 DeepSeek

在 Ubuntu 系统上部署 DeepSeek 模型&#xff0c;能让用户利用其强大的人工智能能力&#xff0c;同时保障数据的安全性与操作的自主性。不过&#xff0c;这一过程涉及诸多技术细节&#xff0c;需要谨慎操作。以下将为你详细介绍在 Ubuntu 系统部署 DeepSeek 的操作步骤及注意事…

通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等

通义灵码新上的外挂 Project Rules 获得了开发者的一致好评&#xff1a;最小成本适配我的开发风格、相当把团队经验沉淀下来&#xff0c;是个很好功能…… 那么有哪些现成的 Rules 可以抄作业呢&#xff0c;今天我们官方输出了 Java、TypeScript、Python、Go、JavaScript 等语…