博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis 笔记系列(六)——redis键相关命令笔记
阅读量:7009 次
发布时间:2019-06-28

本文共 6010 字,大约阅读时间需要 20 分钟。

hot3.png

 redis有关key的命令

(1)查看当前库的所有key及get、set的衍生操作

DBSIZE查看当前库的key的个数,keys * 查看当前库的所有key。

127.0.0.1:6379> DBSIZE(integer) 0127.0.0.1:6379> 127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379>

先获取当前值返回,再设置值

127.0.0.1:6379> get k4"thanks"127.0.0.1:6379>127.0.0.1:6379>127.0.0.1:6379> getset k4 welcome"thanks"127.0.0.1:6379> get k4"welcome"

获取多个,设置多个

127.0.0.1:6379> mget k1 k2 k3 k41) "99"2) "i love anyone but ye to leave"3) (nil)4) "welcome"127.0.0.1:6379>127.0.0.1:6379> mset k1 100 k2 'I love you, but have to leave.' k3 v3 k4 thanksOK127.0.0.1:6379> mget k1 k2 k3 k41) "100"2) "I love you, but have to leave."3) "v3"4) "thanks"127.0.0.1:6379>

 

 

(2)查看某个键是否存在

命令:exists 【key名称】

127.0.0.1:6379> set k1 v1OK127.0.0.1:6379> set k2 v2OK127.0.0.1:6379> set k3 v3OK127.0.0.1:6379> exists k1(integer) 1127.0.0.1:6379> exists k10(integer) 0127.0.0.1:6379> 127.0.0.1:6379>

 在使用Java通过Jedis来操作redis中的键值对时,需要判断某个键是否存在时就可以用到EXISTS命令。(Jedis是Redis的Java客户端)

如下面的代码便是java通过jedis访问本地的redis服务的示例。

//连接本地Jedis服务Jedis jedis = new Jedis("127.0.0.1",6379);//查看服务是否运行,打出PONG,表示OKSystem.out.println("connection is ok =====> : " + jedis.ping());

只要将这些redis命令掌握,就可以轻松的在java程序中通过jedis对redis进行操作。

如果想在设置某个键的值时希望:如果该键存在不赋值,该键不存在则设置value。那么可以用命令:

setnx 【key名称】【value值】

1) "k3"2) "k2"3) "k1"127.0.0.1:6379>127.0.0.1:6379>127.0.0.1:6379>127.0.0.1:6379> get k3"hello"127.0.0.1:6379> setnx k3 bye(integer) 0127.0.0.1:6379> get k3"hello"127.0.0.1:6379>127.0.0.1:6379>127.0.0.1:6379> setnx k4 thanks(integer) 1127.0.0.1:6379> get k4"thanks"127.0.0.1:6379>

如果需要同时操作多个不存在则设置,可以用命令:

msetnx 【key名称1】【value值1】【key名称2】【value值2】... ...

但是需要注意的是,msetnx 就像一个完整的事务,一旦一个setnx不成功,则整个都完蛋。

127.0.0.1:6379> keys *1) "k2"2) "k1"3) "k4"127.0.0.1:6379> msetnx k3 v3 k4 v4 k5 v5(integer) 0127.0.0.1:6379> keys *1) "k2"2) "k1"3) "k4"127.0.0.1:6379> get k4"thanks"127.0.0.1:6379>

 

 

(3)将当前库的某个键值对移动得到其他库。

命令:move 【key名称】 【其他库的dbid】

127.0.0.1:6379> 127.0.0.1:6379> keys *1) "k3"2) "k1"3) "k2"127.0.0.1:6379> move k3 2(integer) 1127.0.0.1:6379> keys *1) "k1"2) "k2"127.0.0.1:6379> select 2OK127.0.0.1:6379[2]> keys *1) "k3"127.0.0.1:6379[2]>

 

(4)给当前库的某个key设置有效时间,过期后自动清除

命令:expire 【key名称】【过期时间(单位:秒)】

下面设置了key3的有效期是10秒,然后不停的查看本地库的键列表,10秒之后,k3消失。

127.0.0.1:6379[2]> EXPIRE k3 10(integer) 1127.0.0.1:6379[2]> keys *1) "k3"127.0.0.1:6379[2]> keys *1) "k3"127.0.0.1:6379[2]> keys *1) "k3"127.0.0.1:6379[2]> keys *(empty list or set)127.0.0.1:6379[2]> keys *

如果是想设置key的value的同时设置过期时限,用命令:

setex 【key名称】【过期时间(单位:秒)】【value值】

127.0.0.1:6379> setex k3 600 helloOK127.0.0.1:6379> ttl k3(integer) 593127.0.0.1:6379>

 

(5)查看某个键的有效期还有多久(秒)

命令:ttl 【键的名称】

ttl 即 time to live

下面我们在当前库建了k1、k2、k3三个键值对。然后k1不设置有效期,即永久的;k2设置1小时,即3600秒;k3设置为5秒钟过期。

之后我们可以通过ttl来查看每个键过期的秒数。

如果是-1,则表示永久有效,不存在过期;如果是-2,则表示已经过期或者该键根本不曾存在。

非负数则表示剩余的秒数。

127.0.0.1:6379[2]> set k1 v1OK127.0.0.1:6379[2]> set k2 v2OK127.0.0.1:6379[2]> set k3 v3OK127.0.0.1:6379[2]> expire k2 3600(integer) 1127.0.0.1:6379[2]> expire k3 5(integer) 1127.0.0.1:6379[2]> keys *1) "k3"2) "k1"3) "k2"127.0.0.1:6379[2]> keys *1) "k1"2) "k2"127.0.0.1:6379[2]> 127.0.0.1:6379[2]> get k1"v1"127.0.0.1:6379[2]> get k2"v2"127.0.0.1:6379[2]> get k3(nil)127.0.0.1:6379[2]> 127.0.0.1:6379[2]> 127.0.0.1:6379[2]> ttl k1(integer) -1127.0.0.1:6379[2]> ttl k2(integer) 3547127.0.0.1:6379[2]> ttl k3(integer) -2127.0.0.1:6379[2]>

这里我们需要引出一个问题:

如果一个已经设置了有效期的键被再次set了新的值那么,它的有效期是:

A. 继续原先的已经消耗的有效期,即使用剩余的有效时间之后过期;

B. 还是过期时间会被重置为原先一开始的过期时间长度;

C. 还是过期时间设置被消除成为永久有效

答案是C

127.0.0.1:6379[2]> ttl k2(integer) 3097127.0.0.1:6379[2]> set k2 v2222OK127.0.0.1:6379[2]> ttl k2(integer) -1127.0.0.1:6379[2]>

在做一点扩展:如果set k2的新值与原先的值一样呢,这时候k2的值相当于没有变化,那么其过期时间会被消除掉吗?

答案是,无论你设置的新值与旧值是否相同,过期时间的设置都会被消除。

127.0.0.1:6379[2]> EXPIRE k2 3600(integer) 1127.0.0.1:6379[2]> ttl k2(integer) 3593127.0.0.1:6379[2]> ttl k2(integer) 3583127.0.0.1:6379[2]> set k2 v2222OK127.0.0.1:6379[2]> ttl k2(integer) -1127.0.0.1:6379[2]>

所以,将键重新赋予自己本身的值,可以作为一种消除过期时间的手段。但这是旁门左道,redis有将键的重新设置为永久有效的命令。

 

(6)将键设置为永久有效。

将键重新赋予自己本身的值,可以作为一种消除过期时间的手段。但正规的命令应该是:persist k1

127.0.0.1:6379[2]> get k1"v1"127.0.0.1:6379[2]> EXPIRE k1 5000(integer) 1127.0.0.1:6379[2]> ttl k1(integer) 4995127.0.0.1:6379[2]> PERSIST k1(integer) 1127.0.0.1:6379[2]> ttl k1(integer) -1127.0.0.1:6379[2]>

 

 

 

(7)查看某个键的类型

命令:type 【key名称】

我们查看之前的k2类型,是string类型;再设置一个k4类型,为4,结果还是string类型。还记得上一篇博客的redis五大数据类型吗?千万别还傻傻以为“是不是有可能会是integer”。

如果创建一个list,用lpush。我们可以看到其数据类型为list。

注意,查看list的时候不能用get,应该借助于lrange命令查看它的0到最后(用-1表示)的整个列表。

127.0.0.1:6379[2]> type k2string127.0.0.1:6379[2]> set k4 4OK127.0.0.1:6379[2]> type k4string127.0.0.1:6379[2]> 127.0.0.1:6379[2]> lpush k5 1 2 3 4 5(integer) 5127.0.0.1:6379[2]> type k5list127.0.0.1:6379[2]> lrange k5 0 -11) "5"2) "4"3) "3"4) "2"5) "1"

 

 

(8)最后拓展:

key的命令还有很多,你可以查阅redisdoc.com。下面列几个结束本文:

(1) pttl 查看某个键过期时间,但是单位是ms。

127.0.0.1:6379[2]> 127.0.0.1:6379[2]> EXPIRE k1 5000(integer) 1127.0.0.1:6379[2]> pttl k1(integer) 4993502127.0.0.1:6379[2]>

(2) del 删除键

127.0.0.1:6379[2]> del k1(integer) 1127.0.0.1:6379[2]> get k1(nil)127.0.0.1:6379[2]>

(3) dump 序列化某个键的值:注意是对值本身,而不是键;值相同,序列化值相同。

127.0.0.1:6379[2]> set k1 gdgdOK127.0.0.1:6379[2]> DUMP k1"\x00\x04gdgd\a\x00\xa1\xe6=s\xa9\xbf\x83\xec"127.0.0.1:6379[2]> set k6 abcOK127.0.0.1:6379[2]> DUMP k6"\x00\x03abc\a\x00&\x9e\xe5\xceI\xb8w\xf8"127.0.0.1:6379[2]>  set k7 abcOK127.0.0.1:6379[2]> DUMP k7"\x00\x03abc\a\x00&\x9e\xe5\xceI\xb8w\xf8"127.0.0.1:6379[2]>

(4) expireat 把某个键设置过期时间,但过期的时间设置的是一个unix时间戳值,即一个具体的时刻。

225119_3m0x_1156339.png

127.0.0.1:6379[2]> EXPIREAT k1 1478357279(integer) 1127.0.0.1:6379[2]> ttl k1(integer) 23127.0.0.1:6379[2]> ttl k1(integer) 21127.0.0.1:6379[2]> ttl k1(integer) 15127.0.0.1:6379[2]> ttl k1(integer) 11127.0.0.1:6379[2]> ttl k1(integer) 8127.0.0.1:6379[2]> ttl k1(integer) 7127.0.0.1:6379[2]> ttl k1(integer) 3127.0.0.1:6379[2]> ttl k1(integer) 1127.0.0.1:6379[2]> ttl k1(integer) -2127.0.0.1:6379[2]>  get k1(nil)127.0.0.1:6379[2]>

(5) pexpire 设置某个键的过期时间,但是单位是ms。

127.0.0.1:6379[2]> ttl k2(integer) -1127.0.0.1:6379[2]> PEXPIRE k2 500(integer) 1127.0.0.1:6379[2]> ttl k2(integer) -2127.0.0.1:6379[2]>

 

转载于:https://my.oschina.net/happyBKs/blog/782309

你可能感兴趣的文章
jqprint导入jqgrid表格时,内容溢出的原因以及解决方法
查看>>
IOS self.使用
查看>>
POJ1151 Atlantis
查看>>
UltraEdit编辑器使用心得之正则表达式篇
查看>>
dnspod 批量添加记录
查看>>
ZCMU训练赛-H(模拟)
查看>>
Codeforces Round #449 (Div. 2) A. Scarborough Fair【多次区间修改字符串】
查看>>
CCCC L1-039. 古风排版【图形输出/循环控制行列/模拟/细节】
查看>>
POJ 1182 食物链 【带权并查集/补集法】
查看>>
V字形
查看>>
Flask学习笔记(3)-数据库迁移
查看>>
Hbase常用操作
查看>>
一行命令学会全基因组关联分析(GWAS)的meta分析
查看>>
第二阶段冲刺——six
查看>>
模块封装代码
查看>>
《Machine Learning》(第一章)序章
查看>>
【右键禁用U盘的小技巧】
查看>>
执行sql语句后的数据处理api
查看>>
jquery $.each的用法
查看>>
Python --元组与列表的差异
查看>>