Redis数据类型(上篇)

前提:(key代表键)

Redis常用的命令
命令作用
keys *查看当前库所有的key
exists key判断某个key是否存在
type key查看key是什么类型
del key 删除指定的key
unlink key非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。
ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
expire key 秒钟为给定的key设置过期时间
move key dbindex[0-15]将当前数据库的key移动到给定的数据库db中
select dbindex[0-15]切换数据库【0-15】,默认为0
dbsize查看当前数据库key的数量
flushdb清空当前库(慎用)
flushall通杀全部库(慎用)

 两个删除操作的区别:(unlink key  和 del key)
del key:同步操作,执行时会立即阻塞当前线程,直到键被删除完成。
unlink key:异步操作,它发起删除请求后不会阻塞线程,而是让删除操作在后台进行,不会立即返回键是否已成功删除。这样在处理大量键删除时,可以避免阻塞导致性能下降。

1.Redis字符串(String)

string是redis最基本的类型,一个key对应一个value,一个redis中字符串value最多可以是512M

string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。

(1)设置键值对:

set key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]
相关参数介绍

NX:不存在时创建

XX:存在时创建(会覆盖前面的值,相当于修改k的值)

(2)keepttl作用:修改一个k的值会将原来的过期时间覆盖(值变了,但是过期时间也变了),keepttl可以保留原来的过期时间(只改变值,但是过期时间不变)

例:keepttl的使用

127.0.0.1:6379> set k1 v1 ex 30 设置k1过期时间为30s
OK
127.0.0.1:6379> set k1 v1kppl keepttl 修改k1的值,后面使用keepttl 
OK
127.0.0.1:6379> ttl k1  获取k1过期时间
(integer) 8
127.0.0.1:6379> get k1
"v1kppl"

(3)在Java代码中获取当前Unix时间:

 System.out.println(Long.toString(System.currentTimeMillis()/1000L));

(4)同时设置获取多个值:(mset)

使用:

127.0.0.1:6379> mset k1 v1 k2 v2
OK 
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> msetnx k2 v2 k3 v3   ----------(失败)
(integer) 0
127.0.0.1:6379> keys *
1) "k2"
2) "k1"

注意:msetnx与事务类似,同成功,同失败(NX:不存在时创建,但是k2已经存在)

(5)获取和设置指定区间范围内的值:(getrange 和 setrange )

使用:

127.0.0.1:6379> get k1
"abcdefghijk"
127.0.0.1:6379> getrange k1 0 -1    0到-1代表全部
"abcdefghijk"
127.0.0.1:6379> getrange k1 0 3
"abcd"
127.0.0.1:6379> setrange k1 1 xxxx
(integer) 11
127.0.0.1:6379> get k1
"axxxxfghijk"

(6)数值增减(incr  、incrby  、decr 、decrby)

例如:

127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> incr k1
(integer) 101
127.0.0.1:6379> incr k1
(integer) 102
127.0.0.1:6379> incrby k1 3  指定每次增加多少
(integer) 105
127.0.0.1:6379> incrby k1 3
(integer) 108
127.0.0.1:6379> decr k1
(integer) 107
127.0.0.1:6379> decr k1
(integer) 106
127.0.0.1:6379> decrby k1 3  指定每次减少多少
(integer) 103
127.0.0.1:6379> decrby k1 3
(integer) 100

(7)获取字符串长度和追加(str 、appebd)

例如:

127.0.0.1:6379> set k1 abcd
OK
127.0.0.1:6379> get k1
"abcd"
127.0.0.1:6379> strlen k1
(integer) 4
127.0.0.1:6379> append k1 xxxx
(integer) 8
127.0.0.1:6379> get k1
"abcdxxxx"

(8)分布式锁(setex key 过期时间 value (还有setnx))

第一步,set key value

第二步,expire k 过期时间

上面的两个加起来等同于:setex key 过期时间 value

例:

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> expire k1 10
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 6
127.0.0.1:6379> ttl k1
(integer) 2
127.0.0.1:6379> setex k1 10 vll
OK
127.0.0.1:6379> ttl k1
(integer) 0
127.0.0.1:6379> setnx k1 v11
(integer) 1
127.0.0.1:6379> get k1
"v11"
127.0.0.1:6379> setnx k1 v11
(integer) 0

(9)先获取再设置值(getset)

127.0.0.1:6379> getset k1 haha  先获取到原来的值v11,再修改为haha
"v11"
127.0.0.1:6379> get k1
"haha"

注意:getset命令等同于 set key value get ,例:

127.0.0.1:6379> get k1
"aaa"
127.0.0.1:6379> set k1 haha get
"aaa"
127.0.0.1:6379> get k1
"haha"

2.Redis列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

(1)创建和遍历列表(lpush 、rpush、lrange)

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6  从左边加入
(integer) 6
127.0.0.1:6379> RPUSH list2 1 2 3 4 5 6  从右边加入
(integer) 6
127.0.0.1:6379> LRANGE list1 0 -1  遍历
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> LRANGE list2 0 -1   遍历
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"

(2)弹出元素(lpop、rpop)

127.0.0.1:6379> LPOP list1  左边弹出一个
"6"
127.0.0.1:6379> RPOP list1  右边弹出一个
"1"
127.0.0.1:6379> LRANGE list1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"

(3)从上到下获取指定的元素(lindex)

127.0.0.1:6379> LINDEX list1 2
"3"
127.0.0.1:6379> LINDEX list1 0
"5"

4)获取列表中元素的个数(llen)

127.0.0.1:6379> LLEN list1
(integer) 4

(5)删除N个值等于v1的元素(lrem key 数字N 给定的值v1)

127.0.0.1:6379> lpush list1 1 1 1 2 2 2 3 4 5 6
(integer) 10
127.0.0.1:6379> lrem list1 2 2  删除2个2
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "1"
8) "1"

(6)截取指定范围的值再赋值给key(ltrim key 开始index 结束index)

127.0.0.1:6379> lrange list1 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> ltrim list1 0 2
OK
127.0.0.1:6379> lrange list1 0 -1
1) "6"
2) "5"
3) "4"

(7)将列表key1中的值加到列表key2中去(rpoplpush 列表key1 列表key2)

127.0.0.1:6379> lrange list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6" 
127.0.0.1:6379> rpoplpush list1 list2 将list1中的4加到list2中去
"4"
127.0.0.1:6379> lrange list1 0 -1
1) "6"
2) "5"
127.0.0.1:6379> lrange list2 0 -1
1) "4"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"

(8)修改某个索引处的值(lset key index value)

127.0.0.1:6379> lset list2 2 9  将索引2的值改为9
OK
127.0.0.1:6379> lrange list2 0 -1
1) "4"
2) "1"
3) "9"
4) "3"
5) "4"
6) "5"
7) "6"

(9)插入新的值(linsert key before/after 已有的值 插入新的值)

127.0.0.1:6379> lrange list2 0 -1
1) "4"
2) "1"
3) "9"
4) "3"
5) "4"
6) "5"
7) "6"
127.0.0.1:6379> linsert list2 after 9 10 在9后面加一个10
(integer) 8
127.0.0.1:6379> lrange list2 0 -1
1) "4"
2) "1"
3) "9"
4) "10"
5) "3"
6) "4"
7) "5"
8) "6"

默认插入前一个:

127.0.0.1:6381> linsert keylist after 3 6
(integer) 5
127.0.0.1:6381> lrange keylist 0 -1  keylist里面有两个3,只在第一个3后面加入了6
1) "3"
2) "6"
3) "2"
4) "3"
5) "1"

3.Redis哈希(Hash)

简单说就是:Map<String,Map<Object,Object>>
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)

(1)hset:为一个键赋值;hget:获取值

127.0.0.1:6381> hset user1 name tom age 18
(integer) 2
127.0.0.1:6381> hget user1 name
"tom"

(2)hmset:为多个属性赋值;hmget:获取多个属性的值

127.0.0.1:6381> hmset user2 name jack age 19
OK
127.0.0.1:6381> hmget user2 name age
1) "jack"
2) "19"

(3)hgetall:获取全部;hdel:删除某个属性

127.0.0.1:6381> hgetall user2
1) "name"
2) "jack"
3) "age"
4) "19"
127.0.0.1:6381> hdel user1 name
(integer) 1

(4)hlen:获取key的长度

127.0.0.1:6381> hlen user2
(integer) 2

(5)hexists key:判断key中有没有某一个属性

127.0.0.1:6381> hexists user2 name
(integer) 1
127.0.0.1:6381> hexists user2 email
(integer) 0

(6)hkeys:获取全部的属性 ;hvals:获取全部属性对应的值

127.0.0.1:6381> hkeys user2
1) "name"
2) "age"
127.0.0.1:6381> hvals user2
1) "jack"
2) "19"

(7)hincrby:属性增加;hincrbyfloat:增加小数;

127.0.0.1:6381> hincrby user2 age 2
(integer) 21
127.0.0.1:6381> hget user2 age
"21"
127.0.0.1:6381> hincrbyfloat user2 age 2.3
"23.3"
127.0.0.1:6381> hget user2 age
"23.3"

4.Redis集合(Set)

无重复

(1)sadd key member1 【member2】:向集合中加入多个成员

127.0.0.1:6381> sadd set1 1 1 2 2 3 4 5 6
(integer) 6
127.0.0.1:6381> sadd set2 3 4 5 6 7 8
(integer) 6

(2)scard key : 获取集合成员数

127.0.0.1:6381> scard set1
(integer) 6

(3)sdiff key1 【key2】:返回给定集合的差集

127.0.0.1:6381> sdiff set1 set2
1) "1"
2) "2"

(4)sdiffstore destination key1 【key2】:返回给定集合的差集并存储到destination中

127.0.0.1:6381> sdiffstore set3 set1 set2   将结果放入set3
(integer) 2

(5)sinter key1 【key2】:返回给定集合的交集

127.0.0.1:6381> sinter set1 set2
1) "3"
2) "4"
3) "5"
4) "6"

(6)sinterstore destination key1【key2】:返回给定集合的交集并存储到destination中

127.0.0.1:6381> sinterstore set3 set1 set2
(integer) 4

(7)sismember key member:判断member是不是key的成员

127.0.0.1:6381> sismember set1 1
(integer) 1

(8)smembers key:返回集合中全部的成员

127.0.0.1:6381> smembers set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"

(9)smove source destination member :将member元素从source集合移动到destination中

127.0.0.1:6381> smove set2 set1 8
(integer) 1
127.0.0.1:6381> smembers set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "8"

(10)spop key 【count】 :移除并返回集合中的某count个元素(返回并删除

127.0.0.1:6381> spop set1 
"5"
127.0.0.1:6381> spop set1 2
1) "4"
2) "8"

(11)srandmember key 【count】:返回集合中一个或多个随机数(但是并未删除

127.0.0.1:6381> srandmember set1 2
1) "3"
2) "6"

(12)srem key member1 【member2】:移除集合中一个或多个成员

127.0.0.1:6381> srem set1 1 2
(integer) 2
127.0.0.1:6381> smembers set1
1) "3"
2) "6"

(13)sunion key1 【key2】:返回给定集合的并集

127.0.0.1:6381> sunion set1 set2
1) "3"
2) "4"
3) "5"
4) "6"
5) "7"

(14)sunionstore destination key1 【key2】:返回给定集合的并集存在destination中

127.0.0.1:6381> sunionstore set4 set1 set2
(integer) 5
127.0.0.1:6381> smembers set4
1) "3"
2) "4"
3) "5"
4) "6"
5) "7"

 (15)sscan key cursor 【MATCH pattern】 【COUNT count】:迭代集合中的元素

cursor - 游标。
pattern - 匹配的模式。
count - 指定从数据集里返回多少元素,默认值为 10 。

127.0.0.1:6381> sadd myset Google
(integer) 1
127.0.0.1:6381> sadd myset Runoob
(integer) 1
127.0.0.1:6381> sadd myset Taobao
(integer) 1
127.0.0.1:6381> sscan myset 0 match R*
1) "0"
2) 1) "Runoob"
127.0.0.1:6381> 

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

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

相关文章

vueRouter路由总结

https://blog.csdn.net/qq_24767091/article/details/119326884

中国电子节能技术协会数据安全专业委员会筹备会暨标准征集启动会即将开幕

导读&#xff1a;“以高效、安全、绿色数据底座铸就美好未来”为主题的2024数据安全与绿色发展研讨会&#xff0c;中国电子节能技术协会数据安全专业委员会筹备会暨标准征集启动会即将开幕。 绿色发展是高质量发展的底座&#xff0c;绿色化是新一轮科技革命和产业变革的重要趋势…

Oracle数据库Day01-SELECT语句

一、SQL语句 1. 环境配置与准备 linux端oracle用户打开监听//查看监听状态与开始监听 lsnrctl status lsnrctl start开启数据库sqlplus / as sysdba startup;解锁hr用户样例数据库&#xff0c;给hr用户设置密码并且连接alter user hr account unlock; alter user hr identifie…

2024爆款神器!会声会影2024旗舰版,让你的视频制作技能暴涨,不学真的亏大了!

在数字内容创作的时代&#xff0c;视频编辑已经成为连接创意与现实的重要桥梁。无论是个人Vlog制作、在线教育课程、企业宣传还是专业影视制作&#xff0c;高效而强大的视频编辑软件成为了必不可少的工具。会声会影2024旗舰版&#xff0c;作为一款集先进技术与用户友好界面设计…

常用API(正则表达式、爬取、捕获分组和非捕获分组 )

1、正则表达式 练习——先爽一下正则表达式 正则表达式可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 需求&#xff1a;假如现在要求校验一个qq号码是否正确。 规则&#xff1a;6位及20位之内&#xff0c;0不能在开头&#xff0c;必须全部是数字…

30.哀家要长脑子了!---栈与队列

1.388. 文件的最长绝对路径 - 力扣&#xff08;LeetCode&#xff09; 其实看懂了就还好 用一个栈来保存所遍历过最大的文件的绝对路径的长度&#xff0c;栈顶元素是文件的长度&#xff0c;栈中元素的个数是该文件目录的深度&#xff0c;非栈顶元素就是当时目录的长度 检查此…

Qt 5前后调色板差异变化

Qt 5之前&#xff1a; QPalette palette;//调色板 设置背景颜色 palette.setColor(QPalette::Backgound, color...);Qt 5之后&#xff1a; 由原有的 Background 模式 更新为 Window 模式 QPalette palette;//调色板 设置背景颜色 palette.setColor(QPalette::Window, color..…

10.SpringBoot 统一处理功能

文章目录 1.拦截器1.1在代码中的应用1.1.1定义拦截器1.1.2注册配置拦截器 1.2拦截器的作用1.3拦截器的实现 2.统一数据返回格式2.1 为什么需要统⼀数据返回格式&#xff1f;2.2 统⼀数据返回格式的实现 3.统一异常处理4.SpringBoot专业版创建项目无Java8版本怎么办&#xff1f;…

nodejs安装配置

nodejs安装 打开nodejs官网(https://nodejs.org/en/download/package-manager)&#xff0c;参考安装步骤操作。 更新镜像源 输入以下命令&#xff0c;将npm的镜像源设置为淘宝镜像。网上资料中&#xff0c;淘宝镜像地址多为https://registry.npm.taobao.org&#xff0c;这个…

【MATLAB源码-第67期】基于麻雀搜索算法(SSA)的无人机三维地图路径规划,输出最短路径和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 麻雀搜索算法&#xff08;Sparrow Search Algorithm, SSA&#xff09;是一种新颖的元启发式优化算法&#xff0c;它受到麻雀社会行为的启发。这种算法通过模拟麻雀的食物搜索行为和逃避天敌的策略来解决优化问题。SSA通过模拟…

【C++】:vector容器的基本使用

目录 &#x1f352;1&#xff0c;vector的介绍&#x1f352;2&#xff0c;vector的使用&#x1f42f;2.1 vector的构造&#x1f981;2.2 vector iterator 的使用&#x1f33d;2.3 vector 空间增长问题&#x1f353;2.4 vector 增删查改&#x1f42f;2.5 vector 访问及遍历&…

雷军-2022.8小米创业思考-9-爆品模式:产品力超群,具有一流口碑,最终实现海量长销的产品。人人都向往;做减法;重组创新;小白模式

第九章 爆品模式 小米方法论的第三个关键词&#xff0c;就是一切以产品为出发点&#xff0c;打造爆品模式。 大多数人对“爆品”的着眼点仅在于“爆”&#xff0c;也就是产品卖得好。希望产品大卖这没有错&#xff0c;但是“爆”是“品”的结果&#xff0c;爆品是打造出来的&…

闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?

前言 虽然说&#xff0c;目前 .NET FrameWork 上的大部分类都已经移植到 .NET Core 上&#xff0c;而且 .NET FrameWork 也已经停止了更新&#xff0c;未来必然是 .NET Core 的天下&#xff0c;但要说现在 .NET Core 就能淘汰 .NET FrameWork&#xff0c;我觉得为时尚早&#…

【AD21】钻孔文件的输出

钻孔文件包含了所有需要在PCB上钻孔的位置、孔径和类型&#xff08;如通孔、盲孔、埋孔&#xff09;的详细信息。板厂可以使用这个文件来控制钻孔机进行精确钻孔。 在PCB源文件页面&#xff0c;菜单栏中点击文件->制造输出->NC Drill Files。 在弹出的新界面&#xff0c…

C++240527

定义自己的命名空间 my_sapce&#xff0c;在 my_sapce 中定义 string 类型的变量 s1&#xff0c;再 定义一个函数 完成 对字符串的逆置 。 #include <iostream>//导入 标准命名空间&#xff0c;cout 和 endl 标识符 存在于标准命名空间中 using namespace std;//定义了自…

springboot+vue+mybatis基于java web的公益网站的设计与实现+jsp+PPT+论文+讲解+售后

现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本公益网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&#xff0c;使…

AJ-Report一次排错处理

山重水复疑无路&#xff0c;柳暗花明又一村...... 新项目需要选型开源的AJ-Report&#xff0c;计划再次基础上进行二开。 官网地址&#xff1a; AJ-Report: AJ-Report是一个完全开源&#xff0c;拖拽编辑的可视化设计工具。三步快速完成大屏&#xff1a;配置数据源---->写…

力扣503. 下一个更大元素 II

Problem: 503. 下一个更大元素 II 文章目录 题目描述思路复杂度Code 题目描述 思路 由于此题是环形数组&#xff0c;我们在利用单调栈模板的基础上还需要将给定数组扩大一倍&#xff0c;但实际上我们只需要利用取余的操作模拟扩大数组即可&#xff08;具体操作看代码。在解决有…

Spring Boot集成shiro之使用redis缓存demo

1.背景 上次发了这篇文章《Spring Boot集成Shiro快速入门Demo》后&#xff0c;有网友“just.blue”后台反馈集成redis有点问题&#xff0c;今天特地把集成过程发出来 2.为什么要使用cache 用来减轻数据库的访问压力&#xff0c;从而提升查询效率。 3.Shiro使用Redis做缓存 …

【R语言】获取任意颜色的HTML 颜色代码、十六进制颜色代码、 RGB代码

网站来源&#xff1a; https://htmlcolorcodes.com/ 界面如下所示&#xff1a; 通过鼠标任意选择不同的颜色&#xff0c;就能获取该色的十六进制代码、RGB代码等。 除此之外&#xff0c;还提供了一些常用颜色的便捷选项,如下&#xff1a; 任意选择一种颜色&#xff0c;即可出…