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.rhkb.cn/news/337952.html

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

相关文章

如何获取SSL证书,消除网站不安全警告

获取SSL证书通常涉及以下几个步骤&#xff1a; 选择证书颁发机构&#xff08;CA&#xff09;&#xff1a; 你需要从受信任的SSL证书颁发机构中选择一个&#xff0c;比如DigiCert、GlobalSign、JoySSL等。部分云服务商如阿里云、腾讯云也提供免费或付费的SSL证书服务。 生成证…

电子烟开发【恒压、恒有效算法】

恒压算法 pwm是通过软件模拟的 pwm满值运行是250全占空比 #define D_TARGET_AVERAGE_VOLTAGE 3500 //R_ADC1_Vout &#xff1a;发热丝两端AD值 //R_ADC_FVR &#xff1a;电池电压AD值 //FVR_VOLTAGE &#xff1a;电池AD参考电压 满电值AD //R_Smk1Duty &#xff1a;最后…

uniapp创建支付密码实现(初始密码,第二次密码)

示例&#xff1a; 插件地址&#xff1a;自定义数字/身份证/密码输入框&#xff0c;键盘密码框可分离使 - DCloud 插件市场 1.下载插件并导入HBuilderX&#xff0c;找到文件夹&#xff0c;copy number-keyboard.vue一份为number-keyboard2.vue&#xff08;number-keyboard.vue是…

详细介绍运算符重载函数,清晰明了

祝各位六一快乐~ 前言 1.为什么要进行运算符重载&#xff1f; C中预定义的运算符的操作对象只能是基本数据类型。但实际上&#xff0c;对于许多用户自定义类型&#xff08;例如类&#xff09;&#xff0c;也需要类似的运算操作。这时就必须在C中重新定义这些运算符&#xff…

Centos 7 安装刻录至硬件服务器

前言 在日常测试中&#xff0c;会遇到很多安装的场景&#xff0c;今天给大家讲一下centos 7 的安装&#xff0c;希望对大家有所帮助。 一.下载镜像 地址如下&#xff1a; centos官方镜像下载地址https://www.centos.org/download/ 按照需求依次点击下载 二.镜像刻录 镜像刻…

C++语言·list链表(下)

还是之前说的&#xff0c;因为要写模板&#xff0c;为了避免链接出现问题&#xff0c;我们将所有内容都写到一个文件中去。首先就是画出链表的框架 链表本身只需要一个头节点就足以找到整条链表&#xff0c;而需要它拼接的节点我们再写一个模板。而我们知道list是一个带头双向循…

微信小程序对接发货功能

注&#xff1a;微信小程序对接发货功能 文档地址&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html php代码 common.php use think\Config; use think\Db; use fast\Http; us…

OrangePi AIpro 变身 Android 打包机

主板基本信息介绍 OrangePi AIpro&#xff0c;是香橙派联合华为精心打造&#xff0c;建设人工智能新生态而设计的一款开发板&#xff0c;这次为大家分享下我上手的这款 OrangePi AIpro 8GB&#xff08;算力达8TOPS&#xff09; 的一些小小的经验。 基本参数如下&#xff1a; …

【Keil 5】Keil 5下载安装激活到2032年(含MDK、C51、STM32单片机)+附带百度网盘链接

这里写目录标题 安装包、激活文件下载1.双击mdk 514开始安装2.一路点next&#xff0c;信息随便写即可3.激活4.安装STM325.激活c51 安装包、激活文件下载 解压密码&#xff1a;lantongxue 链接&#xff1a;https://pan.baidu.com/s/15Aukt0j1HCFyHBE6whuDeg?pwdsjyh 提取码&…

FreeRtos进阶——中断的内部逻辑

中断与非中断API的区别 BaseType_t xQueueSendToBack(QueueHandle_t xQueue,const void *pvItemToQueue,TickType_t xTicksToWait); BaseType_t xQueueSendToBackFromISR(QueueHandle_t xQueue,const void *pvItemToQueue,BaseType_t *pxHigherPriorityTaskWok…

OceanBase 内存研究(OceanBase 3.2.4.5)

内存结构 从官网的结构图可以看出&#xff0c;一台observer可使用的总内存(memory_limit)包括 系统内存(system_memory) 和 租户内存(sys租户与普通租户) 系统内存 系统内存system_memory 属于 observer 的内部内存&#xff0c;允许其它租户共享使用该内存资源 (root10.0.0.…

丛林生存法则其实就两个字:输出

不管你是在上班&#xff0c;还是在灵活就业&#xff0c;现在的大环境下&#xff0c;你要想活下来&#xff0c;生存下去&#xff0c;一定要记住这两个字&#xff1a;输出。如果你能记住更多的字&#xff0c;那便是持续高水平的输出。 你如果是大厂程序员&#xff0c;你肯定发现…

window安装ffmpeg播放本地摄像头视频

1、安装ffmpeg ffmpeg官方网站&#xff1a;FFmpeg 下载后解压文件夹名为ffmpeg 2、设置环境变量 目录 1、安装ffmpeg 设置环境变量 以F:\software\after\ffmpeg\bin为例 在命令行中输入ffmpeg出现下方代表安装成功 3、通过ffmpeg播放本地电脑摄像头 鼠标右击开始按钮&…

快速排序详讲(两种方法)

目录 原理 实现方式 正常实现 理由 先从右到左&#xff0c;在从左到右 先从左到右&#xff0c;先从右到左 挖坑法 效率 优化 测试 代码 原理 快速排序是将最左侧的数字当作关键数字&#xff0c;将关键数字放在对应位置&#xff0c;且关键数字左侧均大于它&#xff…

Spring Boot 开发 -- 过滤器与拦截器详解

引言 在Web开发中&#xff0c;经常需要对请求进行预处理或在响应后进行后处理&#xff0c;Spring Boot提供了过滤器和拦截器两种机制来实现这一需求。虽然它们都可以用来处理HTTP请求和响应&#xff0c;但在使用场景、执行顺序和配置方式上存在明显的差异。本文将详细讲解Spri…

江苏大信环境科技有限公司:环保领域的开拓者与引领者

2009 年&#xff0c;江苏大信环境科技有限公司在宜兴环保科技工业园成立。自创立之始&#xff0c;该公司便笃定坚守“诚信为本、以质量求生存、以创新谋发展”这一经营理念&#xff0c;全力以赴为客户构建专业的工业有机废气治理整体解决方案&#xff0c;进而成为国家高新技术企…

安全风险 - 组件导出风险

在安全审查中关于组件导出风险是一种常见问题&#xff0c;不同组件都有可能遇到这种问题&#xff0c;而且从一定角度来看的话&#xff0c;如果涉及到三方业务&#xff0c;基本处于无法解决的场景&#xff0c;所以我们需要说明为何无法避免这种风险 组件导出风险能不能规避&…

海康 面阵相机命名规则

海康 面阵相机命名规则 https://www.v-club.com/vCollage/vCollageDetail/516?subjectIdRMse6nPiyo

能不能接受这些坑?买电车前一定要看

图片来源&#xff1a;汽车之家 文 | Auto芯球 作者 | 雷慢 刚有个朋友告诉我&#xff0c;买了电车后感觉被骗了&#xff0c; 很多“坑”都是他买车后才知道的。 不提前研究&#xff0c;不做功课&#xff0c;放着我这个老司机不请教&#xff0c; 这个大冤种他不当谁当&…

Linux系统编程——动静态库

目录 一&#xff0c;关于动静态库 1.1 什么是库&#xff1f; 1.2 认识动静态库 1.3 动静态库特征 二&#xff0c;静态库 2.1 制作静态库 2.2 使用静态库 三&#xff0c;动态库 3.1 制作动态库 3.2 使用动态库一些问题 3.3 正确使用动态库三种方法 3.3.1 方法一&…