Redis 中的事务
使用MULTI与EXEC之间之间执行多个操作来处理一个事务:
1 127.0.0.1:6379> MULTI
2 OK
3 127.0.0.1:6379> SADD key element
4 QUEUED
5 127.0.0.1:6379> LPUSH helper_key x
6 QUEUED
7 127.0.0.1:6379> EXEC
8 1) (integer) 1
9 2) (integer) 1
MULTI开启事务(开启成功返回OK),MULTI与EXEC之间的多个操作仅仅是暂时缓存起来(我们可以看到返回为QUEUED),直到执行EXEC时,提交事务。
Redis 超时(TTL):数据在限定时间内存活
Redis可以expire对键设置生命周期TTL:
1 /*先存入数据到list中*/
2 127.0.0.1:6379> lpush ttlTestList ttl
3 (integer) 1
4 /*再设置超时时间(为5秒失效)*/
5 127.0.0.1:6379> expire ttlTestList 5
6 (integer) 1
5秒后获取元素为空:
1 127.0.0.1:6379> lpop ttlTestList
2 (nil)
我们看到超时时间一过,ttlTestList键被删除了
1 127.0.0.1:6379> keys *
2 1) "zset"
3 2) "set"
4 3) "helper_key"
5 4) "mylist"
6 5) "user"
7 6) "mykey"
8 7) "relList"
上面的例子使用了EXPIRE来设置超时时间(也可以再次调用这个命令来改变超时时间,使用PERSIST命令去除超时时间 )。
使用ttl:
1 127.0.0.1:6379> lpush ttlTestList ttl
2 (integer) 1
3 /*设置超时时间为10秒*/
4 127.0.0.1:6379> expire ttlTestList 10
5 (integer) 1
6 /*使用ttl查看剩余存活时间*/
7 127.0.0.1:6379> ttl ttlTestList
8 (integer) 5
KEYS 命令
keys pattern 可以查看所在数据库中符合pattern匹配模式的键,pattern通配符:
符号 | 含义 |
? | 匹配一个字符 |
* | 匹配任意字符(包括0个字符) |
[] | 匹配括号里的任意字符,也可以使用“-”表示范围,如a[b-d]可以匹配ab、ac、ad |
\x | 可以匹配转义字符。如匹配?,就使用\? |
1 127.0.0.1:6379[1]> keys list?
2 1) "list1"
注意: keys会便利数据库的所有键,如果键数量较大,不建议在生产使用.
EXISTS 命令
exists 用于判断某个键是否存在,存在返回1,否则返回0.
1 127.0.0.1:6379[15]> keys *
2 1) "testKey"
3 127.0.0.1:6379[15]> exists testKey
4 (integer) 1
5 127.0.0.1:6379[15]> exists testKey2
6 (integer) 0
DEL 命令
del 用于删除一个或多个键,del key [key2…],返回值是删除的键的个数:
1 127.0.0.1:6379[15]> del testKey
2 (integer) 1
3 /*因为之前已经删除testKey键了,再使用del操作时,实际上并没有删除任何键,于是返回0*/
4 127.0.0.1:6379[15]> del testKey
5 (integer) 0
SELECT 命令
Redis 的数据库默认存在编号为0-15的共计16个数据库实例,可以通过设置databases参数修改这个默认设置。我们可以使用SELECT命令选择使用指定的数据库:
1 /*选择使用数据库1*/
2 127.0.0.1:6379[1]> select 1
3 OK
4 /*在数据库1中设置一个键*/
5 127.0.0.1:6379[1]> lpush list1 ele1
6 (integer) 1
7 127.0.0.1:6379[1]> keys *
8 1) "list1"
切换数据库0,在数据库0中是看不到数据库1中的键的:
1 /*切换到数据库0*/
2 127.0.0.1:6379[1]> select 0
3 OK
4 /*数据库0中无键*/
5 127.0.0.1:6379> keys *
6 (empty list or set)
FLUSHALL 命令
flushall 命令会清除所有数据库实例的键值数据(默认配置的话数据库0-15会全删除)。恨他,就用flushall来对付他吧。
TYPE 命令
type 命令用来获取键的类型,返回值可能是 string(字符串类型),list(列表类型),set(集合类型),hash(散列类型),zset(有序集合类型)
RANDOMKEY
randomkey 可以随机获取当前数据库中的一个键。
1 127.0.0.1:6379> select 0
2 OK
3 127.0.0.1:6379> keys *
4 1) "strkey4"
5 2) "setKey"
6 3) "code_list1"
7 4) "foo"
8 5) "strkey3"
9 6) "strkey27"
10 7) "strkey6"
11 8) "strkey5"
12 127.0.0.1:6379> randomkey
13 "strkey4"
14 127.0.0.1:6379> randomkey
15 "setKey"
16 127.0.0.1:6379> randomkey
17 "strkey3"
18 127.0.0.1:6379> randomkey
19 "strkey4"
20 127.0.0.1:6379> randomkey
21 "strkey6"
RENAME 重命名键名
rename oldKeyName newKeyName 将oldKeyName 键改名为newKeyName。
1 127.0.0.1:6379> keys *
2 1) "strkey4"
3 2) "setKey"
4 3) "code_list1"
5 4) "foo"
6 5) "strkey3"
7 6) "strkey27"
8 7) "strkey6"
9 8) "strkey5"
10 127.0.0.1:6379> rename setKey setKey88
11 OK
12 127.0.0.1:6379> keys *
13 1) "strkey3"
14 2) "foo"
15 3) "code_list1"
16 4) "strkey5"
17 5) "strkey6"
18 6) "strkey4"
19 7) "setKey88"
20 8) "strkey27"
MOVE
move 命令可以将一个数据库中的键移动到另一个数据库中:
1 /*数据库0中的key*/
2 127.0.0.1:6379> keys *
3 1) "counter:__rand_int__"
4 2) "key:__rand_int__"
5 3) "strkey3"
6 4) "code_list1"
7 5) "strkey5"
8 6) "strkey6"
9 7) "strkey4"
10 8) "setKey88"
11 9) "mylist"
12 10) "strkey27"
1 /*数据库1中无key*/
2 127.0.0.1:6379> select 1
3 OK
4 127.0.0.1:6379[1]> keys *
5 (empty list or set)
1 /*移动0中的key到1中*/
2 11) "strkey27"
3 127.0.0.1:6379> move foo 1
4 (integer) 1
5 127.0.0.1:6379> keys *
6 1) "counter:__rand_int__"
7 2) "key:__rand_int__"
8 3) "strkey3"
9 4) "code_list1"
10 5) "strkey5"
11 6) "strkey6"
12 7) "strkey4"
13 8) "setKey88"
14 9) "mylist"
15 10) "strkey27"
1 /*查看1中,可以看到刚刚移动过来的key:foo*/
2 127.0.0.1:6379[1]> keys *
3 1) "foo"