redis常用五种数据类型的常用指令

本文为初识redis记录的基本知识,如有不正确之处还请指出

一、redis五种类型简介
string:存储结构为简单动态字符串(SDS)
hash:存储结构可以是哈希表(O(1))、压缩列表(O(N))
list:存储结构可以是双向链表(O(N))、压缩列表(O(N))
set:存储结构可以是哈希表(O(1))、整数数组(O(N))
zset:存储结构可以是压缩列表(O(N))、跳表(O(logN))

数组:根据序号随机查找很快,但是插入和删除很慢,需要挪动很多元素
链表:插入和删除很快,只需要修改相邻元素指针,但是查找很慢,需要从第一个元素逐个遍历查找
有序数组支持折半查找(插入、删除很慢哦),链表不支持折半查找
跳表:在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。

二、不同数据类型的常用操作

1、字符串常用操作

最简单的键值对存储类型,常用于缓存单一值(eg:数字、字符串)

序号语法含义示例备注
1SET key value存入字符串键值对
2MSET key value [key value…]批量存储字符串键值对
3SETNX key value存入一个不存在的字符串键值对
4GET key获取一个字符串键值
5MGET key [key …]批量获取字符串键值
6DEL key [key …]删除一个键
7EXPIRE key seconds设置一个键的过期时间(秒)
8INCR key将key中存储的数字值+1
9DECR key将key中存储的数字值减1
10INCR key increment将key中存储的数字值加上increment
11DECR key decrement将key中存储的数字值减decrement

应用场景:
计数器:
INCR article:readcount:{1001} //将1001号文章阅读次数进行+1操作
GET article:readcount:{1001} //返回1001号文章阅读量

在分布式系统中容易漏+1的情况,可通过批量生成序列号提升性能:
INCRBY orderId 100 //批量获取100个序列号

2、hash结构

键值对集合,适合存储对象类型数据(eg:用户信息、商品信息)

序号语法含义示例备注
1HSET key field value存储一个哈希表key的键值
2HSETNX key field value存储一个不存在的哈希表key的键值
3HMSET key field value [field value …]在一个哈希表key中存储多个键值对
4HGET key field获取哈希表key对应的field键值
5HMGET key field [field…]批量获取哈希表key中多个field键值
6HDEL key field [field…]删除哈希表key中的field键值
7HLEN key返回哈希表key中field的数量
8HGETALL返回哈希表key中所有的键值
9HINCRBY key field increment为哈希表key中field键的值加上增量increment

应用场景:对象缓存(电商购物车)
HMSET user {userId}:name yz. {userId}:age 18
HMSET user {userId}:name {userId}:age
eg:购物车
以用户id为key,以商品id为fiels,以商品数量为value
购物车操作:

主要操作语句
添加商品hset cart:8304 9999 1
增加数量hincrby cart:8304 9999 1
商品总数hlen cart:8304
删除商品hdel cart:8304 9999
获取购物车所有商品hgetall cart:8304

3、list结构

是一个按照插入顺序排序的字符串元素集合(有序列表),集合中的元素可以重复,支持从头部或尾部插入/删除元素,可实现队列、栈等数据结构,适合消息队列等场景
常用操作

序号语法含义示例备注
1LPUSH key value[walue …]将一个或多个value插入到key列表的表头(最左边)
2RPUSH key value[walue …]将一个或多个value插入到key列表的表头(最右边)
3LPOP key移除并返回key列表的头元素
4RPOP key移除并返回key列表的尾元素
5LRANGE key start stop返回列表key中指定区间的元素,区间以偏移量start和stop指定
6BLPOP key [key …] timeout从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0则一直阻塞等待
7BRPOP key[key …] timeout从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0则一直阻塞等待

应用场景:常用分布式数据结构
栈(后进先出):stack=LPUSH+LPOP
队列(先进先出):queue = LPUSH+RPOP
阻塞队列:Blocking MQ = LPUSH+BRPOP

》微信公众号消息流
YZ关注了“XX本地宝”、“海底捞火锅”等
XX本地宝发送消息,消息ID为0909
LPUSH msg:{YZ-id} 0909
海底捞发送消息,消息id:0808
LPUSH msg:{YZ-id} 0808
YZ查看前五条消息
LRANGE msg:{YZ-id} 0 4

4、set-无序集合

一个无序、唯一的字符串集合,不允许重复的成员。可以对集合执行添加、删除和判断成员是否存在等操作,也支持集合之间的交集、并集、差集运算,适合用户标签等场景

常用操作

序号语法含义示例备注
1SADD key member [member…]往集合key中存入元素,元素存在择忽略,若key不存在则新建
2SREM key member [menber…]从集合key中删除元素
3SMEMBERS key获取集合key中所有元素
4SCARD key获取集合key的元素个数
5SISMEMBER key member判断member元素是否存在于集合key中
6SRANDMEMBER key [count]从集合key中选出count哥元素,元素不从key中删除
7SPOP key [count]从集合key中选出count哥元素,元素从key中删除
8SINTER key [key…]交集SINTER set1 set2 set3
9SINTERSTORE destination key [key…]将交集结果存入新集合destination中
10SUNION key [key…]并集运算SUNION set1 set2 set3
11SUNIONSTORE destination key [key…]将并集结果存入新集合destination中
12SDIFF key [key…]差集运算
13SDIFFSTORE destination key [key…]将差集结果存入新集合destination中

应用场景
》抽奖小程序
1、添加到抽奖池中:-》SADD key {userid}
2、查看参与抽奖的所有用户->SMEMBERS key
3、抽取n名获奖者
不带删除用户的抽奖:SRANDMEMBER key [n]
带删除的用户抽奖:SPOP key [n]

》朋友圈点赞
点赞-〉SADD like: {消息id} {用户id}
取消点赞-》SREM like:{消息id} {用户id}
获取点赞的用户列表-〉SMEMBERS like:{消息id}
获取点赞用户数-》SCARD like:{消息id}
检查用户是否点过赞-〉SISMEMBER like:{消息id} {用户id}

》集合的运算可实现微信关注模型
邢一关注的集合:Xingset1 ={“邢三”,“李四”}
邢二关注的集合:Xingset2 ={“邢一”,“邢三”,“李四”,“王五”}
邢三关注的集合:Xingset3 ={“邢一”,“邢二”,“李四”,“王五”,“赵六”}
李四关注的集合:Liset4 ={“邢一”,“李四”,“王五”,“赵六”}

邢一和邢二共同关注的人:
SINTER Xingset1 Xingset2 结果:{“邢三”,“李四”}

邢一关注的人是否关注了邢二:
SISMEMBER Xingset3 “邢二”
SISMEMBER Liset4 “邢二”

邢一和邢二是兄弟,邢一可能认识的人:
SDIFF Xingset2 Xingset1 结果:{“邢一”,“王五”}

》集合在筛选中经常遇到多种组合筛选:
eg:火车票查询时:可添加 时段、选择车次类型(只看高铁/动车、只看普通车)、选择查看是否有票等等,这种场景均可使用set取交集来实现- SINTER
eg:购物:选择商品时也是如此
在这里插入图片描述

5、Zset(Sorted Set)-有序集合

Zset是一个有序的字符串集合,每个成员都关联着一个分数。集合中的成员根据分数大小进行排序,可以进行范围查询和按分数排名操作,常用于排行榜、优先队列等场景
常用操作

序号语法含义示例备注
1ZADD key score member [[score member]…]往有序集合key中,加入带分值元素
2ZREM key member [member…]从有序集合key中删除元素
3ZSCORE key member返回有序集合key中元素member的分值
4ZINCRBY key increment member为有序集合key中元素member的分值加上increment
5ZCARD key返回有序集合key中元素个数
6ZRANGE key start stop [WITHSCORES]正序获取有序集合key从start下标到stop下标的元素
7ZREVRANGE key start stop [WITHSCORES]倒序货物有序集合key从start下标到stop下标的元素
8ZUNIONSTORE destkey numkeys key [key …]并集计算
9ZINTERSTORE destkey numkeys key [key …]交集计算

除了这些主要的数据类型,Redis还提供了一些特殊的数据结构和功能,如HyperLogLog用于基数统计,Geo用于地理位置信息存储,Pub/Sub用于发布和订阅等。通过这些不通的数据类型,Redis可以灵活的存储和操作各种类型的数据,满足不同应用场景下的需求。

三、说明
数据结构是自动进行转化的,zset为例进行说明
Redis中的zset(sorted set)数据结构在元素数量较少且每个元素值较短时使用ziplist作为底层实现,当这个条件不满足时会转换为skiplist作为新的底层实现。
ziplist是一种紧凑的连续内存存储结构,适合存储小数据。而skiplist是一种复杂的多层次的链表结构,适合大数据的随机访问和插入。

转换条件:
当zset中的元素数量超过zset-max-ziplist-entries配置项的值时。
当zset中每个元素的大小超过zset-max-ziplist-value配置项的值时。

这两个配置项可以在redis.conf文件中设置,默认值一般为-1,表示不限制。如果你设置了这些值,当zset满足这些条件时,它会自动从ziplist转换为skiplist。

注意:Redis的版本更新可能会改变这些条件,请参照你正在使用的Redis版本的官方文档。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

动手学深度学习(李沐)PyTorch 第 3 章 线性神经网络

3.1 线性回归 线性回归是对n维输入的加权,外加偏差 线性回归可以看作是单层神经网络 回归问题中最常用的损失函数是平方误差函数。 平方误差可以定义为以下公式: 常数1/2不会带来本质的差别,但这样在形式上稍微简单一些 (因为当…

一篇讲完CSS的核心内容

目录 一 、引言 1.1CSS概念 二、 CSS简介 2.1 什么是CSS 2.2 CSS能干什么 2.3 CSS书写规范 2.4 基础语法 三、 CSS导入方式 3.1 内嵌方式(内联方式) 3.2 内部方式 3.3 外部方式 四、 CSS选择器 4.1 基本选择器 [重点] 4.2 属性选择器 五、 CSS属性 5.1 文字属性…

Excel的基本应用__1

1. 模拟运算 1.1 单变量求解 1.1.1 步骤 1.1.1 效果 1.2 模拟运算表 1.2.1 步骤 1.2.2 效果 2.选择性粘贴--转至 3. Excel中如何使用和定义名称 使用 相当于全局变量,可以在不同表中调用 3.1名称中使用常量 3.2名称中使用函数 调用 可以在不同的表中调用 3.…

C语言 | Leetcode C语言题解之第433题最小基因变化

题目&#xff1a; 题解&#xff1a; int minMutation(char * start, char * end, char ** bank, int bankSize) {int m strlen(start);int **adj (int **)malloc(sizeof(int *) * bankSize);int endIndex -1;for (int i 0; i < bankSize; i) {adj[i] (int *)malloc(si…

Dynamic Connected Networks for Chinese Spelling Check(ACL2021)

Dynamic Connected Networks for Chinese Spelling Check(ACL2021) 一&#xff0e;概述 文中认为基于bert的非自回归语言模型依赖于输出独立性假设。不适当的独立性假设阻碍了基于bert的模型学习目标token之间的依赖关系&#xff0c;从而导致了不连贯的问题。为些&#xff0c…

CORS解决浏览器跨域请求(同源策略)限制原理、后端springboot CROS跨域解决方案

文章目录 1 浏览器的同源策略1.1 什么是源&#xff08;origin&#xff09;&#xff1f;1.2 跨域请求&#xff1f;1.3 同源策略&#xff08;跨域限制&#xff09;是什么&#xff1f;1.3.1 同源策略的具体限制&#xff1f;1.3.2 浏览器CORS校验 2 CORS解决Ajax跨域问题2.1 CORS概…

【JavaEE】——内存可见性问题

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;内存可见性问题 1&#xff1a;代码解释 2&#xff1a;结果分析 &#xff08;1&#xf…

分享开源且强大的HTML5网页视频播放器

随着互联网技术的飞速发展&#xff0c;视频内容已成为现代网络体验中不可或缺的一部分。无论是在线教育、娱乐还是企业宣传&#xff0c;高质量的视频播放器都是确保用户获得良好观看体验的关键。HTML5的出现极大地推动了网页视频播放技术的进步&#xff0c;逐渐取代了传统的Fla…

MySQL篇(日志)

目录 一、错误日志 二、二进制日志 1. 简介 2. 作用 3. 参数说明 3.1. 两个参数 3.2. 格式 3.3. 查看 3.4. 删除 4. 查询日志 三、慢查询日志 一、错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c; 以及服务器…

三菱FX5U PLC故障处理(各种出错的内容、原因及处理方法进行说明。)

对使用系统时发生的各种出错的内容、原因及处理方法进行说明。 故障排除的步骤 发生故障时&#xff0c;按以下顺序实施故障排除。 1.确认各模块是否正确安装或正确配线。 2、确认CPU模块的LED。 3.确认各智能功能模块的LED。(各模块的用户手册) 4、连接工程工具&#xff0c;启…

kubernetes网络(三)之bird的路由反射器的使用

一、摘要 上一篇文章中我们用 bird 程序实现了三台服务器之间的BGP full mesh。本文我们将实验把full mesh方式改为RR 路由反射器方式 &#xff0c;让宿主的BIRD相互学习到对方的容器网段&#xff0c;从而达到容器网段能相互通信的目的。 二、bird 实验 bird简介 BIRD 实际…

操作系统 | 学习笔记 | | 王道 | 5.3 磁盘和固态硬盘

5.3 磁盘和固态硬盘 5.3.1 磁盘 磁盘结构 磁盘&#xff1a;磁盘的表面由一些磁性物质组成&#xff0c;可以用这些磁性物质来记录二进制数据 磁道&#xff1a;磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道 扇区&#xff1a;一个磁道又被划分成一个个扇区&am…

828华为云征文 | 在华为云X实例上安装部署企业Wiki知识分享平台的实践

目录 前言 1. 华为云X实例介绍 1.1 华为云Flexus云服务概述 1.2 Flexus云服务器X实例的特点 2. MM-Wiki知识分享平台介绍 2.1 什么是MM-Wiki 2.2 MM-Wiki的功能特点 3. 安装部署环境 4. MM-Wiki安装部署步骤 4.1 下载与准备工作 4.2 安装MM-Wiki 4.3 启动与运行 5…

[spring]MyBatis介绍 及 用MyBatis操作简单数据库

文章目录 一. 什么是MyBatis二. MyBatis操作数据库步骤创建工程创建数据库创建对应实体类配置数据库连接字符串写持久层代码单元测试 三. MyBatis基础操作打印日志参数传递增删改查 四. MyBatis XML配置文件配置链接字符串和MyBatis写持久层代码方法定义Interface方法实现xml测…

从入门到精通:QT 100个关键技术关键词

Qt基础概念 Qt Framework - 一个跨平台的C图形用户界面应用程序开发框架。它不仅提供了丰富的GUI组件&#xff0c;还包括网络、数据库访问、多媒体支持等功能。 Qt Creator - Qt官方提供的集成开发环境&#xff08;IDE&#xff09;&#xff0c;集成了代码编辑器、项目管理工具、…

Linux网络之UDP与TCP协议详解

文章目录 UDP协议UDP协议数据报报头 TCP协议确认应答缓冲区 超时重传三次握手其他问题 四次挥手滑动窗口流量控制拥塞控制 UDP协议 前面我们只是说了UDP协议的用法,但是并没有涉及到UDP协议的原理 毕竟知道冰箱的用法和知道冰箱的原理是两个层级的事情 我们首先知道计算机网…

【RabbitMQ】RabbitMQ 的概念以及使用RabbitMQ编写生产者消费者代码

目录 1. RabbitMQ 核心概念 1.1生产者和消费者 1.2 Connection和Channel 1.3 Virtual host 1.4 Queue 1.5 Exchange 1.6 RabbitMO工作流程 2. AMQP 3.RabbitMO快速入门 3.1.引入依赖 3.2.编写生产者代码 ​3.3.编写消费者代码 4.源码 1. RabbitMQ 核心概念 在安装…

【Redis】Linux下安装配置及通过C++访问Redis

文章目录 一、Linux Centos 7.0版本下的安装及配置二、通过C访问Redis 一、Linux Centos 7.0版本下的安装及配置 通过源来安装&#xff0c;此次安装的版本为 redis 5.0 的&#xff0c;要通过其他源进行安装&#xff0c;首先安装 scl 源 yum install centos-release-scl-rh再安…

LED显示屏驱动电源:恒流与恒压,谁更胜一筹?

LED显示屏&#xff0c;作为现代电子显示技术的重要代表&#xff0c;已经在我们的生活中无处不在。无论是商场的广告牌、体育场的计分板&#xff0c;还是家庭中的智能电视&#xff0c;LED显示屏都以其鲜艳的色彩、高清晰度和长寿命赢得了我们的青睐。然而&#xff0c;在这背后&a…

爬虫逆向学习(七):补环境动态生成某数四代后缀MmEwMD

声明&#xff1a;本篇文章内容是整理并分享在学习网上各位大佬的优秀知识后的实战与踩坑记录 前言 这篇文章主要是研究如何动态生成后缀参数MmEwMD的&#xff0c;它是在文章爬虫逆向学习(六)&#xff1a;补环境过某数四代的基础上进行研究的&#xff0c;代码也是在它基础上增…