Django-33 Redis2 位圖 哈希 集合 有序集合 zunionstore salary3 2 salary salary2 weight 1 0.5 aggregate max

安裝

pip3 freeze|grep -i redis
pip3 install redis

操作流程

1,建立連接對象

import redis
r = redis.Redis(host='127.0.0.1',port=6379,db=0,password='123456')

2,連接對象.redis命令即可
例如:r.set(key,value)
說明:大部分命令跟redis終端中使用雷同

位圖

常用命令

  • setbit key index (0|1)
  1. key 不存在時,初始化最小字節數的bit位,默認補0
  2. key存在時:滿足長度要求,直接修改當前bit位,不滿足的話在原有value上初始化最小字節數的bit位。
  • setbit key offset
    獲取某一位上的值,返回0或1

  • bitcount key start end
    統計key的值中有多少個1
    注:start和end是字節的索引而不是bit位的索引

應用場景

  • 假設現在我們希望記錄自己網站上的用戶上線頻率,比如說計算用戶A上線了多少天,用戶B上線了多少天,諸如此類,此作爲數據,從而決定讓哪些用戶參加重要活動——這個模式可以使用SETBIT和SETCOUNT來實現。
    哪天上線就在那一天的offset值1。

哈希

定義

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

優缺點

優點:

  • 節約內存空間-特定條件下【1、字段小於512個,2、value不能超過64字節】,如果超過了條件,則不是用散列算法存了。會影響效率。
  • 可按需獲取字段的值
    缺點:
  • 使用過期key功能,key過期功能只能對key進行過期操作,而不能對散列的字段進行過期操作
  • 存儲消耗大於字符串結構

常用命令

  • hset key field value
  • hsetnx key field value
    field不存在則存
  • hmset key field value field value
    設置多個字段
  • hlen key
    返回字段個數
  • hexists key field
    判斷字段是否存在,不存在返回0
  • hget key field
    返回字段值
  • hmget key field field
    返回多個字段值
  • hgetall key
    返回所有鍵值對
  • hkeys key
    返回key所有的字段名
  • hvals key
    返回key所有值
  • hdel key field
    刪除key的field
  • hincrby key field increment
  • hincrbyfloat key field increment
    在字段對應值上進行整數增量運算

應用場景

1、用戶維度數據統計
原理:基於hash壓縮特點,和字段可計數
用戶維度統計
統計包括:關注數、粉絲數、喜歡商品數、發帖數
用戶key,不同維度爲field,value爲統計數
比如關注了5人

hset user:10000 fans 5
hincrby user:10000 fans 1
hincrby user:10000 fans -1

2、緩存
redis+mysql+hash組合使用
原理:可以按需求取出字段數據,也比較適合做緩存
示例:
用戶想要查詢個人信息
1、到redsi中查詢個人信息
2、redis中查不到,到mysql查詢,並緩存到redis
3、再次查詢個人信息

集合

基礎概念

1、無序、去重
2、元素是字符串類型
3、最多包含2^32-1個元素
類似於Python中所學集合

常用命令

  • sadd key member1 member2
    增加一個或多個元素,自動去重,返回值爲成功插入到集合的元素個數
  • smembers key
    查看集合中的所有元素
  • srem key member1 member2
    刪除一個或多個元素,元素不存在自動忽略
  • sismemeber key member
    元素是否存在
  • srandmember key [count]
    隨機返回集合中指定個數的元素,默認爲1個
  • spop key [count]
    彈出成員
  • scard key
    返回集合中元素的個數
  • smove source destination member
    把元素從源集合移動到目標集合
  • sdiff key1 key2
    差集(number1 1 2 3 number2 1 2 4 結果爲3(左減右爲3))
  • sdiffstore destination key1 key2
    差集保存到另一個集合中
  • sinter key1 key2
  • sinterstore destination key1 key2
    交集
  • sunion key1 key2
  • sunionstore destination key1 key2
    並集

應用場景

社交類平臺,共同好友-交集
純隨機類抽獎
防止元素重複
黑/白名單

集合如果元素全是整型並且元素個數512個以內,用的是數組實現,否則用的是哈希
  • object encoding 集合key
    返回該集合的底層實現
    hashtable | intset

有序集合

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

常用命令

  • zadd key score member
    在有序集合中添加一個成員,返回值是成功插入到集合中的元素個數
  • zrange key start stop [withscore]
    查看指定區間元素(升序)
  • zrevrange key start stop [withscore]
    查看指定區間元素(降序)
  • zscore key member
    查看指定元素的分值
  • zrangebyscore key min max [withscore] [limit offset count]
    返回指定區間元素
    參數說明:
    min/max:最小值最大值區間,默認閉區間(大於等於或小於等於);(min,可開啓開區間(大於或小於))
    offset:跳過多少個元素
    count:返回幾個
    limit:選項跟mysql一樣
  • zrem key member
    刪除成員
  • zincrby key increment member
    增加或減少分值
  • zrank key member
    返回元素排名
  • zremrangebyscore key min max
    刪除指定區間內的元素(默認閉區間,可做開區間)
  • zcard key
    返回集合中元素的個數
  • zcount key min max
    返回指定範圍中元素的個數(默認閉區間,可做開區間)
  • zunionstore destination numkeys key [weights權重值] [aggregate sum|min|max]

zunionstore salary3 2 salary salary2 weight 1 0.5 aggregate max

2代表集合數量,weights之後,權重1給salary,權重0.5給salary2集合,算完權重之後執行聚合aggregate

應用場景

各種排行榜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章