過期
EXPIRE和TTL
EXPIRE可以設(shè)定一個key的銷毀時間(不需要關(guān)心value的類型):
set resource:lock "demo"
expire resource:lock 120 //設(shè)置resource:lock這個key在120秒之后被回收
EXPIREAT key unixtimestamp:設(shè)置一個key在一個指定的unix時間銷毀
PERSIST key:去掉key的過期限制;
TTL可以用來查看一個key還有多少時間回收;
如果TTL返回-2代表一個KEY不存在(已經(jīng)回收);
如果TTL返回-1代表一個KEY不會過期(直接用set設(shè)置的key)
如果使用set重新設(shè)置了一個KEY值,那么TTL值也會被重置祷蝌;
發(fā)布和訂閱
1,redis提供了一個訂閱和發(fā)布消息的功能消恍,在這個功能中榴徐,redis扮演了一個消息路由服務(wù)的功能;
2羡榴,redis的發(fā)布訂閱功能是在各個客戶端之間的發(fā)布/訂閱碧查;
3,常用命令:
1校仑, SUBSCRIBE channel [channel ...] :訂閱一個頻道忠售;
subscribe warnings errors =>訂閱warnings和errors兩個頻道;
2迄沫, PUBLISH channel message :向頻道中發(fā)布一條消息:
subscribe warnings 'something wrong?'稻扬;
3, UNSUBSCRIBE [channel [channel ...]] :取消訂閱頻道羊瘩,如果直接是UNSUBSCRIBE命令泰佳,則取消所有消息訂閱;
4尘吗,訂閱/發(fā)布的常見使用場景:
redis的訂閱/發(fā)布的性能非常高逝她,可以達(dá)到15000/秒次;非常適合用于完成實施通訊/高效的消息隊列等場景睬捶;
排序
redis中提供了sort命令黔宛,可以對list,set擒贸,sortedset進(jìn)行復(fù)雜的排序功能臀晃,排序的結(jié)果是一個list觉渴;
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
幾個sort的例子:
rpush nlist 2 1 4 7 2 4 6
1,SORT mylist:對mylist進(jìn)行排序(從小到大)徽惋;1 2 2 4 4 6 7
2疆拘,SORT mylist DESC:從大到小寂曹;7 6 4 4 2 2 1
3哎迄,SORT mylist LIMIT 0 3 :從小到大排序并截取0~3位數(shù)據(jù);1 2 2
復(fù)雜的sort:
lpush area_users 1
set user:name:1 sky
set user:level:1 36
lpush area_users 2
set user:name:2 leo
set user:level:2 40
lpush area_users 3
set user:name:3 loo
set user:level:3 20
sort area_users:按照user的id排序隆圆;
sort area_users by user:level:*:按照user:level:id 的值去排序area_users的值漱挚;
sort area_users by user:level:* get user:name:* desc:按照user:level:id的值降序排序,并按照排序的內(nèi)容去得到user:name:*中的值渺氧;
lpush wolfcode:shop:bugs 1 2 3
hset bug:1 priority 2
hset bug:1 details "this is first bug! priority is 2."
hset bug:2 priority 3
hset bug:2 details "this is second bug! priority is 3."
hset bug:3 priority 1
hset bug:3 details "this is third bug! priority is 1."
在get中旨涝,如果get的key對應(yīng)的value是一個hashes
可以使用->獲取hashes中的特定fields:
sort wolfcode:shop:bugs by bug:->priority get bug:->details:按照bug:中的priority字段排序watch:leto的值,并且按照排序完成的值去bug:中的hashes得到details字段值侣背;
scan
scan 命令用于遍歷 key白华,使用增量的方式,性能較高贩耐;
scan 的原理:在掃描之前,設(shè)置一個游標(biāo)值(從0開始)潮太,并可以設(shè)置篩選 key 的模式和增量的數(shù)量(即一次要看多少條數(shù)據(jù))管搪;遍歷的結(jié)果返回一個 list ,list 第一個值代表的是下一次要進(jìn)行迭代的開始的游標(biāo)值(注意铡买,這個值不是下標(biāo)更鲁,就是一個用來表示內(nèi)部位置的值),我們就可以使用這個游標(biāo)值進(jìn)行下一次增量遍歷奇钞,第二個值是一個 list澡为,表示這一次遍歷得到的 key 值;
scan 0 count 3 =>
"2"
"user:level:2"
"user:name:2"
"user:name:3"
scan 2 count 3 =>
"9"
"server:version"
"user:level:3"
"area_users"
"user:name:1"
注意景埃,如果在遍歷的時候媒至,不使用 match,那么count 一般能夠控制住返回的數(shù)量纠亚,如果使用了match塘慕,結(jié)果數(shù)量不定;默認(rèn)count為10蒂胞;(可能返回的內(nèi)容會多于count)图呢;
scan 0 match user:level:* count 3
事務(wù)
redis可以把一組操作包裝在一個事務(wù)塊中,讓這些語句的執(zhí)行具有原子性;
MULTI:代表一個事務(wù)塊的開始蛤织;
EXEC :執(zhí)行一個事務(wù)塊中的語句赴叹,并將連接狀態(tài)恢復(fù)到正常;