redis redis命令: 1、字元串: set key value//設置 get key //獲取 incr key //原子增長(一次增長1)屬於原子性 incrby key 50 //增長的值自定義 一次設置和檢索多個值 mset key1 value1 key2 value2,..., ...
redis
redis命令:
1、字元串:
set key value//設置
get key //獲取
incr key //原子增長(一次增長1)屬於原子性
incrby key 50 //增長的值自定義
一次設置和檢索多個值
mset key1 value1 key2 value2,...,
mget key1 key2
exists key //是否存在key
del key //刪除
type key //返回key的類型
expire key time //設置過期時間
或者 set key value ex time
ttl key //檢查鍵的生存剩餘時間
2、列表:
Redis 採用鏈表來實現列表是因為,對於資料庫系統來說,快速插入一個元素到一個很長的列表非常重要。另外一個即將描述的優勢是,Redis 列表能在常數時間內獲得常數長度。
lpush list value1 ...//從左邊 (頭部) 添加一個元素到列表
rpush list value1 .... //.右。。。。。。。。。。。。。。
lrang list 0 -1 //從列表中提取一個範圍內的元素- 1 表示最後一個元素,-2 表示倒數第二個元素.註:是一個O(N)時間複雜度的命令,訪問列表頭尾附近的小範圍是常量時間的操作。
rpop list 從右邊彈出元素(list中就不存在彈出的元素)
lpop list 左
ltrim list 0 2 //僅僅只記住最新的 N 項,丟棄掉所有老的項,即刪除0 -2 範圍以外的值
brpop/blpop tasks 5 //等待 tasks 列表中的元素,如果 5 秒後還沒有可用元素就返回
llen list //獲取列表的長度
3、哈希/散列 (Hashes)
hmset key value1 value2 value3 //設置哈希值
例如:hmset user:1000 username antirez birthyear 1977 verified 1
hget key //獲取hash值
例如:hget user:1000 username -->"antirez"
hincrby birthyear 10 //增長10年
4、Redis 集合 (Sets) 無序
sadd myset value1 value2 ..//添加元素到集合
smembers myset //獲取集合的值
sismember myset 3 //測試成員是否存在
tags //添加標簽
例如:sadd news:1000:tags 1 2 5 77
smembers news:1000:tags // 獲取指定對象的標簽
spop myset value //從集合中隨機刪除一個值
sunionstore :命令通常對多個集合執行交集,然後把結果存儲在另一個集合中,而對單個集合求交集就是其自身,
例如:sunionstore game:1:deck deck
scard myset //集合中元素數量
srandmember myset //獲得隨機元素而不需要從集合中刪除
5、Redis 有序集合 (Sorted sets)
解釋:集合中的每個元素是無序的,但有序集合中的每個元素都關聯了一個浮點值,稱為分數(score,這就是為什麼該類型也類似於哈希,因為每一個元素都映射到一個值)
規則排序:
1) 如果 A 和 B 是擁有不同分數的元素,A.score > B.score,則 A > B。
2) 如果 A 和 B 是有相同的分數的元素,如果按字典順序 A 大於 B,則 A > B。A 和 B 不能相同,因為排序集合只能有唯一元素。
zadd key score value1 //向有序集合中添加
zrange key 0 -1 //獲取有序集合的所有元素(從小到大)
zrevrange key 0 -1 //與上面相反
withscores //返回分數 ,zrange key 0 -1 withscores
範圍操作
zrangebyscore key -inf socre
zremrangebyscore key socre1 score2 //刪除score1 到score2之間的值
zrank key value //集合中元素的排序位置
zrevrank key value //降序排序返回元素的排行
註:
1、有序集合是通過雙端(dual-ported)數據結構實現的,包括跳躍表和哈希表(hashtable),所以我們每次添加元素時 Redis 執行 O(log(N)) 的操作。這還好,但是當我們請求有序元素時,Redis 根本不需要做什麼工作,因為已經是全部有序了
2、集合中的元素都具有相同的分數,允許按字典順序獲取範圍(元素按照 C 語言中的 memcmp 函數進行比較,因此可以保證沒有整理,每個 Redis 實例會有相同的輸出
zrangebylex Key [A[Z 範圍可以是包容性的或者排除性的(取決於第一個字元,即開閉區間),+ 和 - 分別表示正無窮和負無窮
6、點陣圖 (Bitmaps)
點陣圖不是一個真實的數據類型,而是定義在字元串類型上的面向位的操作的集合。由於字元串類型是二進位安全的二進位大對象(blobs),並且最大長度是 512MB,適合於設置 232 個不同的位。
位操作分為兩組:常量時間單個位的操作,像設置一個位為 1 或者 0,或者獲取該位的值。對一組位的操作,例如計算指定範圍位的置位數量。
點陣圖的最大優勢是有時是一種非常顯著的節省空間來存儲信息的方式。例如,在一個系統中,不同用戶由遞增的用戶 ID 來表示,可以使用 512MB 的記憶體來表示 400 萬用戶的單個位信息
setbit key 10 1 //SETBIT 命令把第一個參數作為位數,第二個參數作為要給位設置的值,0 或者1 。如果位的位置超過了當前字元串的長度,這個命令或自動擴充這個字元串。
getbit key 10 //GETBIT 命令只是返回指定下標處的位的值。超出範圍的位(指定的位超出了該鍵下字元串的長度)被認為是 0。