Redis操作str、list、hash、set、sortedset、bitmap

通用操作

切換庫(number的值在0-15之間,db0 ~ db15)
select number
查看鍵
keys 表達式 :如 keys *
數據類型
type key
鍵是否存在
exists key
刪除鍵
del key
鍵重命名
rename key newkey
清除當前庫中所有數據(慎用)
flushdb
清除所有庫中所有數據(慎用)
flushall

一,字符串類型(string)

  • 特點

1、字符串、數字,都會轉爲字符串來存儲
2、以二進制的方式存儲在內存中

  • 常用命令

    • 字符串操作

    set key value:設置一個key-value
    set key value nx:設置一個key-value,當key不存在時生效
    get key:獲取key的值
    mset key1 value1 key2 value2:一次性設置多個key-value
    mget key1 key2 key3:一次性獲取多個key對應的值
    set key value ex seconds:設置key-value時添加過期時間,單位秒
    strlen key:獲取指定key對應的值的長度
    getset key value:返回舊值並設置新值,如果鍵不存在,就創建並賦值

    • 數字操作

    incrby key 步長:給key的值增加指定步長
    decrby key 步長:給key的值減少指定步長
    incr key:給key的值增加1
    decr key:給key的值減少1
    incrbyfloat key number:給key的值增加指定浮點數(正數/負數)

    • 過期時間

    方式一
    set key value ex seconds
    方式二
    set key value
    expire key 5:單位秒
    pexpire key 5:單位毫秒
    ttl key:查看指定key剩餘過期時間
    persist key:刪除過期時間,使其不過期

  • 示例

    1、查看 db0 庫中所有的鍵
    select 0
    keys *
    2、設置鍵 trill:username 對應的值爲 user001,並查看
    set trill:username user001
    3、獲取 trill:username 值的長度
    strlen trill:username
    4、一次性設置 trill:password 、trill:gender、trill:fansnumber 並查看
    mset trill:password 123 trill:gender M trill:fansnumber 500
    5、查看鍵 trill:score 是否存在
    exists trill:score
    6、增加10個粉絲
    incrby trill:fansnumber 10
    7、增加2個粉絲(一個一個加)
    incr trill:fansnumber
    incr trill:fansnumber
    8、有3個粉絲取消關注你了
    decrby trill:fansnumber 3
    9、又有1個粉絲取消關注你了
    decr trill:fansnumber
    10、思考、思考、思考…,清除當前庫
    flushdb
    11、一萬個思考之後,清除所有庫
    flushall

二,列表數據類型(List)

  • 特點

1、元素是字符串類型
2、列表頭尾增刪快,中間增刪慢,增刪元素是常態
3、元素可重複
4、最多可包含2^32 -1個元素
5、索引同python列表

  • 列表常用命令


1、從列表頭部壓入元素
LPUSH key value1 value2
2、從列表尾部壓入元素
RPUSH key value1 value2
3、從列表src尾部彈出1個元素,壓入到列表dst的頭部
RPOPLPUSH src dst
4、在列表指定元素後/前插入元素
LINSERT key after|before value newvalue


5、查看列表中元素
LRANGE key startindex stopindex
6、獲取列表長度
LLEN key


7、從列表頭部彈出1個元素
LPOP key
8、從列表尾部彈出1個元素
RPOP key
9、列表頭部,阻塞彈出,列表爲空時阻塞,超時時間設置爲0,就是永久阻塞,直到有數據彈出爲止,遵循先到先出原則
BLPOP key timeout
10、列表尾部,阻塞彈出,規則同上
BRPOP key timeout
11、刪除指定元素
LREM key count value
count>0:表示從頭部開始向表尾搜索,移除與value相等的元素,數量爲count
count<0:表示從尾部開始向表頭搜索,移除與value相等的元素,數量爲count
count=0:移除表中所有與value相等的值
12、刪除指定範圍以外的元素,保留指定範圍內的元素
LTRIM key start stop


13、修改指定下標的元素
LSET key index newvalue

  • 示例

1、查看所有的鍵
keys *
2、向列表 spider:urls 中以RPUSH放入如下幾個元素:01_baidu.com、02_taobao.com、03_sina.com、04_jd.com、05_xxx.com
RPUSH spider:urls 01_baidu.com 02_taobao.com 03_sina.com 04_jd.com 05_pb.com
3、查看列表中所有元素
LRANGE spider:urls 0 -1
4、查看列表長度
LLEN spider:urls
5、將列表中01_baidu.com 改爲 01_tmall.com
LSET spider:urls 0 01_tmall.com
6、在列表中04_jd.com之後再加1個元素 02_taobao.com
LINSERT spider:urls after 04_jd.com 02_taobao.com
7、彈出列表中的最後一個元素
RPOP spider:urls
8、刪除列表中所有的 02_taobao.com
LREM spider:urls 0 02_taobao.com
9、剔除列表中的其他元素,只剩前3條
LTRIM spider:urls 0 2

三,Hash散列數據類型

  • 定義

1、由field和關聯的value組成的鍵值對
2、field和value是字符串類型
3、一個hash中最多包含2^32-1個鍵值對

  • 優點

節約內存空間
1、每創建一個鍵,它都會爲這個鍵儲存一些附加的管理信息(比如這個鍵的類型,這個鍵最後一次被訪問的時間等)
2、鍵越多,redis數據庫在儲存附件管理信息方面耗費內存越多,花在管理數據庫鍵上的CPU也會越多

  • 缺點(不適合hash情況)

1、使用二進制位操作命令:SETBIT、GETBIT、BITCOUNT等,如果想使用這些操作,只能用字符串鍵
2、使用過期鍵功能:鍵過期功能只能對鍵進行過期操作,而不能對散列的字段進行過期操作

  • 哈希常用命令

1、設置單個字段
HSET key field value
HSETNX key field value
2、設置多個字段
HMSET key field value field value
3、返回字段個數
HLEN key
4、判斷字段是否存在(不存在返回0)
HEXISTS key field
5、返回字段值
HGET key field
6、返回多個字段值
HMGET key field filed
7、返回所有的鍵值對
HGETALL key
8、返回所有字段名
HKEYS key
9、返回所有值
HVALS key
10、刪除指定字段
HDEL key field
11、在字段對應值上進行整數增量運算
HINCRBY key filed increment
12、在字段對應值上進行浮點數增量運算
HINCRBYFLOAT key field increment

  • 示例

1,添加一個key爲user001的用戶,username爲teenjeen
HSET user001 username teenjeen
2,給user001添加額外的字段
HMSET user001 age 30 height 182
3,查看user001是否有weight字段
HEXISTS user001 weight
3,查看user001的age的值
HGET user001 age
4,給age添加10歲
HINCRBY user001 age 10
5,查看有哪些字段,以及字段數量
HKEYS user001
HLEN user001
6,刪除age字段
HDEL user001 age

四,集合數據類型(set)

  • 特點

1、無序、去重
2、元素是字符串類型
3、最多包含2^32-1個元素

  • 集合常用命令

1、增加一個或者多個元素,自動去重
SADD key member1 member2
2、查看集合中所有元素
SMEMBERS key
3、刪除一個或者多個元素,元素不存在自動忽略
SREM key member1 member2
4、元素是否存在
SISMEMBER key member
5、隨機返回集合中指定個數的元素,默認爲1個
SRANDMEMBER key [count]
6、彈出成員
SPOP key [count]
7、返回集合中元素的個數,不會遍歷整個集合,只是存儲在鍵當中了
SCARD key
8、把元素從源集合移動到目標集合
SMOVE source destination member
9、差集(number1 1 2 3 number2 1 2 4 結果爲3)
SDIFF key1 key2
10、差集保存到另一個集合中
SDIFFSTORE destination key1 key2
11、交集
SINTER key1 key2
SINTERSTORE destination key1 key2結果保存在新集合中
11、並集
SUNION key1 key2
SUNIONSTORE destination key1 key2 結果保存在新集合中

  • 示例

1,用戶001關注了peiqi,qiaozhi,danni
SADD user001 peiqi qiaozhi danni
2,用戶002關注了peiqi,qiaozhi,suxi
SADD user002 peiqi qiaozhi suxi
3,找出用戶001和用戶002 的共同關注
SINTER user001 user002

五,有序集合(sortedset)

  • 特點

1、有序、去重
2、元素是字符串類型
3、每個元素都關聯着一個浮點數分值(score),並按照分值從小到大的順序排列集合中的元素(分值可以相同)
4、最多包含2^32-1元素

  • 示例
    一個保存了水果價格的有序集合
分值 2.0 4.0 6.0 8.0 10.0
元素 西瓜 葡萄 芒果 香蕉 蘋果

一個保存了員工薪水的有序集合

分值 6000 8000 10000 12000
元素 lucy tom jim jack

一個保存了正在閱讀某些技術書的人數

分值 300 400 555 666 777
元素 核心編程 阿凡提 本拉登 阿姆斯特朗 比爾蓋茨
  • 有序集合常用命令

1、在有序集合中添加一個成員
zadd key score member
2、查看指定索引區間元素(升序)
zrange key start stop [withscores]
withscores:顯示具體數值
3、查看指定索引區間元素(降序)
ZREVRANGE key start stop [withscores]
4、查看指定元素的分值
ZSCORE key member
5、返回指定分值區間元素
zrangebyscore key min max [withscores] [limit offset count]
offset : 跳過多少個元素
count : 返回幾個
小括號 : 開區間
6、刪除成員
zrem key member
7、增加或者減少分值
zincrby key increment member
8、返回元素排名
zrank key member
9、返回元素逆序排名
zrevrank key member
10、刪除指定分值區間內的元素
zremrangebyscore key min max
11、返回集合中元素個數
zcard key
12、返回指定範圍中元素的個數
zcount key min max
13、並集
zunionstore destination numkeys key [weights] [AGGREGATE SUM|MIN|MAX]
如:zunionstore salary3 2 salary salary2 weights 1 0.5 AGGREGATE MAX
其中2:代表集合數量;weights:權重1給salary,權重0.5給salary2。0.5代表取一半的分值,算完權重之後執行聚合AGGREGATE
salary 中有6000分值的Tom,salary2中有8000分值的Tom,那麼根據權重算法6000x1+8000x0.5=10000,並集中Tom的新分值爲10000
14、交集:和並集類似,只取相同的元素
ZINTERSTORE destination numkeys key1 key2 WEIGHTS weight AGGREGATE SUM(默認)|MIN|MAX

位圖操作(bitmap)

  • 定義

1、位圖不是真正的數據類型,它是定義在字符串類型
2、一個字符串類型的值最多能存儲512M字節的內容,位上限:2^32
1MB = 1024KB
1KB = 1024Byte(字節)
1Byte = 8bit(位)

  • 強勢點

可以實時的進行統計,極其節省空間。官方在模擬1億2千8百萬用戶的模擬環境下,在一臺MacBookPro上,典型的統計如“日用戶數”的時間消耗小於50ms, 佔用16MB內存

  • 設置某一位上的值(setbit)

設置某一位上的值(offset是偏移量,從0開始)
setbit key offset value
獲取某一位上的值
GETBIT key offset
統計鍵所對應的值中有多少個 1
BITCOUNT key

  • 示例
# 默認擴展位以0填充
127.0.0.1:6379> set mykey ab
OK
127.0.0.1:6379> get mykey
"ab"
127.0.0.1:6379> SETBIT mykey 0 1
(integer) 0
127.0.0.1:6379> SETBIT mykey 1 1
(integer) 0
127.0.0.1:6379> get mykey
"\xe1b"
127.0.0.1:6379> GETBIT mykey 2
(integer) 0
127.0.0.1:6379> GETBIT mykey 0
(integer) 1
127.0.0.1:6379> bitcount mykey
(integer) 2

應用場景案例

# 網站用戶的上線次數統計(尋找活躍用戶)
	用戶名爲key,上線的天作爲offset,上線設置爲1
# 示例
	用戶名爲 user1:login 的用戶,今年第1天上線,第30天上線
	SETBIT user1:login 0 1 
	SETBIT user1:login 29 1
	BITCOUNT user1:login
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章