Skip to content

其他命令

排序

类似关系型数据库中的order by关键字

命令作用
SORT source-key [LIMIT offset count] [alpha] [ASC|DESC] [STORE dest-key]根据条件进行排序并保存
shell
# 模拟数据
$ RPUSH list 0 1 10 12 5 9 6
$ LRANGE list 0 -1
1)  "0"
2)  "1"
3)  "10"
4)  "12"
5)  "5"
6)  "9"
7)  "6"
# 倒序展示5个元素
$ SORT list LIMIT 0 5 DESC
1)  "12"
2)  "10"
3)  "9"
4)  "6"
5)  "5"
# 正序并将结果保存到dest
$ SORT list LIMIT 0 5 ALPHA ASC STORE dest
"5"
$ LRANGE dest 0 -1
1)  "0"
2)  "1"
3)  "5"
4)  "6"
5)  "9"

ALPHA表示对元素进行字母表顺序排序。

SORT支持LISTHASHSET进行排序

Redis基本事务

Redis基本事务:让一个客户端在不被其他客户端打断的情况下执行多个命令,这需要用到MULTIEXEC命令,与关系型数据库不同是:被MULTIEXEC包裹的所有命令会一个接一个的执行,直到所有命令执行完毕,当一个事务执行完毕后,Redis才会处理其他客户端的命令。

Redis提供了5个命令用于不被打断的情况下对多键执行操作,它们分别是:WATCHMULTIEXECUNWATCHDISCARD

Redis接受到MULTI命令时,会键之后收到的命令放入队列中,直到客户端发送EXEC。然后就会在不被打断的情况下一条一条的执行命令。python上的redis库是通过pipeline实现,将多个命令打包好再发送给redis,减少网络通信的往返次数。

python
def incr_decr():
    # 获取队列
    pipeline = connection.pipeline()
    pipeline.incr('tran')
    time.sleep(1)
    pipeline.decr('tran')
    print(pipeline.execute()[0])

"""
三个线程事务的执行加减法
"""
def transaction():
    for i in range(3):
        threading.Thread(target=incr_decr).start()
    time.sleep(.5)
    
    
# result: 1 1 1
transaction()

过期时间

Redis中可以通过设置Expire time来让键在给定的时间后自动被删除。

命令作用
PERSIST移除键的过期时间
TTL查看指定键过期时间还有多少秒
EXPIRE key second给定键指定后过期
EXPIREAT key timestamp给定键指定UNIX时间戳格式后过期
PTTL查看指定键过期时间还有多少毫秒
PEXPIRE给定键指定毫秒后过期
PEXPIREDAT给定键指定毫秒级别UNIX时间戳格式后过期

对于除了STRING这样的结构来说,EXPIRE只会将整个键过期,而不会只过期其中的某条数据。

shell
# 设置key-value
$ SET hello world
# 设置2s后过期,设为-1等于不过期
$ EXPIRE hello 2
# 2s后获取key对应的value不村子
$ GET hello
null
# 查看距离过期还有多久s
$ TTL hello
"10"
#如果已经过期返回-2
$ TTL hello
"-2"
# 如果未设置过期时间,返回-1
$ TTL demo
"-1"