redis实验环境
针对学习redis 我们可以为您提供一套完善的学习环境
点击此处跳转
章节叙述
本章节我们开始介绍Redis
的基本数据类型,首先介绍的是Sring
类型,首先键都是字符串类型的,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串能为其他四种数据结构的学习奠定基础。 如图所示,字符串类型的值实际可以是字符串(简单的字符串,复杂的字符串(例如 JSON
,XML
),数字(整数,浮点数),甚至二进制(图片,音频,视屏))但是值最大不能超过 512MB
。
常用命令
我们这里只介绍一些详细的命令,在本章节的附件中提供了String
类型所有的命令,以及示例。
-
1,单个设置值,获取值
Redis
可以通过set
命令来创建一个String
类型的键值对:set key value
我们可以通过
get
命令来获取我们保存的数据:get key
我们也可以为我们的数据设置过期事件,我们只需要在
set
命令后添加EX[过期时间]
;set key value ex 5
这里的时间单位是秒,我们可以等待5秒之后再去查询,就会发现
get key
的结果为(nil)
这个意思是不存在的意思。当然我们也可以使用毫秒为单位来设置过期时间,如果我们希望使用毫秒作为过期的时间,我们需要使用
px
:set key value px 5000
有些情况下,我们希望设置一个具体的时间,比如说
2021-12-31 23:59:59
, 很可惜我们不能直接使用这个时间,我们需要用所谓的时间戳。时间戳是计算机用来表达时间的一种方式,它是从1970年1月1日(UTC/GMT
的午夜)开始所经过的秒数,不考虑闰秒。2021-12-31 23:59:59
用时间戳表示就是:1640966399
:set key value EXAT 1640966399
这样,我们键为
key
的这个数据会在2021-12-31 23:59:59
到了后过期。同样,我们也可以设置毫秒级别的到期时间,这样会更加准确一些,毫秒级别的到期时间用的是
PXAT
:set key value PXAT 1640966399000
有时候为了避免覆盖已经存在的数据,我们可以在设置数据的时候,增加一个
NX
的标志,NX
也就是NOT EXISTS
的意思。这时候如果我们准备保存的键值对在Redis
数据库中已经存在,它就会报错set key value NX
与
NX
相反的是,还有一个标志是XX
,它的作用是要求这个键必须存在:set key-not-exist value XX
(nil)
的意思就是没有成功的意思。相反,我们重新设置一下键为
key
的值:set key new-value XX
当然,
Redis
也为我们提供了语法糖,比如set key value NX
等价于setnx key value
,set key value XX
等价于setxx key value
。 -
2,批量设置值,获取值
Redis
提供了mset
来批量创建多个键值对:mset demo1 dsds demo2 dededed demo3 ededede
它会返回你创建成功的个数。同时
Redis
也提供了mget
用于批量获取值,我们可以用来获取获取我们刚刚存储的所有值:mget demo1 demo2 demo3
批量操作可以有效的提高开发效率,可以替换
n
次的get
命令的操作,下述我们简单做了两种命令的时间消耗对比操作 时间 1000次get 1000 * 1+1000 * 0.1=1000毫秒=1.1秒 1次mget(组装1000和键值对) 1*1+1000 * 0.1=101毫秒=0.101秒 *需要的注意的是每次批量操作所发送的命令数不是无节制的,如果数量过多可能造成
Redis
阻塞或者网络阻塞。 -
3,计数
我们在开头的时候了解到
String
类型可以存储整数或者浮点数,Redis
对于值的类型为整数或者浮点数的键值对,提供了计数的相关命令,可以对值进行递增,递减的操作。给大家介绍的是
incr
命令,它可以对值进行递增的操作。我们先来试一下:incr demo1
我们对刚刚存储的键为
demo1
进行了递增的操作,这个报错信息意思是,类型不符合。这是因为我们刚刚存储的值不是数字类型的,我们重新存储一个键值对,再试一下:set incr1 1
incr incr1
可以看到这次返回的是递增成功之后的值。这个指令也可以直接新建一个键值对,并且对它进行递增操作
我们先判断
incr3
这个键是否存在exists incr3
确定不存在之后我们直接
incr
操作incr incr3
我们递增了一个不存在的键,它会先创建一个键值对值为0,随后对这个键值对进行递增的操作,返回递增后的结果。
内部编码
接下来我们来了解一下字符串类型的内部编码。
-
1,
int
:8个字节的长整型 -
2,
embstr
:小于等于39个字节的字符串 -
3,
raw
:大于39个字节的字符串
Redis
会根据你存储的值的字符串长度,选取合适的内部编码实现。这里我们只做一下基础的了解。
常见使用场景
-
1.缓存功能
Redis
具有支撑高并发的特性,所以一些热点信息使用缓存,可以起到加速读写和降低后端压力的作用例如,存储用户信息,商品信息等一些热点信息。一般采用
Json
格式存储 -
2.计数
很多应用会使用
Redis
作为计数的基本工具,它可以实现快速计数,查询缓存的功能。同时数据可以异步落地到其他持久化的数据源。例如:电商系统中,商品的浏览量,购买量等都是以天为单位 在
Redis
中计数,然后使用定时任务同步到ES
分布式搜索引擎 或者Mysql
中持久化保存。 -
3.共享
Session
分布式
Web
服务为了 实现单点登录 可以采用 分布式Session
共享的方式实现。其原理就是将用户的Session
进行集中管理,而不是分布在各个服务端 进行管理如图: -
4.限速,降频
Redis
可以给指定key
设置过期时间,通过检查指定key
的存在情况,可以实现一下定时的业务场景。例如:常见的
app
进行短信登录的时候会对多次短信发送,做时间间隔的操作,常见的实现方式,发送短信之前,在Redis
中查看上次发送的短信是否过期。