1.redis排序
sort key [by pattern] [asc|desc] [alpha]
rpush key 23,15,110,7
sort key
>> 7 15 23 110
sort key alpha
>> 110 15 23 7 ——按照字母表顺序排序
2.redis 事务
redis事务是可以让一个客户端在不被其他客户端打断的情况下执行多个命令。被muti和exec命令包围的所命令会一个接一个的执行,直到所有的命令都执行完毕。当被执行的命令不会被回滚,批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。。
multi 开启事务
命令队列
exec 执行事务
multi
set a aaa
set b bbb
set c ccc
exec
1) OK
2) OK
3) OK
如果set b bbb 失败的话,set a 已成功不会回滚,set c 还会继续执行。
WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |
UNWATCH 取消 WATCH 命令对所有 key 的监视。
DISCARD 取消事务,放弃执行事务块内的所有命令。
unwatch 命令在watch命令之后,multi命令之前对链接进行重置;discard命令在multi之后,
exec之前对连接进行重置。
it means that 用户在使用watch命令监视一个key或者多个key时,
接着使用multi命令开始一个新事务时仍可以通过discard命令来取消watch命令并且清空所有已经入队的命令。
拓展:
redis 没有实现典型的加锁功能?
在访问以写入为目的的数据的时候(SQL)关系型数据库时会对访问的数据进行加锁,
直到事务被commit或者rollback为止。如果有其他客户端试图对被加锁的数据进行写入时,那么该客户端一直被堵塞,直到第一个事务执行完毕。
缺点在于,持有锁的客户端运行越慢,等待解锁的客户端被阻塞的时间就越长。
因为加锁有可能造成长时间的等待,所以redis为了尽可能减少客户端的等待时间,
并不会在执行watch命令时对数据进行加锁。
相反地,redis只会在数据被其他客户端抢先修改了的情况下,通知执行了watch命令的客户端,这种做法就是乐观锁。而关系型数据库执行加锁的操作称为悲观锁。
3.设置键的过期时间
persist key ——移除键的过期时间
ttl key——查看指定键距离过期时间还有多少秒
expire key seconds——让给定的键在指定的秒数内过期
网友评论