一.事务
MULTI
COMMAND1
COMMAND2
…
COMMANDn
EXEC 或者 DISCARD (取消)
127.0.0.1:6379> multi
OK
127.0.0.1:6379> lpush ring left
QUEUED
127.0.0.1:6379> zadd student 88 park
QUEUED
127.0.0.1:6379> exec
1) (integer) 2
2) (integer) 1
redis中事务是一组命令集合,EXEC时会执行这组命令,这组命令执行过程中不会执行其它命令,
1)语法错误, 如:命令不存在,命令参数个数不对
如果有语法错误,这组命令中的所有命令都不会执行;
2)运行错误,命令执行时出现的错误,如果对hash类型的key执行lpush命令;
watch命令,监视一个变量,直到下一个exec,discard,unwatch命令,如果exec执行时监视的键值有变化,则事务不会执行, watch命令可以用来对键值加锁(乐观锁)。
二 .键值的过期时间
#expire key time(s) 设置键的过期时间,time秒后会删除键
#ttl key 查看键多长时间后过期,
#persist key 设置键为永久
127.0.0.1:6379> expire ring 300
(integer) 1
127.0.0.1:6379> ttl ring
(integer) 161
127.0.0.1:6379> ttl ring
(integer) 145
127.0.0.1:6379> persist ring
(integer) 1
127.0.0.1:6379> ttl ring
(integer) -1
三 .排序
#sort 可以对list,set,sorted set, (不支持hash类型)排序,默认转换成浮点数排序,加ALPHA则按字母序排序
127.0.0.1:6379> lrange letters 0 -1
1) "c"
2) "A"
3) "D"
4) "B"
5) "m"
6) "k"
7) "N"
127.0.0.1:6379> sort letters ALPHA
1) "A"
2) "B"
3) "c"
4) "D"
5) "k"
6) "m"
7) "N"
更多,可以结合BY GET STORE使用
四 .订阅/发布
#publish channelname message 在channelname发布一个消息,此时订阅此channel的客户端会收到消息
#subscribe channelname 订阅channelname的消息
127.0.0.1:6379> subscribe tv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "message"
#psubscribe globmatch 使用glob通配符订阅
#punsubscribe globmatch 需要与psubscribe成对出现才有用
疑问:订阅状态下,unsubscribe命令不起作用,为什么???
127.0.0.1:6379> subscribe tv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "message"
2) "tv1"
3) "world"
unsubscribe tv1
五.持久化
Redis支持持久化存储数据,即保存数据到硬盘。支持两种方式持久化,RDB方式和AOF方式;
1)RDB方式
RDB,即快照,把内存中的数据生成一份副本保存在硬盘上;如下几种情况会执行快照:
1)根据配置规则,如save 100 10 ,表示如果100s内,有10个键值被修改,就执行快照;
2)用户执行save或者bgsave命令,save命令执行期间不会相应客户端的请求,而bgsave可以立即返回,bgsave通过fork出一个子进程来执行快照,主进程继续接收客户端命令;
3)执行flushall(清空所有数据)命令,如果配置了1)中的快照条件,执行flushall时会触发执行快照;
4)主从复制时,从节点向主节点发sync命令后,主节点会执行快照,并开始缓存此后执行的命令,然后把快照和缓存的命令传输给从节点,从而实现从数据库的复制初始化。
RDB的缺点:redis一旦异常退出,只能恢复到最后一次执行快照时的数据。
2)AOF方式
AOF方式,通过将执行的没条命令写入磁盘来实现持久化,这个过程会降低Redis的性能,AOF文件的存放位置都是dir配置的路径,默认没有开启AOF方式持久化,可以通过配置appendonly yes
启用。