Redis 数据类型(5种常用)

目录

 String类型

string 类型数据的基本操作

string 类型数据的扩展操作

string 作为数值操作

设置数据生命周期

Hash类型

 hash 类型数据操作的注意事项 

list类型

list类型基础操作

set类型

 set 类型数据的基本操作

set 类型数据的扩展操作 

sorted_set 类型

sorted_set 类型数据的基本操作

 sorted_set 类型数据的扩展操作

sorted_set 类型数据操作的注意事项


 Redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储 ,数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串

Redis数据类型类似于java类型
stringString
hash  HashMap
list LinkedList
setHashSet
sorted_setTreeSet

 String类型

存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型 。

存储数据的格式:一个存储空间保存一个数据。

存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用。

string 类型数据的基本操作

1.添加/修改数据

set key value

2.获取数据

get key

 3.删除数据

del key

4.添加/修改多个数据

mset key1 value1 key2 value2 …

5.获取多个数据

mget key1 key2...

6.获取数据字符个数(字符串长度)

strlen key

7.追加信息到原始信息后部(如果原始信息存在就追加,否则新建)

append key value

单数据操作与多数据操作有何区别?

 用单指令操作3次需要耗时9次时间,如果用一条指令处理这3条指令,那么需要耗时=set + result+处理x3 = 5。

string 类型数据的扩展操作

string 作为数值操作

  • string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。
  • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发 带来的数据影响。
  • 注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。(java中long型数据最大值,Long.MAX_VALUE)

1.设置数值数据增加指定范围的值

incr key --让指定键的值自增1
incrby key increment  --让键的值自增指定的整数值,如 incrby key 5
incrbyfloat key increment  --让键的值自增指定的浮点数

2.设置数值数据减少指定范围的值

decr key
decrby key increment

设置数据生命周期

为了满足这样一个需求:电商开启热门商品推荐,每种商品热门期维持3天,3天后自动取消热门。

可以设置数据的生命周期:

setex key seconds value  --例:setex key seconds 5设置有效时间5s
psetex key milliseconds value --设置时间毫秒

Hash类型

  • 需要的存储结构:一个存储空间保存多个键值对数据
  • hash类型:底层使用哈希表结构实现数据存储

hash存储结构优化

  • 如果field数量较少,存储结构优化为类数组结构
  • 如果field数量较多,存储结构使用HashMap结构

例如我们要存储这样一个数据:

key  = student            hash存储空间的值 = {name":"张三","age":22,"blogs":6164, "score":83}

 1.添加/修改数据

hset key field value --例:hset  student  name 张三
hmset key field1 value1 field2 value2 …  --一次添加多个

2.获取数据

hget key field value  --例:hget student name 张三
hmget key field1 field2 …  --一次获取多个
hgetall key   --获取key中所有的字段名和字段值

--获取哈希表中所有的字段名或字段值
hkeys key
hvals key

注意:如果存入的是中文,读取时是乱码,我们可以在启用redis时这样启动“redis-cli  --raw” 

3.删除数据

hdel key field1 [field2]

4.设置指定字段的数值数据增加指定范围的值

hincrby key field increment
hincrbyfloat key field increment

 5.获取哈希表中字段(filed)的数量

hlen key

6.获取哈希表中是否存在指定的字段(filed)

hexists key field

 hash 类型数据操作的注意事项 

  • hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到, 对应的值为(nil) 
  • 每个 hash 可以存储 2 32 - 1 个键值对 
  • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存 储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
  • hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈

list类型

  • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
  • list类型:保存多个数据,底层使用双向链表存储结构实现。其就好似一个队列,从左可以进,从右也可以进
  • list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作 

list类型基础操作

1.添加/修改数据

lpush key value1 [value2] ……   --从左放入数据
rpush key value1 [value2] ……   --从右放入数据

2.获取数据

lrange key start stop  --从左获取数据;start:开始索引,stop:结束索引
--补充:0表示头部,-1表示尾部,那么获取所有value可以这样做:lrange key 0 -1
lindex key index
llen key    --获取长度

3.获取并移除数据

lpop key    --从左删除一个数据
rpop key    --从右删除一个数据

4.规定时间内获取并移除数据

如果key中有值,那么立即从对应的key中获取一个值,并且移除;如果key中没有值,那么它会等待我们设定好的时间,若在这段时间内,有值被放入了该key中,它会立即获取值,并且移除。

blpop key1 [key2] timeout    --单位s,从左获取移除一个值
brpop key1 [key2] timeout    --单位s
brpoplpush source destination timeout    --从里面取并移除一个值到另一个key中

5.移除指定数据

--count:删除数量,因为value可以重复
--例:lrem key 3 张三    删除3个值为张三的数据
lrem key count value

set类型

  • 新的存储需求:存储大量的数据,在查询方面提供更高的效率 
  • 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询 
  • set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

 set 类型数据的基本操作

1.添加数据

sadd key member1 [member2]

2.获取全部数据

smembers key 

3.删除数据

srem key member1 [member2]

4.获取集合数据总量

scard key

5.判断集合中是否包含指定数据

sismember key member

set 类型数据的扩展操作 

我们有这样一些需求,例如:1.微博推给你关注的人所关注的博主。2.微信中你关注的公众号会显示有多少好友共同关注。

解决方案

1.求两个集合的交、并、差集

sinter key1 [key2]     --交集
sunion key1 [key2]     --并集
sdiff key1 [key2]      --差集    key1 - key2

2.求两个集合的交、并、差集并存储到指定集合中

sinterstore destination key1 [key2] 
sunionstore destination key1 [key2] 
sdiffstore destination key1 [key2] 

3.将指定数据从原始集合中移动到目标集合中

smove source destination member    --smove a b zhangsan;将a中zhangsan移到 b中

 

sorted_set 类型

  •  sorted_set类型:在set的存储结构基础上添加可排序字段(score)
  • 不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
  • 有序集合的成员是唯一的,但分数字段(score)却可以重复。

sorted_set 类型数据的基本操作

1.添加数据

zadd key score1 member1 [score2 member2]    --例:zadd name 2 张三

2.获取全部数据

start与stop用于限定查询范围,作用于索引,表示开始和结束索引

[WITHSCORES]:用于是否显示分数

zrange key start stop [WITHSCORES]    --正向输出
zrevrange key start stop [WITHSCORES]    --反向输出

3.删除数据

zrem key member [member ...]

4.按条件获取数据

min与max用于限定搜索查询的条件

[LIMIT]:分页查询

--例:zrangebyscore name 10 15;查询分数在10~15之间
zrangebyscore key min max [WITHSCORES] [LIMIT]
zrevrangebyscore key max min [WITHSCORES]

5.条件删除数据

zremrangebyrank key start stop
zremrangebyscore key min max

6.获取集合数据总量

zcard key
zcount key min max

实例操作

 sorted_set 类型数据的扩展操作

需求:有一个投票需求,我们需要排名,票数怎么解决。

1.获取数据对应的索引(排名)

zrank key member    --正数排
zrevrank key member    --倒数排

2.score值获取与修改(score值:票数)

zscore key member    --获取分数
zincrby key increment member    --修改分数,zincrby key 3 张三;为张三的分数加3

sorted_set 类型数据操作的注意事项

  • score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992
  • score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时 候要慎重 
  • sorted_set 底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反 复覆盖,保留最后一次修改的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IABQL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值