Redis(08)数据类型总结

一,redis通用命令

通用指令是部分数据类型的,都可以使用的指令,常见的有

命令作用
KEYS查看符合模板的所有key
DEL删除一个指定的key
EXISTS判断key是否存在
EXPIRE给一个key设置有效期,有效期到期时该key会被自动删除
TTL查看一个KEY的剩余有效期
select nums切换数据库,redis默认有16个数据库,默认使用0号数据库
dbsize产看当前数据库key的数量
flushdb清空当前库
flushall清空所有的库

通过help [command] 可以查看一个命令的具体用法,例如:

在这里插入图片描述

127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> type name
string
127.0.0.1:6379> expire name 10 #设置10s到期时间
(integer) 1
127.0.0.1:6379> exists name #10s后过期了
(integer) 0
127.0.0.1:6379> keys *   #在查看当前数据库所有的key,发现无了
(empty list or set)

二,redis数据类型

1. String类型

string类型详细介绍

String 类型,也就是字符串类型,是Redist 中最简单的存储类型。 其value 是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string :普通字符串
  • int:整数类型,可以做自增、自减操作
  • float 浮点类型,可以做自增、自减操作

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.

1.1 String类型常见的命令

命令作用
SET添加或者修改已经存在的一个string类型的键值对
GET根据key获取string类型的value
MSET批量添加多个string类型的键值对
MGET根据多个key获取多个string类型的value
INCR让一个整型的key自增
INCRBY让一个整型的key自增并且指定步长
INCRBYFLOAT让一个浮点类型的数字自增并指定步长
SETNX添加一个string类型的键值对,前提是这个key不存在,否则不执行
SETEX添加一个string类型的键值对,并且指定有效期
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> get name
"thenie"
127.0.0.1:6379> get age
"18"
127.0.0.1:6379> append name Shuai  #向指定字符串后加Shuai
(integer) 11
127.0.0.1:6379> get name
"thenieShuai"
127.0.0.1:6379> DECR age #自减
(integer) 17
127.0.0.1:6379> INCR age #自增
(integer) 18
127.0.0.1:6379> DECRBY age 5 #指定减少
(integer) 13
127.0.0.1:6379> INCRBY age 5
(integer) 18
127.0.0.1:6379> STRLEN age #返回字符串长度
(integer) 2
127.0.0.1:6379> getrange name 0 -1 #返回完整字符串
"thenieShuai"
127.0.0.1:6379> getrange name 0 6 #返回下标为0~6的字符串
"thenieS"
127.0.0.1:6379> setrange name 6 Haokan #从6的位置开始用Haokan进行覆盖
(integer) 12
127.0.0.1:6379> get name
"thenieHaokan"
127.0.0.1:6379> GETSET name kuaijieshule #返回name的值,并进行指定的修改
"thenieHaokan"
127.0.0.1:6379> GET name
"kuaijieshule"
127.0.0.1:6379> setnx name ,  #创建,失败,因为存在key为name
(integer) 0
127.0.0.1:6379> get name
"kuaijieshule"

2. Hash类型

hash类型详细介绍

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

在这里插入图片描述

2.1 hash类型常见的命令

命令作用
HSET key field value添加或者修改hash类型key的field的值
HGET key field获取一个hash类型key的field的值
HMSET批量添加多个hash类型key的field的值
HMGET批量获取多个hash类型key的field的值
HGETALL获取一个hash类型的key中所有的field和value
HKEYS获取一个hash类型的key中的所有的field
HVALS获取一个hash类型的key中的所有的value
HINCRBY让一个hash类型的key的字段值自增并指定步长
HSETNX添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

HSET key field value 添加或者修改hash类型key的field的值

127.0.0.1:6379> HSET buba:user:3 name bilal
(integer) 1
127.0.0.1:6379> HSET buba:user:3 age 21
(integer) 1

HGET key field 获取一个hash类型key的field的值

127.0.0.1:6379> HGET buba:user:3 name
"bilal"
127.0.0.1:6379> HGET buba:user:3 age
"21"

HMSET 批量添加多个hash类型key的field的值

127.0.0.1:6379> HMSET buba:user:4 name bilal age 18 sex man
OK

HMGET 批量获取多个hash类型key的field的值

127.0.0.1:6379> HMGET buba:user:4 name age sex
1) "bilal"
2) "18"
3) "man"

HGETALL 获取一个hash类型的key中所有的field和value

127.0.0.1:6379> HGETALL buba:user:4
1) "name"
2) "bilal"
3) "age"
4) "18"
5) "sex"
6) "man"

HKEYS:获取一个hash类型的key中的所有的field

127.0.0.1:6379> HKEYS buba:user:4
1) "name"
2) "age"
3) "sex"

HVALS:获取一个hash类型的key中的所有的value

127.0.0.1:6379> HVALS buba:user:4
1) "bilal"
2) "18"
3) "man"

HINCRBY :让一个hash类型的key的字段值自增并指定步长

127.0.0.1:6379> HINCRBY buba:user:4 age 4
(integer) 22
127.0.0.1:6379> HVALS buba:user:4
1) "bilal"
2) "22"
3) "man"

HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

127.0.0.1:6379> HSETNX buba:user:4 sex woman
(integer) 0
127.0.0.1:6379> HSETNX buba:user:3 sex woman
(integer) 1
127.0.0.1:6379> HGETALL buba:user:3
1) "name"
2) "bilal"
3) "age"
4) "21"
5) "sex"
6) "woman"

3. List 类型

list详细介绍

Redist 中的List类型与Java中的LinkedList 类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索,列表,可以经过规则定义将其变为队列、栈、双端队列等

在这里插入图片描述

3.1 List类型的常见命令

正如图Redis中List是可以进行双端操作的,所以命令也就分为了LXXX和RLLL两类,有时候L也表示List例如LLEN

命令作用
LPUSH key element…向列表左侧插入一个后多个元素
LPOP key移除并返回列表左侧的第一个元素,没有返回nil
RPUSH key向列表右侧插入一个或多个元素
RPOP key移除并返回列表右侧的第一个元素
LRENGE key star end返回一段角标范围的所有元素
BLPOP HE BRPOP与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是返回nil
LLEN查看列表长度
LTRIM通过下标截取指定范围内的列表
LINSERT key BEFORE | AFTER pivot value在指定列表元素的前/后 插入value

LPUSH key element… :向列表左侧插入一个后多个元素

LRENGE key star end : 返回一段角标范围的所有元素

127.0.0.1:6379> LPUSH users 1 2 3
(integer) 3
127.0.0.1:6379> LRANGE users 0 -1
1) "3"
2) "2"
3) "1"

LPOP key :移除并返回列表左侧的第一个元素,没有返回nil

127.0.0.1:6379> LPOP users 
"3"
127.0.0.1:6379> LRANGE users 0 -1
1) "2"
2) "1"

RPUSH key :向列表右侧插入一个或多个元素

127.0.0.1:6379> RPUSH users 4 5 6
(integer) 5
127.0.0.1:6379> LRANGE users 0 -1
1) "2"
2) "1"
3) "4"
4) "5"
5) "6"

RPOP key :移除并返回列表右侧的第一个元素

127.0.0.1:6379> RPOP users
"6"
127.0.0.1:6379> LRANGE users 0 -1
1) "2"
2) "1"
3) "4"
4) "5"

LTRIM:通过下标截取指定范围内的列表

127.0.0.1:6379> LRANGE users 0 -1
1) "2"
2) "1"
3) "4"
4) "5"
127.0.0.1:6379> LTRIM users 1 2
OK
127.0.0.1:6379> LRANGE users 0 -1
1) "1"
2) "4"

LINSERT key BEFORE | AFTER pivot value:在指定列表元素的前/后 插入value (before)

127.0.0.1:6379> LRANGE users 0 -1
1) "1"
2) "4"
127.0.0.1:6379> LINSERT users before 1 *
(integer) 3
127.0.0.1:6379> LRANGE users 0 -1
1) "*"
2) "1"
3) "4"

LINSERT key BEFORE | AFTER pivot value:在指定列表元素的前/后 插入value (after)

127.0.0.1:6379> LRANGE users 0 -1
1) "*"
2) "1"
3) "4"
127.0.0.1:6379> LINSERT users after 1 *
(integer) 4
127.0.0.1:6379> LRANGE users 0 -1
1) "*"
2) "1"
3) "*"
4) "4"

4. set类型

set详细介绍

Redis set 对外提供的功能与list类似,是一个列表的功能

特点

set是可以自动排重的,
    当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的

    redis的Set是String类型的无序集合,它底层其实是一个value为null的hash表,所以添加、删除、查找的复杂度都是O(1)

    一个算法,随着数据的增加,执行时间的长短,如果是O(1),数据增加,查找数据的时间不变

4.1 set常见命令有

指令作用
[SADD key member1 member2]向set集合添加一个或多个成员
[SREM key member1 member2]移除set中的指定元素
SCARD key返回set中元素的个数
SISMEMBER key member判断一个元素是否存在于set中
SMEMBERS key获取set中的所有元素
[SINTER key1 key2]求key1和key2的交集
[SDIFF key1 key2]求key1和key2的差集
[SUNION key1 key2]求key1和key2的并集

[SADD key member1 member2] 向set集合添加一个或多个成员

SMEMBERS key 获取set中的所有元素

127.0.0.1:6379> SADD s1 a b c
(integer) 3
127.0.0.1:6379> SMEMBERS s1
1) "c"
2) "a"
3) "b"

[SREM key member1 [member2]]( 移除set中的指定元素

127.0.0.1:6379> SREM s1 a
(integer) 1
127.0.0.1:6379> SMEMBERS s1
1) "c"
2) "b"

SCARD key 返回set中元素的个数

127.0.0.1:6379> SCARD s1
(integer) 2

SISMEMBER key member 判断一个元素是否存在于set中

127.0.0.1:6379> SMEMBERS s1
1) "c"
2) "b"
127.0.0.1:6379> SISMEMBER s1 a
(integer) 0
127.0.0.1:6379> SISMEMBER s1 b
(integer) 1
  • [SDIFF key1 key2] 求key1和key2的差集
  • [SINTER key1 key2] 求key1和key2的交集

在这里插入图片描述

s1和s2的差集是 A , s1和s2的交集是 B C

4.2案例 set命令练习

将下列数据用Redis 的Set集合来存储

  • 张三的好友有:李四、王五、赵六
  • 李四的好友有:王五、麻子、二狗

利用Set的命令实现下列功能:

  • 计算张三的好友有几人 (SCARD)
  • 计算张三和李四有哪些共同好友 (SINTER)
  • 查询哪些人是张三的好友却不是李四的好友 (SDIFF)
  • 查询张三和李四的好友总共有哪些人 (SUNION)
  • 判断李四是否是张三的好友 (SISMEMBER)
  • 判断张三是否是李四的好友 (SISMEMBER)
  • 将李四从张三的好友列表中移除(SREM)
127.0.0.1:6379> sadd zs lisi wangwu zhaoliu  #张三的好友有:李四、王五、赵六
(integer) 3
127.0.0.1:6379> sadd ls wangwu mazi ergou	#李四的好友有:王五、麻子、二狗
(integer) 3
127.0.0.1:6379> SCARD zs					#计算张三的好友有几人
(integer) 3
127.0.0.1:6379> SINTER zs ls				#计算张三和李四有哪些共同好友
1) "wangwu"
127.0.0.1:6379> SDIFF zs ls					#查询哪些人是张三的好友却不是李四的好友
1) "zhaoliu"
2) "lisi"
127.0.0.1:6379> SUNION za ls				#查询张三和李四的好友总共有哪些人
1) "ergou"
2) "wangwu"
3) "mazi"
127.0.0.1:6379> SISMEMBER zs lisi			#判断李四是否是张三的好友
(integer) 1
127.0.0.1:6379> SISMEMBER ls zhangsan		#判断张三是否是李四的好友
(integer) 0
127.0.0.1:6379> SREM zs lisi				#将李四从张三的好友列表中移除
(integer) 1
127.0.0.1:6379> SMEMBERS zs					#获取张三的所有好友
1) "zhaoliu"
2) "wangwu"

5. SortedSet类型

zsat详细介绍

sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性。

Redis 的 SortedSet 类型是 String 类型的有序不重复集合,与 Java 中的 TreeSet 有些类似,但是底层数据结构却差别很大。SortedSet 中的每个元素都维护着一个 score 属性,可以基于 score 属性对元素进行排序,底层实现是跳表 + 哈希表 。

应用场景:

  • 因为 SortedSet 类型的有序不重复的特点,经常被用来实现排行榜这样的功能。

5.1 SortedSet的常见命令有

指令作用
ZADD key score member添加一个或多个元素到sorted sat,如果已经存在则更新其score值
ZREM key member删除sorted sat中的一个指定元素
ZSCORE key member获取sorted sat中的指定元素的score值
ZRANK key member获取sorted sat中的指定元素的排名
ZCARD key获取sorted sat中的元素个数
ZCOUNT key min max统计score值在给定范围内的所有元素的个数
ZINCRBT key increment member让sorted sat中的指定元素自增,步长为指定的increment值
ZRANGE key min max按照score排序后,获取指定范围内的元素
ZRANGEBYSCORE key min max按照score排序后,获取指定score范围内的元素
ZDIFF , ZINTER , ZUNION求差集,交集,并集

注意: 所有的排序默认都是升序,如果要降序则在命令的Z后面添加REV即可

zadd:添加多个score/member对到键为key的有序集合中,如果member存在,则更新score。语法:ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

127.0.0.1:6379> zadd fruit 50 apple 40 orange 80 balana
(integer) 3

zrem:删除有序集合中指定的元素。语法:ZREM key member [member ...]

127.0.0.1:6379> zrem yy xxoo
(integer) 1
127.0.0.1:6379> zrange yy 0 -1
1) "666"
2) "ooxx"
3) "xoox"
4) "oxxo"

zscore:返回有序集合中member对应的score。语法:ZSCORE key member

127.0.0.1:6379> ZADD fruit 50 apple 40 orange 80 banana
(integer) 3
127.0.0.1:6379> ZSCORE fruit banana
"80"

zrank:返回member在有序集合中从小到大的排名。语法:ZRANK key member

127.0.0.1:6379> ZADD fruit 50 apple 40 orange 80 banana
127.0.0.1:6379> ZRANK fruit orange
(integer) 0
127.0.0.1:6379> ZRANK fruit apple
(integer) 1
127.0.0.1:6379> ZRANK fruit banana
(integer) 2

zcard:返回有序集合中元素的个数。语法:ZCARD key

127.0.0.1:6379> ZADD fruit 50 apple 40 orange 80 banana
127.0.0.1:6379> zcard fruit
(integer) 3

zcount:统计score值在给定范围内的所有元素的个数。语法:ZCOUNT key min max

127.0.0.1:6379> ZADD fruit 50 apple 40 orange 80 banana
127.0.0.1:6379> ZCOUNT fruit 45 65
(integer) 1
127.0.0.1:6379> ZCOUNT fruit 40 60
(integer) 2

ZINCRBT: 让sorted sat中的指定元素自增,步长为指定的increment值

127.0.0.1:6379> ZADD fruit 50 apple 40 orange 80 banana
127.0.0.1:6379> ZINCRBY fruit 5 banana
"85"
127.0.0.1:6379> zrange fruit 0 -1 withscores
1) "orange"
2) "40"
3) "apple"
4) "50"
5) "banana"
6) "85"

ZRANGE:按照score排序后,获取指定范围内的元素。语法:ZRANGE key start stop [WITHSCORES]

127.0.0.1:6379> ZADD fruit 50 apple 40 orange 85 banana
127.0.0.1:6379> ZRANGE fruit 0 1
1) "orange"
2) "apple"
127.0.0.1:6379> ZRANGE fruit 0 2
1) "orange"
2) "apple"
3) "banana"
127.0.0.1:6379> ZRANGE fruit 0 3
1) "orange"
2) "apple"
3) "banana"
127.0.0.1:6379> zrange fruit 0 -1
1) "orange"
2) "apple"
3) "banana"
127.0.0.1:6379> zrange fruit 0 -1 withscores
1) "orange"
2) "40"
3) "apple"
4) "50"
5) "banana"
6) "85"

ZRANGEBYSCORE : 按照score排序后,获取指定score范围内的元素

127.0.0.1:6379> ZADD fruit 50 apple 40 orange 85 banana
127.0.0.1:6379> ZRANGEBYSCORE fruit 30 70
1) "orange"
2) "apple"
127.0.0.1:6379> ZRANGEBYSCORE fruit 30 70 WITHSCORES
1) "orange"
2) "40"
3) "apple"
4) "50"

ZREM : 删除sorted sat中的一个指定元素 语法:ZREM key member [member ...]

127.0.0.1:6379> ZADD fruit 50 apple 40 orange 85 banana
127.0.0.1:6379> zrem fruit banana
(integer) 1
127.0.0.1:6379> ZRANGE fruit 0 -1
1) "orange"
2) "apple"

6.2 案例 SortedSet命令练习

将班级的下列学生得分存入redis的sortedSet中:

  • Jack 85, Lucy 89,Rose 82 Tom 95 ,Jerry 78 , Amy 92 , Miles 76

实现下列功能:

  • 删除tom同学
  • 获取Amy同学的分数
  • 获取Rose同学的排名
  • 查询80分以下有几个学生
  • 给Amy同学加2分
  • 查出成绩前3名的同学
  • 查出成绩80分以下的所有同学
#将班级的下列学生得分存入redis的sortedSet中:
# Jack 85, Lucy 89,Rose 82 Tom 95 ,Jerry 78 , Amy 92 , Miles 76
127.0.0.1:6379> ZADD stus 85 Jack 89 Lusy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles 
(integer) 7
127.0.0.1:6379> ZREM stus Tom				#删除tom同学
(integer) 1
127.0.0.1:6379> ZSCORE stus Amy				#获取Amy同学的分数
"92"
127.0.0.1:6379> ZREVRANK stus Rose			#获取Rose同学的排名
(integer) 3
127.0.0.1:6379> zcount stus 0 80			#查询80分以下有几个学生
(integer) 2
127.0.0.1:6379> ZINCRBY stus 2 Amy			#给Amy同学加2分
"94"
127.0.0.1:6379> ZREVRANGE stus 0 2			#查出成绩前3名的同学
1) "Amy"
2) "Lusy"
3) "Jack"
127.0.0.1:6379> ZRANGEBYSCORE stus 0 80		#查出成绩80分以下的所有同学
1) "Miles"
2) "Jerry"
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bilal-abdurehim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值