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>
命令: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>
命令: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]>
命令: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>
命令: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有将键的从新设置为永久有效的命令。
将键从新赋予本身自己的值,能够做为一种消除过时时间的手段。但正规的命令应该是: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]>
命令: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"
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]>