###redis實現區間查詢 在實際開發中經常遇到這樣需求:服務端對於客戶端不同的版本區間會做些不同的配置,那么客戶端一個版本過來怎么快速的定位是屬於哪個版本區間呢?可以利用`Sorted Sets`的`zrangebyscore`命令。 ``` zadd myset 1011 v1_start zadd myset 1015 v1_end zadd myset 1018 v2_start zadd myset 1023 v2_end ``` 如上我們像myset里插入了4條數據,代表的意思是版本區間v1是從1011-1015版本,版本區間v2是從1018-1023版本。 注:redis的Sorted Sets需要score必須為float型,所以這里需要對版本號做一個等價的轉換。 那么我現在如何判斷1014版本屬於哪個區間呢,使用zrangebyscore如下操作: ``` zrangebyscore myset 1014 +inf LIMIT 0 1 1)v1_end ``` 返回v1_end說明1014屬於版本區間1,上面的這個命令的意思是在myset中查找第一個score值大於等於1014的member,如果我們查找一個不在區間內的版本,比如1016: ``` zrangebyscore myset 1014 +inf LIMIT 0 1 1)v2_start ``` 返回v2_start說明它不已有的版本區間內。 關於該命令的具體用法可以看這里[這里][1]。 不過這種用法不適合那些區間之間存在重疊的場景。
###實現一個hash里不同的field擁有不同expire的場景 目前redis不支持這個特性,這是redis的設計原則決定的。可以在Hash中每個field對應的value本身含有時間的信息,讓應用自己去理解和處理。 ![][2]
###在redis里維護自增長的主鍵 有時候可能需要在redis的多個數據結構之間維護一個類似關系型數據庫中的自增長主鍵,可以利用Sorted Sets的ZINCRBY ``` zincrby myset 1 config_no 1)2 ``` 上面的意思是將myset中的config_no的score值加1,讓key不存在或member不存在時上面的命令相當於: ``` zadd myset 1 config_no 1)1 ``` [1]: http://manual.csser.com/redis/sorted_set/zrangebyscore.html [2]: http://zhanjindong.info/wp-content/uploads/2014/02/11.png