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

Redis五种基本数据结构的使用

Redis具有五种基本数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、SortedSet(有序集合),下面示意它们的使用。

String类数据类型的使用
增:添加数据(set)、添加多个数据(mset)、添加数据时指定过期时间(setex) ​
删:删除数据(del) ​
改:追加字符串(append)、自增(incr)、自减(decr)、增加指定值(incrby) ​
查:获取数据(get)、查询多个数据(mget) 、strlen返回字符串长度(strlen)

127.0.0.1:6379> set name Jacob #创建一个key为‘name’,value为‘Jacob’的数据
OK #成功,返回OK
127.0.0.1:6379> get name #获取key为‘name’数据的value值
"Jacob" #返回结果
127.0.0.1:6379> strlen name #获取key为‘name’数据的长度
(integer) 5
127.0.0.1:6379> append name Tan #追加key为‘name’数据,value值加上‘Tan’
(integer) 8
127.0.0.1:6379> get name
"JacobTan"
127.0.0.1:6379> set num 0 #设置key为‘num’,value为‘0’的数据
OK
127.0.0.1:6379> get num	#获取key为‘num’的数据,它的value值
"0"
127.0.0.1:6379> incr num #自增key为‘num’的数据,每次加1
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> decr num #自减key为‘num’的数据
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incrby num 10 #增加key为‘num’数据的value值,每次加10
(integer) 11
127.0.0.1:6379> get num
"11"
127.0.0.1:6379> ttl num #查看key为‘num’的数据的过期时间,默认数据永不过期。
(integer) -1 #-1代表永不过期
127.0.0.1:6379> setex university 5 NEU #设置key为‘university’,value为‘NEU’的数据过期时间为5秒
OK
127.0.0.1:6379> keys * #查看redis的所有key值
1) "num"
2) "university"
3) "name"
127.0.0.1:6379> keys *
1) "num"
2) "name"
127.0.0.1:6379> mset age 24 province JX #mset命令可以一次设置多个key-value数据
OK
127.0.0.1:6379> mget age province #mget可以一次性获取多个key对应的value
1) "24"
2) "JX"
127.0.0.1:6379> keys *
1) "num"
2) "province"
3) "name"
4) "age"

Hash数据类型的使用
​增:添加数据(hset)、添加多条数据(hmset)、不存在元素则添加(hsetnx)
​删:删除特定的key对应的value(hdel)
​改:给特定的key值对应value增加数值(hincrby)
查:获取hash的所有字段(hgetall)、获取特定的key值对应value(hget)、获取hash表长度(hlen)、查看hash中是否存在特定的key值对应的数据(hexists)、查看hash表所有key值(hkeys)、查看hash表所有value值(hvals)。 

127.0.0.1:6379> hmset myhash name Jacob age 20 province LN country China #hmset 是创建key为‘myhash’的数据,value为hash表,name,age,province和country为hash表中的key,后面跟着的是对应的value值。
OK 
127.0.0.1:6379> hgetall myhash #获取key为‘myhash’的所有字段,包括key和value
1) "name"
2) "Jacob"
3) "age"
4) "20"
5) "province"
6) "LN"
7) "country"
8) "China"
127.0.0.1:6379> hget myhash name #获取myhash中key为‘name’的value
"Jacob"
127.0.0.1:6379> hdel myhash del country #删除myhash中key为‘country’的数据
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "name"
2) "Jacob"
3) "age"
4) "20"
5) "province"
6) "LN"
127.0.0.1:6379> hlen myhash #获取myhash这个hash表的数据长度
(integer) 3
127.0.0.1:6379> hexists myhash name #判断myhash中是否存在key为‘name’的数据
(integer) 1
127.0.0.1:6379> hkeys myhash #查看myhash中的所有key值
1) "name"
2) "age"
3) "province"
127.0.0.1:6379> hvals myhash #查看myhash中的所有value值
1) "Jacob"
2) "20"
3) "LN"
127.0.0.1:6379> hincrby myhash age 4 #myhash中的key为‘age’的数据value增加4
(integer) 24
127.0.0.1:6379> hsetnx myhash name tt #myhash中如果存在‘name’字段取消,不存在则执行添加命令
(integer) 0
127.0.0.1:6379> hgetall myhash
1) "name"
2) "Jacob"
3) "age"
4) "24"
5) "province"
6) "LN"

​List数据类型的使用

增:左增 (lpush)、 右增(rpush)、前插入(linsert key before pivot insertValue)、后插入(linsert key after pivot insertValue)、获取最后元素加入新的列表(rpoplpush oldList newList)
删:按值删除 (lrem key count value)
改:更改值(lset key index newValue)
查:按索引范围查 (lrange key start stop) 、按索引查(lindex key index)、从左边弹出(lpop)、从右边弹出(rpop)长度相关:获取长度(llen)、按索引截取保留部分(ltrim key start stop)

127.0.0.1:6379> lpush  mylist 1,2,3,4,5 #创建一个key为mylist的列表,左增一个元素
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1 #查看mylist的所有元素
1) "1,2,3,4,5"
127.0.0.1:6379> rpush mylist -1 #在mylist中,右增一个元素-1
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "1,2,3,4,5"
2) "-1"
127.0.0.1:6379> lpush mylist -2
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "-2"
2) "1,2,3,4,5"
3) "-1"
127.0.0.1:6379> lpop mylist #弹出mylist中左边第一个元素
"-2"
127.0.0.1:6379> lrange mylist 0 -1
1) "1,2,3,4,5"
2) "-1"
127.0.0.1:6379> rpop mylist #弹出mylist右边第一个元素
"-1"
127.0.0.1:6379> lrange mylist 0 -1
1) "1,2,3,4,5"
127.0.0.1:6379> lindex mylist 0 #获取mylist中索引0的数据
"1,2,3,4,5"
127.0.0.1:6379> llen mylist #获取mylist的长度
(integer) 1
127.0.0.1:6379> lrem mylist 1 1,2,3,4,5 #移除mylist中‘1,2,3,4,5’元素1个
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
(empty list or set)
127.0.0.1:6379> lpush mylist 1 2 3 4 5 #在mylist中左增多个元素
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> ltrim mylist 1 2 #截取mylist中索引1到2的部分保留
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "4"
2) "3"
127.0.0.1:6379> lset mylist 1 5 #更改mylist中索引1位置的元素为5
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "4"
2) "5"
127.0.0.1:6379> rpoplpush mylist mylist2 #将mylist中最后一个元素加入一个新的列表mylist2中
"5"
127.0.0.1:6379> lrange mylist2 0 -1
1) "5"
127.0.0.1:6379> lrange mylist 0 -1
1) "4"
127.0.0.1:6379> linsert mylist before 4 3 #在mylist的元素值为4前插入3
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "3"
2) "4"
127.0.0.1:6379> linsert mylist after 4 5 #在mylist的元素值为4后插入元素5
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "3"
2) "4"
3) "5"

Set数据类型的使用

​增:添加元素(zadd)
删:删除指定元素(srem key data)、随机删除元素(spop)
​改:移动指定元素到新集合(smove oldSet newSet data)
​查:查看所有元素(smembers)、查看某一元素是否存在(sismember)、查看长度(scard)
​集合操作:差集(sdiff set1 set2)、交集(sinter set1 set2)、并集(sunion set1 set2)

127.0.0.1:6379> sadd myset a b c c d #创建一个key为myset的集合,添加a,b,c,d四个元素
(integer) 4
127.0.0.1:6379> smembers myset #查看myset中的元素
1) "a"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> sismember myset a #查看a是否在myset中
(integer) 1
127.0.0.1:6379> scard myset #查看myset的长度
(integer) 4
127.0.0.1:6379> srem myset a #移除myset中的元素a
(integer) 1
127.0.0.1:6379> smembers myset 
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> srandmember myset #随机获取myset中的一个元素
"d"
127.0.0.1:6379> srandmember myset
"d"
127.0.0.1:6379> srandmember myset
"c"
127.0.0.1:6379> 
127.0.0.1:6379> spop myset #随机删除myset中的元素
"d"
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
127.0.0.1:6379> smove myset myset1 c #将元素c从myset中移动到myset1中
(integer) 1
127.0.0.1:6379> smembers myset1
1) "c"
127.0.0.1:6379> keys *1) "num"2) "province"3) "num1"4) "myhash"5) "myset1"6) "age"7) "lpush"8) "myset"9) "mylist2"
10) "name"
11) "mylist"
127.0.0.1:6379> sadd myset a c d e
(integer) 4
127.0.0.1:6379> smembers myset
1) "a"
2) "d"
3) "c"
4) "b"
5) "e"
127.0.0.1:6379> sadd myset1 a c e f b
(integer) 4
127.0.0.1:6379> smembers myset1
1) "f"
2) "e"
3) "a"
4) "c"
5) "b"
127.0.0.1:6379> sdiff myset myset1 #求解myset和myset1的差集
1) "d"
127.0.0.1:6379> sdiff myset1 myset
1) "f"
127.0.0.1:6379> sinter myset myset1 #求解myset与myset1之间的交集
1) "e"
2) "a"
3) "b"
4) "c"
127.0.0.1:6379> sunion myset myset1 #求解myset与myset1之间的并集
1) "f"
2) "e"
3) "a"
4) "d"
5) "b"
6) "c"

zSet数据类型的使用

​ 增:添加数据(zadd)
​ 删:删除数据(zrem)
​ 查: 按从大到小的顺序(zrevrange)排列、按从小到大的顺序排列(zrangebyscore)、查看元素个数(zcard)、查询值在指定区间的个数(zcount key min max)

127.0.0.1:6379> zadd myzset 1 one 2 two 3 three #添加一个key为myzset的有序集合,one赋予1分,two赋予2分,three赋予3分
(integer) 3
127.0.0.1:6379> zrange myzset 0 -1 #查看myzset的所有元素
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrangebyscore myzset -inf +inf #让myzset中元素从小到大排序
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrange myzset 0 -1 
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrevrange myzset 0 -1 #myzset中元素从大到小排序
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrem myzset one #移除myzset中的元素one
(integer) 1
127.0.0.1:6379> zrevrange myzset 0 -1
1) "three"
2) "two"
127.0.0.1:6379> zcard myzset #统计myzset中元素的个数
(integer) 2
127.0.0.1:6379> zcount myzset 1 1 #统计myzset中值为1的个数
(integer) 0
127.0.0.1:6379> zcount myzset 1 2
(integer) 1

相关文章:

Redis五种基本数据结构的使用

Redis具有五种基本数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、SortedSet(有序集合),下面示意它们的使用。 String类数据类型的使用 增:添加数据(set)、添加多个数据(mset)、添加数据时指定过期时间(setex) ​ 删&#xf…...

【QT】系统-下

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:QT 目录 👉🏻QTheadrun() 👉🏻QMutex👉🏻QWaitCondition👉🏻Q…...

java和kotlin 可以同时运行吗

Java 和 Kotlin 可以同时运行在同一个项目中,这主要得益于 Kotlin 对 Java 的互操作性。Kotlin 被设计为与 Java 100% 兼容,这意味着 Kotlin 代码可以很容易地调用 Java 代码,反之亦然。这种设计使得 Kotlin 能够无缝集成到现有的 Java 项目中…...

2024最新版 Tuxera NTFS for Mac 2023绿色版图文安装教程

​ 在数字化时代,数据的存储和传输变得至关重要。Mac用户经常需要在Windows NTFS格式的移动硬盘上进行读写操作,然而,由于MacOS系统默认不支持NTFS的写操作,这就需要我们寻找一款高效的读写软件。Tuxera NTFS for Mac 2023便是其中…...

npm发布插件超级简单版

在开源的世界里,每个人都有机会成为贡献者,甚至是创新的引领者。您是否有过这样的想法:开发一个解决特定问题的小工具,让他成为其他开发者手中的利器?今天,我们就来一场实战训练,学习如何将你的…...

C# 访问Access存取图片

图片存入ole字段,看有的代码是获取图片的字节数组转换为base64字符串,存入数据库;显示图片是把base64字符串转换为字节数组再显示;直接存字节数组可能还好一点; 插入的时候用带参数的sql写法比较好;用拼接…...

正则表达式中常见字符的用法介绍

正则表达式(Regular Expression,简称Regex)是一种文本模式描述的方法,包括普通字符(如a到z之间的字母)和特殊字符(称为“元字符”)。正则表达式使用单个字符串来描述、匹配一系列符合…...

Vue3.0组合式API:依赖注入provide和inject实现跨层组件的通信

Vue3.0组合式API系列文章: 《Vue3.0组合式API:setup()函数》 《Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象》 《Vue3.0组合式API:computed计算属性、watch监听器、watchEffect高级监听器》 《Vue3.0组合式API&…...

VSCode中配置C/C++环境

在Visual Studio Code(VSCode)中配置C/C环境是一个相对直接且功能强大的过程,它能让开发者利用VSCode的诸多便利功能来编写、编译和调试C/C代码。以下是一个详细的步骤指南,涵盖了从安装必要的软件到配置编译器、调试器以及VSCode…...

vue实现鼠标滚轮控制页面横向滑动

先看效果 20240919_095531 1.首先创建一个xScroll.vue组件 <template><div class"main" v-size-ob"mainSize"><div class"v-scroll"><div class"content"><slot></slot></div></div>…...

【Git使用】删除Github仓库中的指定文件/文件夹

前言&#xff1a; 上篇文章带大家上传了第一个项目至github,那要是想删除仓库中的指定文件夹怎么办&#xff1f;在Github中 仓库是无法通过鼠标操作直接删除文件和文件夹的&#xff0c;那只能通过 git 命令来执行删除操作。接下来就带大家进行操作。 详细步骤&#xff1a; 一…...

Iptables命令常用命令

前言:下是一些非常实用的 iptables 命令合集&#xff0c;涵盖网络攻击防护和日常网络安全防护 1. 查看当前规则 iptables -L -v -n查看现有的所有规则&#xff0c;-v 显示详细信息&#xff0c;-n 禁止解析IP地址和端口以加快显示速度。 2. 清空所有规则 iptables -F清除所有已…...

前端开发之原型模式

介绍 原型模式本质就是借用一个已有的实例做原型&#xff0c;在这原型基础上快速复制出一个和原型一样的一个对象。 class CloneDemo {name clone democlone(): CloneDemo {return new CloneDemo()} } 原型原型链 函数&#xff08;class&#xff09;都有显示原型 prototyp…...

分布式缓存服务Redis版解析与配置方式

一、Redis分布式缓存服务概述 Redis是一款高性能的键值对&#xff08;Key-Value&#xff09;存储系统&#xff0c;通常用作分布式缓存服务。它基于内存运行&#xff0c;支持丰富的数据类型&#xff0c;并具备高并发、低延迟的特点&#xff0c;非常适合用于缓存需要频繁访问的数…...

WordPress建站钩子函数及使用

目录 前言&#xff1a; 使用场景&#xff1a; 一、常用的wordpress钩子&#xff08;动作钩子、过滤器钩子&#xff09; 1、动作钩子&#xff08;Action Hooks&#xff09; 2、过滤器钩子&#xff08;Filter Hooks&#xff09; 二、常用钩子示例 1、添加自定义 CSS 和 JS…...

Qt 模型视图(二):模型类QAbstractItemModel

文章目录 Qt 模型视图(二)&#xff1a;模型类QAbstractItemModel1.基本概念1.1.模型的基本结构1.2.模型索引1.3.行号和列号1.4.父项1.5.项的角色1.6.总结 Qt 模型视图(二)&#xff1a;模型类QAbstractItemModel ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模…...

算法打卡 Day41(动态规划)-理论基础 + 斐波那契数 + 爬楼梯 + 使用最小花费爬楼梯

文章目录 理论基础Leetcode 509-斐波那契数题目描述解题思路 Leetcode 70-爬楼梯题目描述解题思路 Leetcode 746-用最小花费爬楼梯题目描述解题思路 理论基础 动态规划&#xff0c;简称 DP&#xff0c;其中的每一个状态一定是由上一个状态推导出来的&#xff0c;而贪心算法没有…...

鸿蒙环境服务端签名直传文件到OSS

本文介绍如何在鸿蒙环境下将文件上传到OSS。 背景信息 鸿蒙环境是当下比较流行的操作环境&#xff0c;与服务端签名直传的原理类似&#xff0c;鸿蒙环境上传文件到OSS是利用OSS提供的PutObject接口来实现文件上传到OSS。关于PutObject的详细介绍&#xff0c;请参见PutObject。…...

计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI

首先安装需要的python库&#xff0c; 安装完之后利用navicat导入数据库文件bili100.sql到mysql中&#xff0c; 再在pycharm编译器中连接mysql数据库&#xff0c;并在设置文件中将密码修改成你的数据库密码。最后运行app.py&#xff0c;打开链接&#xff0c;即可运行。 B站爬虫数…...

solidwork剪裁实体

之前是这样&#xff1a; 效果如下&#xff1a;...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

wpf在image控件上快速显示内存图像

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

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

Mac flutter环境搭建

一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...