Redis学习计划之数据类型

Redis常用的5种数据类型

Redis类型Java类型
stringString
hashHashMap
listLinkedList
setHashSet
sorted_setTreeSet

在这里插入图片描述
图片来源:https://home.cnblogs.com/u/pangzizhe/

Redis中所有的数据数据存储都是以 key-value 形势存在的,其中 kye 的类型一定是字符串类型。数据类型则指的是value部分。这里只说数据不说命令操作

localhost:0>set name testuser #------设置name
"OK" #------执行结果
localhost:0>get name #------获取name
"testuser" #------执行结果

在这里插入图片描述
可以看到其value结构就像是html大文本。

使用注意:

  1. 获取返回“nil”等同于null
  2. 支持的最大存储量 512MB
  3. 保存为Java long数值时支持的最大值为:9223372036854775807

使用场景:

  1. 计数器(sequence):incr、decr
  2. 分布式锁:setnx、expire、del
  3. 数据储存(这个不用说,各个类型都能做到,主要是用途):json string
localhost:0>hset test name lix  #------设置key为test, field为name
"1" #------执行结果
localhost:0>hset test age 18
"1"
localhost:0>hset test gender 男
"1"
localhost:0>hget test name  #------获取key为test,field为name的值
"lix" #------执行结果
localhost:0>hgetall test  #------获取test的所有数据
 1)  "name"
 2)  "lix"
 3)  "age"
 4)  "18"
 5)  "gender"
 6)  "男"

在这里插入图片描述
通过工具我们可以看到刚才存入的数据,value的结构更像是我们的常规关系型数据库表。

使用注意:

  1. value不可存嵌套对象,如果未获取到对应值为nil(null)
  2. 每个 hash 可以存储 2^32 - 1 键值对(40多亿)
  3. hash非常贴近对象的形势,是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,但是该类型并不是为对象设计的,不可滥用。
  4. hgetall 命令获取的是全属性,如果filed过多效率会比较低,可能造成数据访问瓶颈。
localhost:0>lpush list list-value1 list-value2 list-value3 #---设置一个key为list的值
"3"
localhost:0>lrange list 0 2 #---查看下标0到2的值
 1)  "list-value3"
 2)  "list-value2"
 3)  "list-value1"
localhost:0>lrange list 0 -1 #---如果不知道end的下标是多少,可以用-1,表示倒数第一位
 1)  "list-value3"
 2)  "list-value2"
 3)  "list-value1"

在这里插入图片描述
list是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。当然这里的头尾看自己对list的约定,你也可以约定左边是尾,右边是头,只要开发中大家保持一致就行。
使用注意:

1.list中保存的数据都是string’类型的,最多保存 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
2. list具有索引,通常数据类型以队列或栈的形势操作
3. 获取全部数据结束索引设置为-1(倒数第一个)
4. list数据可作分页,提升效率

使用场景:

  1. 消息队列
  2. 定时任务:blpop
localhost:0>sadd set set-value1 set-value2 set-value3 set-value4 set-value5
"5"

我们按顺序设置完毕5个值,然后看一下redis中的数据
在这里插入图片描述
Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
从这里看到它们是无序排列的,那么我们获取来看一下:

localhost:0>spop set
"set-value5"
localhost:0>spop set
"set-value1"
localhost:0>spop set
"set-value3"
localhost:0>spop set
"set-value4"
localhost:0>spop set
"set-value2"
localhost:0>spop set
null #---已经没有值了

这里随机获取redis提供了两个API,spop与rpoplpush,那么二者有什么区别?
前者是从集合中取出,后者相当于把集合中拷贝一份返回,即可以重复获取。
因为set中的数据不会重复,我们执行反复往一个集合中add相同的value,返回的结果为“0”,即成功0个

localhost:0>sadd set set-value1 set-value2 set-value3 set-value4 set-value5
"5" #---成功设置5个值
localhost:0>sadd set set-value1 set-value2 set-value3 set-value4 set-value5
"0" #---重复设置5个值,成功0个

使用场景:

1.随机取值:spop
2.求取交并差集:sdiff | sinter | sunion
3. 权限校验:sismember

使用注意:

1.set中不允许重复数据
2.最多保存为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)

localhost:0>zadd money 43 zhangsan  #---zadd key 排序字段 value
"1" #---执行成功
localhost:0>zadd money 78 lisi
"1"
localhost:0>zadd money 438 wangwu
"1"
localhost:0>zadd money 32 zhaoliu
"1"

在这里插入图片描述
可以看到工具中已经给我们排好序了,那么是工具给我们排的序吗?

localhost:0>zrange money 0 -1
 1)  "zhaoliu"
 2)  "zhangsan"
 3)  "lisi"
 4)  "wangwu"

执行命令我们可以看到输出结果与工具上看到的一致。

使用注意:

  1. 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
  2. 不同的是每个元素都会关联一个双精度double类型的分数,可能造成精度丢失,使用时需要慎重。redis正是通过分数来为集合中的成员进行从小到大的排序。
  3. 有序集合的成员是唯一的,但分数(score)却可以重复。








最后~

Redis常用命令大全点这里
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值