当前位置: 首页 > news >正文

10.Redis 数据类型

Redis 数据类型

  • Redis 数据类型
    • 1. 字符串 string
      • 1.1 创建一个key
      • 1.2 查看一个key的值
      • 1.3 删除key
      • 1.4 批量设置多个key
      • 1.5 批量获取多个key
      • 1.6 追加key的数据
      • 1.7 设置新值并返回旧值
      • 1.8 返回字符串 key 对应值的字节数
      • 1.9 判断 key 是否存在
      • 1.10 获取 key 的过期时长
      • 1.11 重置key的过期时长
      • 1.12 取消key的期限
      • 1.13 数字递增
      • 1.14 数字递减
      • 1.15 数字增加
      • 1.16 数字减少
    • 2. 列表 list
      • 2.1 创建列表和数据
      • 2.2 列表追加新数据
      • 2.3 获取列表长度(元素个数)
      • 2.4 获取列表指定位置元素数据
      • 2.5 修改列表指定索引值
      • 2.6 删除列表数据
    • 3. 集合 set
      • 3.1 创建集合
      • 3.2 集合中追加数据
      • 3.3 获取集合的所有数据
      • 3.4 删除集合中的元素
      • 3.5 取集合的交集
      • 3.6 取集合的并集
      • 3.7 取集合的差集
    • 4. 有序集合 sorted set
      • 4.1 创建有序集合
      • 4.2 查看集合的成员个数
      • 4.3 基于索引查找数据
      • 4.4 获取分数
      • 4.5 删除元素
      • 4.6 实现排名
      • 4.7 查询指定数据的排名
    • 5. 哈希 hash
      • 5.1 创建 hash
      • 5.2 查看hash的指定field的value
      • 5.3 删除hash 的指定的 field/value
      • 5.4 批量设置hash key的多个field和value
      • 5.5 批量查看hash指定field的value
      • 5.6 查看hash的所有field
      • 5.7 查看hash 所有value
      • 5.7 查看指定 hash的所有field及value
      • 5.8 删除 hash

Redis 数据类型

1. 字符串 string

字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任 意类型的数据,例如: 一张JPEG格式的图片或者一个序列化的Ruby对象。一个字符串类型的值最多能 存储512M字节的内容。Redis 中所有 key 都是字符串类型的。此数据类型最为常用

1.1 创建一个key

set 指令可以创建一个key 并赋值

如果 key 已经持有其他值, SET 就覆写旧值, 无视类型。当 SET 命令对一个带有生存时间(TTL)的键进行设置之后, 该键原有的 TTL 将被清除。、Key 大小写敏感从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:
EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。
PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX 
milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行SETNX key value 。
XX : 只在键已经存在时, 才对键进行设置操作。# 不论key是否存在.都设置
127.0.0.1:6379> set name munan
OK
127.0.0.1:6379> get name
"munan"
127.0.0.1:6379> type name # 判断类型 
string127.0.0.1:6379> set age 18 ex 3 # 设置自动过期时间3s
OK
127.0.0.1:6379> get age # 3s后再查看值不存在
(nil)# key不存在,才设置,相当于add
127.0.0.1:6379> get title
(nil)
127.0.0.1:6379> setnx title good  # set key value  nx
(integer) 1# key存在,才设置,相当于update
127.0.0.1:6379> get title
"good"
127.0.0.1:6379> set title better xx
OK
127.0.0.1:6379> get title
"better"

1.2 查看一个key的值

127.0.0.1:6379> get title
"better"

1.3 删除key

127.0.0.1:6379> del title
(integer) 1
127.0.0.1:6379> get title
(nil)

1.4 批量设置多个key

127.0.0.1:6379> mset name zhang age 18
OK

1.5 批量获取多个key

127.0.0.1:6379> mget name age
1) "zhang"
2) "18"127.0.0.1:6379> keys *

1.6 追加key的数据

127.0.0.1:6379> get name
"zhang"
127.0.0.1:6379> append name " mu nan"
(integer) 12
127.0.0.1:6379> get name
"zhang mu nan"

1.7 设置新值并返回旧值

127.0.0.1:6379> set car BYD
OK
127.0.0.1:6379> getset car xiaomi
"BYD"
127.0.0.1:6379> get car
"xiaomi"

1.8 返回字符串 key 对应值的字节数

127.0.0.1:6379> get car
"xiaomi"
127.0.0.1:6379> strlen car
(integer) 6127.0.0.1:6379> set grade 六
OK
127.0.0.1:6379> get grade
"\xe5\x85\xad"
127.0.0.1:6379> strlen grade
(integer) 3

1.9 判断 key 是否存在

127.0.0.1:6379> exists name
(integer) 1

1.10 获取 key 的过期时长

127.0.0.1:6379> ttl name 
(integer) -1
127.0.0.1:6379> ttl a
(integer) -2
127.0.0.1:6379> set bag hello ex 50
OK
127.0.0.1:6379> ttl bag
(integer) 44# ttl key 查看key的剩余生存时间,如果key过期后,会自动删除-1  # 返回值表示永不过期,默认创建的key是永不过期,重新对key赋值,也会从有剩余生命周期变成永不过期
-2  # 返回值表示没有此key
num # key的剩余有效期

1.11 重置key的过期时长

127.0.0.1:6379> set bag hello ex 50
OK
127.0.0.1:6379> ttl bag
(integer) 41
127.0.0.1:6379> expire bag 100
(integer) 1
127.0.0.1:6379> ttl bag
(integer) 98

1.12 取消key的期限

127.0.0.1:6379> ttl bag
(integer) 60
127.0.0.1:6379> persist bag
(integer) 1
127.0.0.1:6379> ttl bag
(integer) -1

1.13 数字递增

# 利用INCR命令簇(INCR, DECR, INCRBY,DECRBY)来把字符串当作原子计数器使用
127.0.0.1:6379> set num 0  # 设置初始值
OK
127.0.0.1:6379> get num
"0"
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> get num
"1"

1.14 数字递减

127.0.0.1:6379> get num
"1"
127.0.0.1:6379> decr num
(integer) 0
127.0.0.1:6379> get num
"0"

1.15 数字增加

# 可以增加数值(也减小增加) 如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。127.0.0.1:6379> get num
"0"
127.0.0.1:6379> incrby num 10
(integer) 10
127.0.0.1:6379> get num
"10"
127.0.0.1:6379> incrby num -5
(integer) 5
127.0.0.1:6379> get num
"5"

1.16 数字减少

# decrby 可以减小数值(也可以增加)127.0.0.1:6379> get num
"5"
127.0.0.1:6379> decrby num 3
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> decrby num -5
(integer) 7
127.0.0.1:6379> get num
"7"

2. 列表 list

Redis列表实际就是简单的字符串数组,按照插入顺序进行排序

支持双向读写,可以添加一个元素到列表的头部(左边)或者尾部(右边),一个列表最多可以包含 2^32-1=4294967295个元素

每个列表元素用下标来标识,下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推

也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,元素值可以重复,常用于存入日志等场景,此数据类型比较常用

列表特点

  • 有序
  • 可重复
  • 左右都可以操作

2.1 创建列表和数据

LPUSH和RPUSH都可以插入列表# LPUSH
将一个或多个值 value 插入到列表 key 的表头(最左边)如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 
mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH 
mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作当 key 存在但不是列表类型时,返回一个错误# RPUSH
将一个或多个值 value 插入到列表 key 的表尾(最右边)如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作当 key 存在但不是列表类型时,返回一个错误# 从左边添加数据,已添加的需向右移
127.0.0.1:6379> lpush  box  1 2 3 4
(integer) 4
127.0.0.1:6379> type box
list# 从右边添加数据,已添加的向左移
127.0.0.1:6379> rpush bug  1 2 3 4
(integer) 4
127.0.0.1:6379> type bug
list

2.2 列表追加新数据

127.0.0.1:6379> lpush box 5
(integer) 5
127.0.0.1:6379> rpush bug 5
(integer) 5

2.3 获取列表长度(元素个数)

127.0.0.1:6379> llen box
(integer) 5

2.4 获取列表指定位置元素数据

127.0.0.1:6379> lindex box 0  # 获取0编号的元素
"5"
127.0.0.1:6379> lindex box -1 # 获取最后一个的元素
"1"
127.0.0.1:6379> lrange box 0 -1 # 获取所有元素
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"127.0.0.1:6379> lrange bug 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

2.5 修改列表指定索引值

127.0.0.1:6379> lrange bug 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> lset bug 2 22
OK
127.0.0.1:6379> lrange bug 0 -1
1) "1"
2) "2"
3) "22"
4) "4"
5) "5"

2.6 删除列表数据

127.0.0.1:6379> lrange box 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lpop box  # 弹出左边第一个元素,即删除第一个
"5"
127.0.0.1:6379> rpop box  # 弹出右边第一个元素,即删除最后一个
"1"
127.0.0.1:6379> lrange box 0 -1
1) "4"
2) "3"
3) "2"#LTRIM  对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
127.0.0.1:6379> lrange bug 0 -1
1) "1"
2) "2"
3) "22"
4) "4"
5) "5"
127.0.0.1:6379> ltrim bug 1 3
OK
127.0.0.1:6379> llen bug
(integer) 3
127.0.0.1:6379> lrange bug 0 -1
1) "2"
2) "22"
3) "4"# 删除list
127.0.0.1:6379> del bug
(integer) 1
127.0.0.1:6379> exists bug
(integer) 0

3. 集合 set

Set 是一个无序的字符串合集

同一个集合中的每个元素是唯一无重复的

支持在两个不同的集合中对数据进行逻辑处理,常用于取交集,并集,统计等场景,例如: 实现共同的朋友

集合特点

  • 无序
  • 无重复
  • 集合间操作

3.1 创建集合

127.0.0.1:6379> sadd set1 s1 s2 s3
(integer) 3
127.0.0.1:6379> type set1
set

3.2 集合中追加数据

# 追加时,只能追加不存在的数据,不能追加已经存在的数值
127.0.0.1:6379> sadd set1 s4 s5 s6
(integer) 3

3.3 获取集合的所有数据

127.0.0.1:6379> smembers set1
1) "s1"
2) "s2"
3) "s3"
4) "s4"
5) "s5"
6) "s6"

3.4 删除集合中的元素

127.0.0.1:6379> srem set1 s6
(integer) 1
127.0.0.1:6379> smembers set1
1) "s1"
2) "s2"
3) "s3"
4) "s4"
5) "s5"

3.5 取集合的交集

交集:同时属于集合A且属于集合B的元素

可以实现共同的朋友

127.0.0.1:6379> sadd set2 s4 s5 s6 s7 s8
(integer) 5
127.0.0.1:6379> smembers set1
1) "s1"
2) "s2"
3) "s3"
4) "s4"
5) "s5"
127.0.0.1:6379> smembers set2
1) "s4"
2) "s5"
3) "s6"
4) "s7"
5) "s8"127.0.0.1:6379> sinter set1 set2
1) "s4"
2) "s5"

3.6 取集合的并集

并集:属于集合A或者属于集合B的元素

127.0.0.1:6379> sunion set1 set2
1) "s1"
2) "s2"
3) "s3"
4) "s4"
5) "s5"
6) "s6"
7) "s7"
8) "s8"

3.7 取集合的差集

差集:属于集合A但不属于集合B的元素

可以实现我的朋友的朋友

127.0.0.1:6379> sdiff set1 set2
1) "s1"
2) "s2"
3) "s3"
127.0.0.1:6379> sdiff set2 set1
1) "s6"
2) "s7"
3) "s8"

4. 有序集合 sorted set

Redis有序集合和Redis集合类似,是不包含相同字符串的合集。

它们的差别是,每个有序集合的成员都关联着一个双精度浮点型的评分

这个评分用于把有序集合中的成员按最低分到最高分排序。

有序集合的成员不能重复,但评分可以重复,一个有序集合中最多的成员数为 2^32 - 1=4294967295个, 经常用于排行榜的场景

有序集合特点

  • 有序
  • 无重复元素
  • 每个元素是由score和value组成
  • score 可以重复
  • value 不可以重复

4.1 创建有序集合

127.0.0.1:6379> zadd zset1 1 z1
(integer) 1
127.0.0.1:6379> zadd zset1 2 z2 3 z3 
(integer) 2
127.0.0.1:6379> type zset1
zset

4.2 查看集合的成员个数

127.0.0.1:6379> zcard zset1
(integer) 3

4.3 基于索引查找数据

127.0.0.1:6379> zrange zset1 0 2
1) "z1"
2) "z2"
3) "z3"

4.4 获取分数

127.0.0.1:6379> zscore zset1 z2
"2"

4.5 删除元素

127.0.0.1:6379> zrange zset1 0 -1
1) "z1"
2) "z2"
3) "z3"
127.0.0.1:6379> zrem zset1 z2
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1
1) "z1"
2) "z3"

4.6 实现排名

127.0.0.1:6379> zadd course 99 linux 88 python 77 go 66 java 55 c
(integer) 5
127.0.0.1:6379> zrange course 0 -1 withscores # 正序排序后显示集合内所有的key,按score从小到大显示并显示指定集合内所有key和得分情况1) "c"2) "55"3) "java"4) "66"5) "go"6) "77"7) "python"8) "88"9) "linux"
10) "99"
127.0.0.1:6379> zrevrange course 0 -1 withscores  # 倒序排序后显示集合内所有的key,score从大到小显示并显示指定集合内所有key和得分情况1) "linux"2) "99"3) "python"4) "88"5) "go"6) "77"7) "java"8) "66"9) "c"
10) "55"

4.7 查询指定数据的排名

127.0.0.1:6379> zrange course 0 -1
1) "c"
2) "java"
3) "go"
4) "python"
5) "linux"
127.0.0.1:6379> zrank course python
(integer) 3  # 第4个

5. 哈希 hash

hash 即字典, 用于保存字符串字段field和字符串值value之间的映射,即key/value做为数据部分

hash特别适合用于存储对象场景

一个hash最多可以包含2^32-1 个key/value键值对

哈希特点

  • 无序
  • K/V 对
  • 适用于存放相关的数据

5.1 创建 hash

将哈希表 hash 中域 field 的值设置为 value 如果给定的哈希表并不存在, 那么一个新的哈希表将被创建并执行 HSET 操作。如果域 field 已经存在于哈希表中, 那么它的旧值将被新值 value 覆盖。127.0.0.1:6379> hset h1 name zhang age 18
(integer) 2
127.0.0.1:6379> type h1
hash# 查看所有字段的值
127.0.0.1:6379> hgetall h1
1) "name"
2) "zhang"
3) "age"
4) "18"# 增加字段
127.0.0.1:6379> hset h1 gender man
(integer) 1
127.0.0.1:6379> hgetall h1
1) "name"
2) "zhang"
3) "age"
4) "18"
5) "gender"
6) "man"

5.2 查看hash的指定field的value

127.0.0.1:6379> hget h1 age
"18"# 获取多个值
127.0.0.1:6379> hmget h1 name age
1) "zhang"
2) "18"

5.3 删除hash 的指定的 field/value

127.0.0.1:6379> hgetall h1
1) "name"
2) "zhang"
3) "age"
4) "18"
5) "gender"
6) "man"
127.0.0.1:6379> hdel h1 gender
(integer) 1
127.0.0.1:6379> hgetall h1
1) "name"
2) "zhang"
3) "age"
4) "18"

5.4 批量设置hash key的多个field和value

127.0.0.1:6379> hmset h2 name shi age 22 city hangzhou gender man
OK
127.0.0.1:6379> hgetall h2
1) "name"
2) "shi"
3) "age"
4) "22"
5) "city"
6) "hangzhou"
7) "gender"
8) "man"

5.5 批量查看hash指定field的value

127.0.0.1:6379> hmget h2 name city gender
1) "shi"
2) "hangzhou"
3) "man"

5.6 查看hash的所有field

127.0.0.1:6379> hkeys h1
1) "name"
2) "age"

5.7 查看hash 所有value

127.0.0.1:6379> hvals h1
1) "zhang"
2) "18"

5.7 查看指定 hash的所有field及value

127.0.0.1:6379> hgetall h1
1) "name"
2) "zhang"
3) "age"
4) "18"

5.8 删除 hash

127.0.0.1:6379> del h1
(integer) 1
127.0.0.1:6379> exists h1
(integer) 0
http://www.dtcms.com/a/312710.html

相关文章:

  • Back to the Features中,直观物理的评价指标是什么,计算方式是什么
  • 5 进入 CD 的世界
  • Thread 类的基本用法
  • 蛇形卷积介绍
  • Spring Cloud微服务中的内存泄漏问题定位与解决方案
  • 【Unity】背包系统 + 物品管理窗口 (上)
  • 7.13.B+树
  • 【机器学习】线性回归算法详解:线性回归、岭回归、Lasso回归与Elastic Net
  • [AI8051U入门第十四步]W5500实现UDP通信
  • 第六章第三节 TIM 输出比较
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各类垃圾的分类检测识别(C#代码UI界面版)
  • 学习游戏制作记录(实现克隆攻击的克隆复制和水晶代替克隆)8.3
  • 机器学习——下采样(UnderSampling),解决类别不平衡问题,案例:逻辑回归 信用卡欺诈检测
  • LangChain缓冲记忆组件的使用与解析
  • 决策树学习全解析:从理论到实战
  • 数据结构:在链表中插入节点(Inserting in a Linked List)
  • 回归的wry
  • 浅谈Python中的os.environ:环境变量交互机制
  • Uniapp一根数据线实现真机调试运行【uniapp如何把项目运行在手机上】
  • io_submit系统调用及示例
  • 基于springboot的在线考试系统/考试信息管理平台
  • Suno的100个高质量歌词元标签(MetaTags)详解与使用指南
  • SpringBoot3.x入门到精通系列:2.4 RESTful API设计
  • 电脑声音标志显示红叉的原因
  • Spring Batch的2种STEP定义方式
  • spring-ai-alibaba 学习(二十)——graph之检查点
  • VUE2 学习笔记16 插槽、Vuex
  • 大屏项目展示
  • python学智能算法(三十一)|SVM-Slater条件理解
  • 【MySQL进阶】------MySQL程序