Redis 笔记系列(六)——redis键相关命令笔记

 redis有关key的命令

(1)查看当前库的全部key及get、set的衍生操做

DBSIZE查看当前库的key的个数,keys * 查看当前库的全部key。java

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

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

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"

获取多个,设置多个bash

127.0.0.1:6379> mget k1 k2 k3 k4
1) "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 thanks
OK
127.0.0.1:6379> mget k1 k2 k3 k4
1) "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 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> exists k1
(integer) 1
127.0.0.1:6379> exists k10
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379>

 在使用Java经过Jedis来操做redis中的键值对时,须要判断某个键是否存在时就能够用到EXISTS命令。(Jedis是Redis的Java客户端)spa

以下面的代码即是java经过jedis访问本地的redis服务的示例。unix

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

只要将这些redis命令掌握,就能够轻松的在java程序中经过jedis对redis进行操做。code

若是想在设置某个键的值时但愿:若是该键存在不赋值,该键不存在则设置value。那么能够用命令:事务

setnx 【key名称】【value值】get

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) 0
127.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) 1
127.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) 0
127.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) 1
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
127.0.0.1:6379> select 2
OK
127.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) 1
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 *
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 hello
OK
127.0.0.1:6379> ttl k3
(integer) 593
127.0.0.1:6379>

 

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

命令:ttl 【键的名称】

ttl 即 time to live

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

以后咱们能够经过ttl来查看每一个键过时的秒数。

若是是-1,则表示永久有效,不存在过时;若是是-2,则表示已通过期或者该键根本未曾存在。

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

127.0.0.1:6379[2]> set k1 v1
OK
127.0.0.1:6379[2]> set k2 v2
OK
127.0.0.1:6379[2]> set k3 v3
OK
127.0.0.1:6379[2]> expire k2 3600
(integer) 1
127.0.0.1:6379[2]> expire k3 5
(integer) 1
127.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) -1
127.0.0.1:6379[2]> ttl k2
(integer) 3547
127.0.0.1:6379[2]> ttl k3
(integer) -2
127.0.0.1:6379[2]>

这里咱们须要引出一个问题:

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

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

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

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

答案是C

127.0.0.1:6379[2]> ttl k2
(integer) 3097
127.0.0.1:6379[2]> set k2 v2222
OK
127.0.0.1:6379[2]> ttl k2
(integer) -1
127.0.0.1:6379[2]>

在作一点扩展:若是set k2的新值与原先的值同样呢,这时候k2的值至关于没有变化,那么其过时时间会被消除掉吗?

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

127.0.0.1:6379[2]> EXPIRE k2 3600
(integer) 1
127.0.0.1:6379[2]> ttl k2
(integer) 3593
127.0.0.1:6379[2]> ttl k2
(integer) 3583
127.0.0.1:6379[2]> set k2 v2222
OK
127.0.0.1:6379[2]> ttl k2
(integer) -1
127.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) 1
127.0.0.1:6379[2]> ttl k1
(integer) 4995
127.0.0.1:6379[2]> PERSIST k1
(integer) 1
127.0.0.1:6379[2]> ttl k1
(integer) -1
127.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 k2
string
127.0.0.1:6379[2]> set k4 4
OK
127.0.0.1:6379[2]> type k4
string
127.0.0.1:6379[2]> 
127.0.0.1:6379[2]> lpush k5 1 2 3 4 5
(integer) 5
127.0.0.1:6379[2]> type k5
list
127.0.0.1:6379[2]> lrange k5 0 -1
1) "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) 1
127.0.0.1:6379[2]> pttl k1
(integer) 4993502
127.0.0.1:6379[2]>

(2) del 删除键

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

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

127.0.0.1:6379[2]> set k1 gdgd
OK
127.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 abc
OK
127.0.0.1:6379[2]> DUMP k6
"\x00\x03abc\a\x00&\x9e\xe5\xceI\xb8w\xf8"
127.0.0.1:6379[2]>  set k7 abc
OK
127.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时间戳值,即一个具体的时刻。

127.0.0.1:6379[2]> EXPIREAT k1 1478357279
(integer) 1
127.0.0.1:6379[2]> ttl k1
(integer) 23
127.0.0.1:6379[2]> ttl k1
(integer) 21
127.0.0.1:6379[2]> ttl k1
(integer) 15
127.0.0.1:6379[2]> ttl k1
(integer) 11
127.0.0.1:6379[2]> ttl k1
(integer) 8
127.0.0.1:6379[2]> ttl k1
(integer) 7
127.0.0.1:6379[2]> ttl k1
(integer) 3
127.0.0.1:6379[2]> ttl k1
(integer) 1
127.0.0.1:6379[2]> ttl k1
(integer) -2
127.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) -1
127.0.0.1:6379[2]> PEXPIRE k2 500
(integer) 1
127.0.0.1:6379[2]> ttl k2
(integer) -2
127.0.0.1:6379[2]>
相关文章
相关标签/搜索