从零开始Redis(二)

233 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

🍊作者简介:少年不想说话,努力长大

🍊往期回顾:从零开始Redis(一)

🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩

上讲我们说了Redis的一点基本概念,今天开始我们看看redis的数据结构,这里我用的是redis6!!!

首先我们要登录上我们的redis,为了方便这里我全部用命令行来进行表示,通过./redis -cli我们相当于启动客户端,如果此时我们的redis服务启动是加了密码的,那我们先登录,这里再提一嘴,如果是公有云上的服务,必须设置密码,如果不设置,对你的整个系统是很危险的,有机会我会把我吃的亏放上来;直接通过 auth [username] password命令连接成功,不知道密码可以去redis.conf文件里去看;

我们先看下redis,它一共有16个库,从0开始,15结束,如果给16会超出范围报错,请看用例

在进行正式操作之前我们需要看下我们的库,虽然是新安装的,但是保持习惯,直接通过

keys *

来查看是否存在keys,它会返回一个**(empty array)**;好下面我们直接看数据结构了

String字符串

String字符串它是二进制安全的,它是Redis最基本的类型,由于二进制形式存储数据,所以它可以存储任何数据包括媒体文件,它的value最大可以存储512M,我们开始set个值看看,

我们可以发现在我们输入set的时候会提示很多东西,那具体是啥含义呢,key value我就不解释了,我们主要看后面几个

EX seconds:是设置键的过期时间为second秒,set key value seconds它等同于Setex key seconds value

PX milliseconds:是设置键的过期时间为milliseconds毫秒,SET key value PX milliseconds

它等同于PSetex key milliseconds value

KEEPTTL:是在原始的set带有生存时间(TTL)的键来说, 如果我们对该key再次进行set的时候, 这个key原有的TTL将被清除,如果我们在其后加上keepttl剩余时间将不变,即set key value KEEPTTL

NX :是只有key不存在时,才会对key进行设置操作。 SET key value NX 效果等同于 SETNX key value 

XX:是只有key已经存在时,才对key进行设置操作

下面我们看下用例:这里我就把123的例子举出来,通过这个例子我们应该清楚在我们过期时间才是我们的重点关注对象,在我们对redis的key重新赋值(其实值可能未变)的时候,这里打个比方如用redis进行计数,在任务启动的时候我们会给该任务设个key,该key根据具体的业务逻辑时间设置过期时间,那么我们对应这个任务的计数的key也应该过期时间和它一样,在累加的过程中我们肯定要返回塞值,那如果直接set返回我们的时间可能会丢掉可能会又变成初始时间,这绝对不行的,这里我们先提前说点后面的东西,可以用increase(对应的Spring会提供这个原子类)来加,如果只看我们这里那就是用到KEEPTTL来保持时间的不变,

ex用例
127.0.0.1:6379> set time 123 EX 100
OK
127.0.0.1:6379> get time
"123"
ttl查询
127.0.0.1:6379> ttl time
(integer) 46
127.0.0.1:6379> set time 123 EX 100
OK
127.0.0.1:6379> ttl time
(integer) 98
127.0.0.1:6379> set time 123 keepttl
OK
127.0.0.1:6379> ttl time
(integer) 66
127.0.0.1:6379> ttl time
(integer) 63
127.0.0.1:6379> set time 123 keepttl
OK
127.0.0.1:6379> ttl time
(integer) 58
px用例
127.0.0.1:6379> set ptime 123 px 100000
OK
127.0.0.1:6379> ttl ptime
(integer) 97
px等效用例
127.0.0.1:6379> psetex ptime 100000 123
OK
127.0.0.1:6379> ttl ptime
(integer) 97
127.0.0.1:6379> 

这里我们的psetex输入就会有对应的命令提示;

有些文章说setnx这些命令会被移除,因为简单的set命令也可以完成,我也不知道,我也不敢说,大家知道可以这么用就行了,有谁用谁,谁简单用谁🥗🥗🥗;

结束结束,那就🛴🛴🛴

如果对你有所帮助

点个赞呗