Redis本身支持一些简单的组合型的命令,比如以NX结尾命令都是判断在这个值没有时才进行某个命令。
redis 127.0.0.1:6379> SET name "John Doe"OKredis 127.0.0.1:6379> SETNX name "Dexter Morgan"(integer) 0redis 127.0.0.1:6379> GET name"John Doe"redis 127.0.0.1:6379> GETSET name "Dexter Morgan""John Doe"redis 127.0.0.1:6379> GET name"Dexter Morgan"当然,Redis还支持自定义的命令组合,通过MULTI和EXEC,将几个命令组合起来执行
redis 127.0.0.1:6379> SET counter 0OKredis 127.0.0.1:6379> MULTIOKredis 127.0.0.1:6379> INCR counterQUEUEDredis 127.0.0.1:6379> INCR counterQUEUEDredis 127.0.0.1:6379> INCR counterQUEUEDredis 127.0.0.1:6379> EXEC1) (integer) 12) (integer) 23) (integer) 3redis 127.0.0.1:6379> GET counter"3"你还可以用DICARD命令来中断执行中的命令序列
redis 127.0.0.1:6379> SET newcounter 0OKredis 127.0.0.1:6379> MULTIOKredis 127.0.0.1:6379> INCR newcounterQUEUEDredis 127.0.0.1:6379> INCR newcounterQUEUEDredis 127.0.0.1:6379> INCR newcounterQUEUEDredis 127.0.0.1:6379> DISCARDOKredis 127.0.0.1:6379> GET newcounter"0"6.持久化Redis的所有数据都存储在内存中,但是他也提供对这些数据的持久化。
6.1 数据快照数据快照的原理是将整个Redis中存的所有数据遍历一遍存到一个扩展名为rdb的数据文件中。通过SAVE命令可以调用这个过程。
redis 127.0.0.1:6379> SET name "John Doe"OKredis 127.0.0.1:6379> SAVEOKredis 127.0.0.1:6379> SET name "Sheldon Cooper"OKredis 127.0.0.1:6379> BGSAVEBackground saving started如果你是使用的brew在Mac OSX上安全的Redis,那么rdb文件会存在如下路径
/usr/local/var/db/redis/dump.rdb6.2 Append-Only File(追加式的操作日志记录)Redis还支持一种追加式的操作日志记录,叫append only file,其日志文件以aof结局,我们一般各为aof文件。要开启aof日志的记录,你需要在配置文件中进行如下设置:
appendonly yes这时候你所有的操作都会记录在aof日志文件中
redis 127.0.0.1:6379> GET name(nil)redis 127.0.0.1:6379> SET name "Ganesh Gunasegaran"OKredis 127.0.0.1:6379> EXIT→ cat /usr/local/var/db/redis/appendonly.aof*2$6SELECT$10*3$3SET$4name$18Ganesh Gunasegaran7.管理命令Redis支持多个DB,默认是16个,你可以设置将数据存在哪一个DB中,不同DB间的数据具有隔离性。也可以在多个DB间移动数据。
redis 127.0.0.1:6379> SELECT 0OKredis 127.0.0.1:6379> SET name "John Doe"OKredis 127.0.0.1:6379> SELECT 1OKredis 127.0.0.1:6379[1]> GET name(nil)redis 127.0.0.1:6379[1]> SELECT 0OKredis 127.0.0.1:6379> MOVE name 1(integer) 1redis 127.0.0.1:6379> SELECT 1OKredis 127.0.0.1:6379[1]> GET name"John Doe"Redis还能进行一些如下操作,获取一些运行信息
redis 127.0.0.1:6379[1]> DBSIZE(integer) 1redis 127.0.0.1:6379[1]> INFOredis_version:2.2.13redis_git_sha1:00000000redis_git_dirty:0arch_bits:64multiplexing_api:kqueue......Redis还支持对某个DB数据进行清除(当然清空所有数据的操作也是支持的)
redis 127.0.0.1:6379> SET name "John Doe"OKredis 127.0.0.1:6379> DBSIZE(integer) 1redis 127.0.0.1:6379> SELECT 1OKredis 127.0.0.1:6379[1]> SET name "Sheldon Cooper"OKredis 127.0.0.1:6379[1]> DBSIZE(integer) 1redis 127.0.0.1:6379[1]> SELECT 0OKredis 127.0.0.1:6379> FLUSHDBOKredis 127.0.0.1:6379> DBSIZE(integer) 0redis 127.0.0.1:6379> SELECT 1OKredis 127.0.0.1:6379[1]> DBSIZE(integer) 1redis 127.0.0.1:6379[1]> FLUSHALLOKredis 127.0.0.1:6379[1]> DBSIZE(integer) 08.客户端Redis的客户端很丰富,几乎所有流行的语言都有其客户端,这里就不再赘述,有兴趣的同学可以上Redis的Clients页面去查找。