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) 删…...

【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仓库中的指定文件/文件夹
前言: 上篇文章带大家上传了第一个项目至github,那要是想删除仓库中的指定文件夹怎么办?在Github中 仓库是无法通过鼠标操作直接删除文件和文件夹的,那只能通过 git 命令来执行删除操作。接下来就带大家进行操作。 详细步骤: 一…...
Iptables命令常用命令
前言:下是一些非常实用的 iptables 命令合集,涵盖网络攻击防护和日常网络安全防护 1. 查看当前规则 iptables -L -v -n查看现有的所有规则,-v 显示详细信息,-n 禁止解析IP地址和端口以加快显示速度。 2. 清空所有规则 iptables -F清除所有已…...

前端开发之原型模式
介绍 原型模式本质就是借用一个已有的实例做原型,在这原型基础上快速复制出一个和原型一样的一个对象。 class CloneDemo {name clone democlone(): CloneDemo {return new CloneDemo()} } 原型原型链 函数(class)都有显示原型 prototyp…...
分布式缓存服务Redis版解析与配置方式
一、Redis分布式缓存服务概述 Redis是一款高性能的键值对(Key-Value)存储系统,通常用作分布式缓存服务。它基于内存运行,支持丰富的数据类型,并具备高并发、低延迟的特点,非常适合用于缓存需要频繁访问的数…...

WordPress建站钩子函数及使用
目录 前言: 使用场景: 一、常用的wordpress钩子(动作钩子、过滤器钩子) 1、动作钩子(Action Hooks) 2、过滤器钩子(Filter Hooks) 二、常用钩子示例 1、添加自定义 CSS 和 JS…...

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

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

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

计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
首先安装需要的python库, 安装完之后利用navicat导入数据库文件bili100.sql到mysql中, 再在pycharm编译器中连接mysql数据库,并在设置文件中将密码修改成你的数据库密码。最后运行app.py,打开链接,即可运行。 B站爬虫数…...

solidwork剪裁实体
之前是这样: 效果如下:...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

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

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

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