Redis的数据类型介绍

Redis的数据类型

1、数据类型介绍

1.1Redis的5种数据类型

redis是一种高级的key-value的存储系统,键是string类型,其中value支持五种数据类型,对于键和值的描述如下所示:

键(key):

​ 【1】键不能重复

​ 【2】作用:标识存储的数据

​ 【3】数据类型:string

​ 【4】命名规则:

​ 1)不能太长:因为查询的效率低,查询起来不方便

​ 2)不能太短:容易重复,同时可读性也差

​ 3)按照规范:HEIMA_STU_LIST

**值(value):**支持5种数据类型

值的数据类型值的格式说明
string字符串类型,类似于Java中String
hash由键值对组成,类似于Java中Map
list列表类型,类似于Java中List,元素是存取有序,可以重复。
set集合类型,类似于Java中Set,元素是存取无序,不可重复
sorted set/zset有序的集合类型,每个元素有一个分数用来决定它的顺序。

2、string类型的操作命令

目标

​ 学习操作String类型数据的命令

字符串类型string

字符串类型是Redis中最为基础的数据存储类型,它在Redis中以二进制保存。无论存入的是字符串、整数、浮点类型都会以字符串写入。

在Redis中字符串类型的值最多可以容纳的数据长度是512M,这是以后最常用的数据类型。

常用命令

更多命令可以参考Redis中文网:https://www.redis.net.cn

命令功能
set 键 值添加或修改一个键和值,键不存在就是添加,存在就是修改
get 键获取值,如果存在就返回值,不存在返回nil(就是C语言中NULL)
del 键删除指定的键和值,返回删除的个数
SETEX key seconds value设置指定key的值,并将 key 的过期时间设为 seconds 秒。此处的value是指key对应的value值。等价于:SET key value ex seconds
EXPIRE key seconds如果一个key已经存在,要设置一个过期时间
SETNX key value/set key value nx保存键值对,如果key存在则不保存,不存在则保存
补充:
批量操作:
mset  name lisi   addr sh
mget name  age addr
del  name age 
命令演示
  1. 添加一个键为name,值为zhangsan
  2. 再设置一个键为age,值为13
  3. 得到name和age的值
  4. 删除name
  5. 批量添加name lisi addr sh
  6. 批量获取name age addr的值
  7. 批量删除name age
  8. 修改addr的值为bj
  9. 设置name2值为lisi,且存活5s,5秒后,内存销毁
  10. 也可通过set实现过期机制,ex 10表示存活10秒,例如设置name3值为zhaoliu,且存活5s,5秒后,内存销毁
  11. 使用set命令添加name4并赋值为wangwu,然后使用EXPIRE 设置过期时间。
  12. 如果键存在则不保存,不存在则保存。

执行效果

9.设置name2值为lisi,且存活5s,5秒后,内存销毁

10.也可通过set实现过期机制,ex 10表示存活10秒,例如设置name3值为zhaoliu,且存活5s,5秒后,内存销毁

12.如果键存在则不保存,不存在则保存。

使用场景举例:

  • 用户登录后端保存短信验证码,并设置失效时间;
  • 代替后端session功能,实现分布式缓存(是将数据分散存储在多台独立的设备上)等;
小结
  1. 添加值: set 键 值
  2. 获取值:get 键
  3. 删除值:del 键

3、hash类型的操作命令

目标

学习hash类型的几个操作命令

概述

Redis中的Hash类型可以看成是键和值都是String类型的Map容器,每一个Hash可以存储4G个键值对。

​ 该类型非常适合于存储对象的信息。如一个用户有姓名,密码,年龄等信息,则可以有username、password和age等键。它的存储结构如下:

常用命令
命令功能
hset 键 字段 值添加键,字段,值
hget 键 字段通过键,字段得到值
hmset 键 字段 值 字段 值multiply多个,一次添加多个字段和值
hmget 键 字段 字段通过键,获取多个字段和值
hdel 键 字段 字段删除一个或多个字段的值
hgetall 键得到这个键下所有的字段和值
HKEYS 键获取哈希表中所有字段
HVALS 键获取哈希表中所有值
命令演示
  1. 创建hash类型的键为person,并且添加一个字段为name,值为zhangsan
  2. 向person中添加字段为age,值为13
  3. 向person中批量添加字段为addr,值为sh;字段为company,值为heima
  4. 分别得到person中的name、age的字段值
  5. 批量得到person中的name、age和addr的字段值
  6. 获取person中所有的字段以及对应的值
  7. 删除person中的name
  8. 批量删除person中的age、addr以及company

Hash数据结构的应用场景:

  • 购物车

以用户id为key,商品id为field,商品数量为value,恰好构成了购物车的3个要素,如下图所示

小结
功能hash类型的操作命令
添加值hset
得到值hget
删除值hdel
添加多个字段hmset
得到多个字段值hmget
得到所有字段的值hgetall

4、list类型的操作命令

目标

​ 学习list类型的操作命令

概述

​ 在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4G个。

常用命令
命令行为
lpush 键 元素 元素…left 从左边向指定的键中添加1个或多个元素,返回列表中元素的个数
rpush 键 元素 元素…right 从右边向指定的键中添加1个或多个元素
lpop 键从左边删除一个元素,返回被删除的元素
rpop 键从右边删除一个元素,返回被删除的元素
lrange 键 开始 结束得到键中指定范围的元素的数据
每个元素都有一个索引号,从左向右0~n
从右向左索引号:-1~-(n+1),每个元素有2个索引号
如果要取出整个列表中所有的元素,索引号应该是:0~-1
lindex 键 索引值查询指定索引的元素
llen 键获取列表的长度
BRPOP key1 [key2 ] timeout移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,超时时间单位默认是秒
LREM key 删除元素个数 value值从表头删除指定个数的元素
命令演示
  1. 向mylist键的列表中,从左边添加a b c三个元素

  2. 从右边添加one two three三个元素

  3. 查询索引0到2的数据

  4. 查询所有的元素

  5. 查询索引是2的数据

  6. 从右边添加一个重复的元素three

  7. 删除最左边的元素c

  8. 删除最右边的元素three

  9. 获取列表中元素的个数

  10. 向列表list1中添加数据,并移除列表中最后一个元素,如果列表中没有该元素则等待指定时间

  11. 向列表list1中添加元素: a b c b b. 然后删除2个b元素

    【效果】

10.向列表list1中添加数据,并移除列表中最后一个元素,如果列表中没有该元素则等待指定时间

11.向列表list1中添加元素: a b c b b. 然后删除2个b元素。

使用场景:

  • 微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息。如果取消点赞,移除对应好友信息。
  • list类型的lrange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名等,下图是酷狗音乐“K歌擂台赛”的昨日打擂金曲排行榜,每日计算一次,存储在list类型中。
小结
  1. 从左边添加元素: lpush
  2. 从右边添加元素:rpush
  3. 从左边删除元素:lpop
  4. 从右边删除元素:rpop
  5. 得到指定范围的元素:lrange
  6. 得到列表的长度:llen

5、set类型的操作命令

目标

​ 学习set类型的操作命令

概述

​ 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是4G,和List类型不同的是,Set集合中不允许出现重复的元素。

常用命令
命令行为
sadd 键 元素 元素…向一个键中添加1个或多个元素
smembers 键得到这个集合中所有的元素
sismember 键 元素判断指定的元素在集合中是否存在,存在返回1,不存在返回0
srem 键 元素 元素…通过键删除一个或多个元素
sinter key1 [key2]返回给定所有集合的交集(集合中都共有的部分)
命令演示
1. 向myset集合中添加A B C 1 2 3 六个元素
2. 再向myset中添加B元素,看能否添加成功
3. 显示所有的成员,发现与添加的元素顺序不同,元素是无序的
4. 删除其中的C这个元素,再查看结果
5. 判断A是否在myset集合中
6. 判断D是否在myset集合中
7. 向两个集合中添加数据,查看两个集合的交集
  1. 向myset集合中添加A B C 1 2 3 六个元素

  2. 再向myset中添加B元素,看能否添加成功

  3. 显示所有的成员,发现与添加的元素顺序不同,元素是无序的

  4. 删除其中的C这个元素,再查看结果

  5. 判断A是否在myset集合中

  6. 判断D是否在myset集合中

7.向两个集合中添加数据,查看两个集合的交集

应用场景:

  • 需要去重的少量信息,比如:身份证信息、手机号码等作为黑名单|白名单;

  • 共同好友查询,使用set的交集;

    • eg: zhang:{11,22,33,44} lisi:{22,33,66,88}

      ​ zhangsan和lisi共同的好友:交集取22 33即可.

小结
  1. 添加元素:sadd
  2. 删除元素:srem
  3. 得到所有元素:smembers
  4. 判断元素是否存在:sismember

6、zset/sorted set类型的操作命令

目标

学习zset命令的操作

概述

Redis 有序集合(sorted set)和set集合一样也是无序不可以重复。不同的是每个元素都会关联一个分数(排序因子)。

redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员。

命令
命令行为
zadd 分数 分数 添加1个或多个元素,每个元素都有一个分数
zrange 开始索引 结束索引获取指定范围的元素,得到所有的元素,索引是0到-1
zrange 键 开始索引 结束索引 withscores查询指定的元素和对应的分数
zrevrange 键 开始索引 结束索引 withscores按照分数倒叙获取指定的元素和对应的分数
zrem 键 值 值删除一个或多个值
zcard 得到元素个数
zrank 得到元素的索引号
zscore 键 值得到元素的分数
操作
  1. 添加键country,分数是10,值是Japan

  2. 添加键country,分数是5,值是USA,添加键country,分数是50,值是Russia

  3. 添加键country,分数是1,值是China,分数是120,值是Korea

  4. 查询country中所有的元素

  5. 查询所有的元素和对应的分数

  6. 按照分数倒叙获取所有的元素和对应的分数

  7. 查询索引是0 到 1的值

  8. 查询Japan的索引号(从0开始)

  9. 删除值为USA的元素

  10. 查询country中还有多少个元素

  11. 显示Russia的分数值

应用场景:

1.b站视频点击量排名

2.新浪热点文章点击量、收藏量等排名

小结
命令行为
zadd添加
zrange查询
zrem删除
zcard个数
zrank索引号
zscore得到分数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

攒了一袋星辰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值