设为首页 加入收藏

TOP

Redis的五大数据类型及其使用场景(一)
2023-07-23 13:24:50 】 浏览:434
Tags:Redis

前言

redis是一个非常快速??的非关系数据库??解决方案。其简单的键值数据模型使 Redis 能够处理大型数据集,同时保持令人印象深刻的读写速度和可用性。?redis提供了五种数据类型,分别是是:1、string(字符串);2、hash(哈希);3、list(列表);4、set(集合);5、sort set (有序集合)(其实随着 Redis 版本的更新,后面又支持了四种数据类型:BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增),本文暂不作介绍。)。接下我就给大家介绍一下这五种数据类型的基本用法和使用场景。

Redis五大数据类型

一. String

1、简介

字符串类型:实际上可以是字符串(包括XML、JSON)、还有数字(整形、浮点数)、二进制(图片、音频、视频),最大不能超过512MB。

 

2、常用命令

(1)设值命令:

set age 23 ex 10 //10秒后过期 px 10000 毫秒过期

setnx name test //不存在键name时,返回1设置成功;存在的话失败0

set age 25 xx //存在键age时,返回1成功

(2)获值命令:

get age //存在则返回value, 不存在返回nil

(3)批量设值:

mset country china city beijing

(4)批量获取:

mget country city address //返回china beigjin, address为nil

(5)计数命令:

incr age //必须为整数自加1,非整数返回错误,无age键从0自增返回1
decr age //整数age减1
incrby age 2 //整数age+2
decrby age 2//整数age -2
incrbyfloat score 1.1 //浮点型score+1.1

 

(6)append追加指令:

set name hello; append name world //追加后成helloworld

(7)字符串长度:

set hello “世界”;strlen hello//结果6,每个中文占3个字节

(8)截取字符串:

set name helloworld ; getrange name 2 4//返回 llo

 

3、使用场景

(1) 简单字符缓存

(2) 分布式锁

(3)计数功能——》计数服务

INCR article:001 (文章001阅读数加1)
GET airticle:001

文章阅读数

(4) 各类场景下(单机或分布式)的标识号

Incrby serialNo 1 ——》分给每个服务1000个本地缓存Incrby serialNo 1000

(5) 集群环境下的Session共享

 

二、Hash

1、简介

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

hash

 

2、常用命令

(1)设值命令:

设值:

hset user:1 name james //成功返回1,失败返回0

批量设值:

hmset user:2 name james age 23 sex boy //返回OK

(2)取值命令:

取值:

hget user:1 name //返回james

批量取值:

hmget user:2 name age sex //返回三行:james 23 boy

(3)删除命令:

hdel user:1 age //返回删除的个数

(4)计算个数:

hset user:1 name james;
hset user:1 age 23;
hlen user:1 //返回2,user:1有两个属性值

(5)判断field是否存在:

hexists user:2 name //若存在返回1,不存在返回0

(6)获取所有field:

hkeys user:2 // 返回name age sex三个field

(7)获取user:2所有value:

hvals user:2 // 返回james 23 boy

(8)获取user:2所有field与value:

hgetall user:2 //name age sex james 23 boy值

(9)增加1:

hincrby user:2 age 1 //age+1
hincrbyfloat user:2 age 2 //浮点型加2

 

3 、使用场景

(1) 存储对象

实例:购物车

Hmset cart:001 prod:01 1 prod:02 1

当前登录用户ID号为key,商品ID号为Field,加入购物车数量为value

购物车展示

三、 List

1、简介

用来存储多个有序的字符串,一个列表最多可存2的32次方减1个元素。因为有序,可以通过索引下标获取元素或某个范围内元素列表,列表元素可以重复

list

2、常用命令

(1)添加命令:

rpush james c b a //从右向左插入cba, 返回值3
lrange james 0 -1 //从左到右获取列表所有元素 返回 c b a
lpush key c b a //从左向右插入cba
linsert james before b teacher //在b之前插入teacher, after为之后,使 用lrange james 0 -1 查看:c teacher b a

 

(2)查找命令:

lrange key start end //索引下标特点:从左到右为0到N-1
lindex james -1 //返回最右末尾a,-2返回b
llen james //返回当前列表长度
lpop james //把最左边的第一个元素c删除
rpop james //把最右边的元素a删除

 

3、使用场景

(1)利用List实现栈、队列

1.先进后出:栈 = LPUSH+LPOP->FILO

2.先进先出:队列=LPUSH+RPOP

3.Blocking MQ(堵塞队列)= LPUSH+BRPOP

 

(2)redis做消息队列(不推荐使用redis做消息队列)

下面以订单为例子进行演示:

  1. 每个用户有多个订单key为 order:1 order:2 order:3, 结合hmset
hmset order:1 orderId 1 money 36.6 time 2018-01-01
hmset order:2 orderId 2 money 38.6 time 2018-01-01
hmset order:3 orderId 3 money 39.6 time 2018-01-01
  1. 把订单信息的key放到队列
lpush user:1:order order:1 order:2 order:3
  1. 新产生了一个订单order:4,
hmset order:4 orderId 4 money 40.6 time 2018-01-01
  1. 追加一个order:4放入队列第一个位置
lpush user:1:order order:4
  1. 当需要查询用户订单记录时:
List orderKeys = lrange user:1:order 0 -1 //查询user:1 的所有订单key值
for(Order order: orderKeys){
		hmget order:1
}

 

(3)列表缓存

微信订阅号展示

 

小明微信号ID:001,他关注了顶级架构师、爱敲代码的小黄、程序员蜗

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇pheatmap实用参数(二) 下一篇osx使用alfred集成有道查词

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目