Redis数据类型(上篇)

news2024/12/26 11:13:21

前提:(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"

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

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

相关文章

【机器学习】模型、算法与数据—机器学习三要素

探索机器学习三要素&#xff1a;模型、算法与数据的交融之旅 一、模型&#xff1a;构建机器学习的基石二、算法&#xff1a;驱动模型学习的引擎三、数据&#xff1a;驱动机器学习的动力源泉四、代码实例&#xff1a;展示三要素的交融与碰撞 在数字时代的浪潮中&#xff0c;机器…

C++模板——函数模板和类模板

目录 泛型编程 函数模板 函数模板概念 函数模板的定义和语法 函数模板的工作原理 函数模板的实例化 隐式实例化 显示实例化 函数模板的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 什么是泛型编程&#xff1f; 泛型编程&#xff08;Generic Pr…

具身人工智能:人工智能机器人如何感知世界

什么是具身人工智能 虽然近年来机器人在智能城市、工厂和家庭中大量出现,但我们大部分时间都在与由传统手工算法控制的机器人互动。这些机器人的目标很狭隘,很少从周围环境中学习。相比之下,能够与物理环境互动并从中学习的人工智能 (AI) 代理(机器人、虚拟助手或其他智能系…

HCIP-Datacom-ARST自选题库_02_网络安全【道题】

一、单选题 1.关于网络安全性优化的内容&#xff0c;下列哪个选项是错误的? 管理安全 边界安全 访问控制 日志管理 2.如图所示&#xff0c;网络管理员为了抵御DHcP Server仿冒者攻击&#xff0c;在交换机上部署了DHcp snoping功能&#xff0c;那么以下哪一个接口应该被设…

【Java面试】二、Redis篇(中)

文章目录 1、Redis持久化1.1 RDB1.2 AOF1.3 RDB与AOF的对比 2、数据过期策略&#xff08;删除策略&#xff09;2.1 惰性删除2.2 定期删除 3、数据淘汰策略4、主从复制4.1 主从全量同步4.2 增量同步 5、哨兵模式5.1 服务状态监控5.2 哨兵选主规则5.3 哨兵模式下&#xff0c;Redi…

JMETER工具:以录制手机app为例

JMETER工具&#xff1a;以录制手机app为例子 JMETER安装和环境配置 pc需要安装jdk&#xff0c;并进行jdk的环境配置&#xff0c;安装好jdk并配置好后&#xff0c;通过命令行输入java –version出现以下界面就表示安装成功&#xff1a; &#xff08;对应的jdk版本不可太低&…

C++实现定长内存池

项目介绍 本项目实现的是一个高并发的内存池&#xff0c;它的原型是Google的一个开源项目tcmalloc&#xff0c;tcmalloc全称Thread-Caching Malloc&#xff0c;即线程缓存的malloc&#xff0c;实现了高效的多线程内存管理&#xff0c;用于替换系统的内存分配相关函数malloc和fr…

Mysql之主从同步

1.BinLog同步机制 Mysql要去保证高可用&#xff0c;或者去分担请求压力&#xff0c;一般会去主从部署&#xff0c;读写分离。写库只负责写&#xff0c;而读库更多的去承担读的请求&#xff0c;从库不写数据&#xff0c;数据从主库同步&#xff0c;那么到底是怎么同步的呢&…

【2024】HNCTF

Web Please_RCE_Me GET传参输入?moranflag&#xff0c;之后获取源码&#xff1a;<?php if($_GET[moran] flag){highlight_file(__FILE__);if(isset($_POST[task])&&isset($_POST[flag])){$str1 $_POST[task];$str2 $_POST[flag];if(preg_match(/system|eval|a…

【C#】未能加载文件或程序集“CefSharp.Core.Runtime.dll”或它的某一个依赖项。找不到指定的模块。

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景错误提示分析原因解决方法Chromium知识点相关文章 背景 最近在使…

RabbitMQ-默认读、写方式介绍

1、RabbitMQ简介 rabbitmq是一个开源的消息中间件&#xff0c;主要有以下用途&#xff0c;分别是&#xff1a; 应用解耦&#xff1a;通过使用RabbitMQ&#xff0c;不同的应用程序之间可以通过消息进行通信&#xff0c;从而降低应用程序之间的直接依赖性&#xff0c;提高系统的…

有什么普通人可以做的赚钱软件?盘点9个适合普通人长期做的软件

在这个互联网高速发展的时代&#xff0c;智能手机已经成为我们生活中不可分割的一部分。众多APP的涌现&#xff0c;使得许多朋友都在寻求通过手机赚钱的方法。 然而&#xff0c;面对市面上琳琅满目的网上赚钱APP&#xff0c;我们该如何挑选呢&#xff1f;别担心&#xff0c;今…

python web自动化(验证码处理)

1.解决验证码问题的常⻅⼏种⽅式 1&#xff09; Debug模式启动浏览器&#xff08;浏览器复⽤&#xff09;&#xff1a; 原理&#xff1a;浏览器是有缓存记录的&#xff0c;只需要 沿⽤已经保存有登录记录的浏览器 进⾏后续的操作就⾏ 2&#xff09;识别法&#xff1a; 原理…

pycharm中,出现SyntaxError: Non-ASCII character ‘\xe4‘ in file... 的问题以及解决方法

文章目录 一、问题描述二、解决方法 一、问题描述 在pycharm中&#xff0c;使用python中编写中文字符时&#xff0c;会提示如下错误信息&#xff1a; SyntaxError: Non-ASCII character \xe4 in file ...... on line 8, but no encoding declared; see http://python.org/dev…

网上比较受认可的赚钱软件有哪些?众多兼职选择中总有一个适合你

在这个互联网高速发展的时代&#xff0c;网上赚钱似乎成了一种潮流。但是&#xff0c;你是否还在靠运气寻找赚钱的机会&#xff1f;是否还在为找不到靠谱的兼职平台而苦恼&#xff1f; 今天&#xff0c;就为你揭秘那些真正靠谱的网上赚钱平台&#xff0c;让你的赚钱之路不再迷…

MySQL--InnoDB体系结构

目录 一、物理存储结构 二、表空间 1.数据表空间介绍 2.数据表空间迁移 3.共享表空间 4.临时表空间 5.undo表空间 三、InnoDB内存结构 1.innodb_buffer_pool 2.innodb_log_buffer 四、InnoDB 8.0结构图例 五、InnoDB重要参数 1.redo log刷新磁盘策略 2.刷盘方式&…

S1E45:单链表1 课后作业

测试题&#xff1a;0. 相比起数组来说&#xff0c;单链表具有哪些优势呢&#xff1f; 答&#xff1a;长度非固定&#xff0c;可以申请添加长度 答案&#xff1a;对于数组来说&#xff0c;随机插入或者删除其中间的某一个元素&#xff0c;都是需要大量的移动操作&#xff0c;而…

基于tcp实现自定义应用层协议

认识协议 协议&#xff08;Protocol&#xff09; 是一种通信规则或标准&#xff0c;用于定义通信双方或多方之间如何交互和传输数据。在计算机网络和通信系统中&#xff0c;协议规定了通信实体之间信息交换的格式、顺序、定时以及有关同步等事宜的约定。简易来说协议就是通信…

网络工程师---第三十八天

ISIS&#xff1a; ISIS含义&#xff1a;中间系统到中间系统IS-IS。 ISIS特点&#xff1a;①内部网关协议IGP&#xff08;Interior Gateway Protocol&#xff09;&#xff0c;用于自治系统内部&#xff1b; ②IS-IS也是一种链路状态协议&#xff0c;使用最短路径优先SPF算法进…

电子阅览室在管理时需注意什么

关于如今的绝大多数人来说&#xff0c;想必都听说过“电子阅览室”这一概念。它首要运用在校园中&#xff0c;给学生们供给愈加丰厚的常识储藏。它也是一个独立的局域网&#xff0c;在校园网络中作为重要的一个组成部分而存在。但是&#xff0c;一个好的电子阅览室是需求满意运…