Redis数据类型详解(5大最常见数据类型)

Redis数据类型详解(5大最常见数据类型)-mikechen

Redis支持多种类型的数据结构,下面重点详解Redis最常用的5大数据类型@mikechen

Redis数据类型详解(5大最常见数据类型)-mikechen

Redis String数据类型

Sring是Redis最基本的数据类型,二进制安全的字符串,最大512M,可以包含任何数据,比如:字符串、整数、浮点数、图片、Json对象等。

String类型的数据结构是Key-Value(键:值),Key 是数据在Redis中的唯一标识,Value则是其具体的数据。

Redis String常用命令

命令名称

示例

描述

set

set key value

设置键值对

get

get key

获取值

incr

incr key

递增值

decr

decr key

递减值

strlen

strlen key

获取字符串长度

incrby

incrby key increment

增加指定数字

Redis String示例

#设置key和value,正确返回OK
set key value
set name mikechen

#获取key对应的value值,若没有返回nil
get key
get name

#返回key对应的value,再重新设置这个key的值
getset key value
getset name lily

#设置多个键值对 正确返回OK
mset k1 v1 k2 v2 ...
mset sex 1 age 20 address hz

#获取多对key对应的value
mget k1 k2 k3 ...
mget sex age address

String类型的值为整数,或者浮点数形式时,Redis可以把它当做整数一样操作,支持自加(incr )、自减(decr )、加(incrby )、减(decrby )等操作。

#自增1,value是数值类型才能成功,如果这个值不是数值,则会报错
incr key
incr age
#age本来是20,现在返回就是21

#自增指定数量,value是数值类型才能成功
incrby age 5
#age本来是20,现在返回就是25

#自减1,value是数值类型才能成功。
decr key
decr age
#age本来是0,现在返回就是-1

#自减指定数量,value是数值类型才能成功
decrby key
decrby age 20
#age本来是30,现在返回就是10

String应用场景

1)计数器

因为 Redis 处理命令是单线程,所以执行命令的过程是原子的,因此 String 数据类型适合计数场景,比如:计算访问次数、点赞、转发、库存数量等等;

2)共享session

分布式Session可以很方便的共享存储session。

3)分布式锁

SET 命令有个 NX 参数可以实现「key不存在才插入」,可以用它来实现分布式锁;

 

Redis List数据类型

List列表可以存储有序并且可以重复的元素,按照插入顺序排序,可以从头部或尾部向 List 列表添加元素。

List获取头部或尾部附近的记录是极快的,list的元素个数最多为2^32-1个(40亿)。

redis list常用指令:

常用命令

命令

左压栈

lpush key v1 v2 v3 v4…

右压栈

rpush key v1 v2 …

查看里面的元素

lrange key start offset

左弹栈

lpop key

右弹栈

rpop key

按照索引查找

lindex key index

查看长度

llen key

删除几个几

lrem key 数量 value

指定开始和结束的位置截取,再赋值给key

ltrim key start offset

右出栈左压栈,把resoure的左后一个,压倒dest的第一个

rpoplpush resource destination

重置指定索引的值

lset key index value

在指定元素前/后插入指定元素

linsert key before/after 值1 值2

list底层有多种数据类型,数据量少的时候是ziplist压缩列表,内存是连续分配的,当元素个数超过某个值时转为linkedlist双向链表。

Redis 3.2 版本之后,List 数据类型底层数据结构就只由 quicklist 实现了,替代了双向链表和压缩列表。

Redis List应用场景

  1. 用户列表,商品列表,评论列表等;
  2. 消息队列;
  3. 栈;

 

Redis Set数据类型

Redis Set是无序的字符串集合,不存在重复的元素。

Redis Set常用命令

常用命令

命令

添加值

sadd key values

查看值

smembers key

检查集合是否有值

sismember key value

查看set集合里面的元素个数

scard key

删除集合中的指定元素

srem key value

随机弹出某个元素

srandmember key

随机出栈

spop key

把key1中的某个值赋值给key2

smove SourceSet destSet membe

Redis Set应用场景

Set 类型比较适合用来数据去重和保障数据的唯一性,还可以用来统计多个集合的交集、错集和并集等,当我们存储的数据是无序并且需要去重的情况下,比较适合使用集合类型进行存储。

比如:

  • 统计网站uv;
  • 统计共同好友;

 

Redis Sorted Set数据类型

sorted set也叫zset是一个有序集合,元素本身跟set一样,是不重复的。

Sorted Set常用命令

命令

帮助

描述

zadd

zadd key score1 v1 score2 v2 score1v3 … scoren vn

为有序集合添加新成员

zrem

zrem key mem1 mem2 …memn

删除有序集合中指定成员

zcard

zcard key

获得有序集合中的元素数量

zcount

zcount key min max

返回集合中score值在[min,max]区间的元素数量

zincrby

zincrby key increment member

在集合的member分值上加increment

zscore

zscore key member

获得集合中member的分值

zrank

zrank key member

获得集合中member的排名(按分值从小到大)

zrevrank

zrevrank key member

获得集合中member的排名(按分值从大到小)

zrange

zrange key start end

获得集合中指定区间成员,按分数递增排序

zrevrange

zrevrange key start end

获得集合中指定区间成员,按分数递减排序

Sorted Set应用场景

有序列表被广泛使用在各种排行榜业务上:比如销量排行,用户点击率排行等

 

Redis Hash数据类型

Redis Hash是key-value对的一种集合,Hash 特别适合用于存储对象。

Redis Hash常用命令

作用

命令

添加单个

hset key field value

获取单个

hget key field

一次性添加多个键值

hmset key field1 value1 field2 value2 …

一次性获取多个

hmget

获取所有键值

hgetall key

删除

hdel

获取键值对的个数

hlen

检查是否包含某个字段

hget key field

查看所有key

hkeys

给某个数值类型(否则报错)的值增加指定整数值

hincrby key field increment

给某个数字类型值,增加指定浮点类型值

hincrbyfloat key field increment

如果不存在则添加

hsetnx

Redis Hash应用场景

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

Redis数据类型详解(5大最常见数据类型)-mikechen

涉及的命令如下:

  • 添加商品:HSET cart:{用户id} {商品id} 1
  • 添加数量:HINCRBY cart:{用户id} {商品id} 1
  • 商品总数:HLEN cart:{用户id}
  • 删除商品:HDEL cart:{用户id} {商品id}
  • 获取购物车所有商品:HGETALL cart:{用户id}

当前仅仅是将商品ID存储到了Redis 中,在回显商品具体信息的时候,还需要拿着商品 id 查询一次数据库,获取完整的商品的信息。

Redis数据类型总结

Redis 常见的五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及 Zset(sorted set:有序集合)。

Redis 五种数据类型的应用场景:

  1. String 类型的应用场景:缓存对象、常规计数、分布式锁等;
  2. List 类型的应用场景:消息队列、栈等;
  3. Set 类型:点赞、共同关注、抽奖活动等;
  4. SortedSet 类型:排序场景,比如排行榜、电话和姓名排序等;
  5. Hash 类型:缓存对象、购物车等。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法