iT邦幫忙

DAY 13
2

建立API為中心的輕量級網站系列 第 13

redis 的 Sets, Sorted Sets 資料型態與有時效的key

  • 分享至 

  • xImage
  •  

TTL (Time To Live) 是指出key有時效的屬性,時間到了就不見了。
Sets
沒有分序列的集合,不同於有序列的陣列,元素也不會有重覆。
SADD 將元素推進集合。
SMEMBERS 列出該集合所有元素。
SISMEMBER 查某元素是否屬該集合。
SINTER 列出兩集合的交集的元素。
SUNION 列出兩集合聯集的元素。
SPOP 隨機移出集合裡的一元素。
SREM 從集合移出一個或多個元素。

redis 127.0.0.1:6379> sadd i5:type:tech twtw
(integer) 1
redis 127.0.0.1:6379> sadd i5:type:tech chiounan
(integer) 1
redis 127.0.0.1:6379> smembers i5:type:tech
1) "chiounan"
2) "twtw"
redis 127.0.0.1:6379> sadd i5:type:life chiounan
(integer) 1
redis 127.0.0.1:6379> sinter i5:type:tech i5:type:life
1) "chiounan"
redis 127.0.0.1:6379> SISMEMBER i5:type:tech twtw
(integer) 1
redis 127.0.0.1:6379> SISMEMBER i5:type:life twtw
(integer) 0
redis 127.0.0.1:6379> SUNION i5:type:life i5:type:tech
1) "chiounan"
2) "twtw"
redis 127.0.0.1:6379> SPOP i5:type:tech
"chiounan"
redis 127.0.0.1:6379> SREM i5:type:tech twtw
(integer) 1

Sorted Sets
同樣是集合,但元素是再加上數值,而可依每元素的數值做排序。

redis 127.0.0.1:6379> ZADD i5:scores 7515 seanamph
(integer) 1
redis 127.0.0.1:6379> ZADD i5:scores 12033 chiounan
(integer) 1
redis 127.0.0.1:6379> ZADD i5:scores 9977 markshu
(integer) 1
redis 127.0.0.1:6379> ZADD i5:scores 9694 thc
(integer) 1
redis 127.0.0.1:6379> ZADD i5:scores 26040 sunallen
(integer) 1
#升冪排序
redis 127.0.0.1:6379> ZRANGE i5:scores 0 -1
1) "seanamph"
2) "thc"
3) "markshu"
4) "chiounan"
5) "sunallen"
#降冪排序
redis 127.0.0.1:6379> ZREVRANGE i5:scores 0 -1
1) "sunallen"
2) "chiounan"
3) "markshu"
4) "thc"
5) "seanamph"
#加上 WITHSCORES 列出每元素的分數
redis 127.0.0.1:6379> ZREVRANGE i5:scores 0 -1 WITHSCORES
 1) "sunallen"
 2) "26040"
 3) "chiounan"
 4) "12033"
 5) "markshu"
 6) "9977"
 7) "thc"
 8) "9694"
 9) "seanamph"
10) "7515"
#算出分數 5000 ~ 10000 的元素個數
redis 127.0.0.1:6379> ZCOUNT i5:scores 5000 10000
(integer) 3
#列出分數 5000 ~ 10000 的元素
redis 127.0.0.1:6379> ZRANGEBYSCORE i5:scores 5000 10000
1) "seanamph"
2) "thc"
3) "markshu"
#增加某元素的分數
redis 127.0.0.1:6379> ZINCRBY i5:scores 1 thc
"9695"
#列出某元素的分數
redis 127.0.0.1:6379> ZSCORE i5:scores thc
"9695"

有時效的key
透過 expire 的指令,可設定某key在幾秒後 key 被刪除。
TTL 可看key剩多少秒將被刪除。
PERSIST 可取消掉倒數刪除的作用,而讓該key沒有expire的屬性。

redis 127.0.0.1:6379> set gone:after:3mins "2012-10-21 15:57:06 +0800"
OK
redis 127.0.0.1:6379> ttl gone:after:3mins
(integer) -1
redis 127.0.0.1:6379> expire gone:after:3mins 180
(integer) 1
redis 127.0.0.1:6379> ttl gone:after:3mins
(integer) 176
redis 127.0.0.1:6379> ttl gone:after:3mins
(integer) 173
redis 127.0.0.1:6379> PERSIST gone:after:3mins
(integer) 1
redis 127.0.0.1:6379> ttl gone:after:3mins
(integer) -1

也可指定某個時間expire,時間指定需用unix timestamp格式,
例如:2012-10-21 16:18:44 +0800 換算成 1350807518

redis 127.0.0.1:6379> set gone:latter hi
OK
redis 127.0.0.1:6379> TTL gone:latter
(integer) -1
redis 127.0.0.1:6379> EXPIREAT gone:latter 1350807518
(integer) 1
redis 127.0.0.1:6379> TTL gone:latter
(integer) 268

也可再設key的同時也設key的有效時間:

redis 127.0.0.1:6379> SETEX gone:60sec 60 "gone after 60 secs"
OK
redis 127.0.0.1:6379> get gone:60sec
"gone after 60 secs"
redis 127.0.0.1:6379> ttl gone:60sec
(integer) 53

系列文章列表


上一篇
基本的 redis 操作與 Strings Lists Hashes資料型態
下一篇
redis 的 PubSub 功能
系列文
建立API為中心的輕量級網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言