当前位置: 首页 > 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;...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...