redis佇列去重 Redis常用功能

2021-10-19 22:27:29 字數 3961 閱讀 2649

5大應用場景:1.快取技術; 2.列隊; 3. 去重技術; 4. 積分板; 5.訂閱與發布

redis應用場景使用redis做快取redis的字串、雜湊表兩種結構適合做key與value資訊

使用redis做佇列使用列表可以實現普通級和優先順序佇列功能

使用有序集合資料結構,可以實現優先順序列隊

使用雜湊表可以實現 延時佇列

使用redis去重利用集合,實現小批量資料去重

利用字串資料結構的位操作,實現布隆過濾,大規模去重

利用自帶的hyperloglog資料結構,可以實現超大規模去重和計數

使用redis實現積分板塊有序集合可以實現積分版功能,自動排序排名等

使用redis實現發布訂閱功能自帶的訂閱發布模式可以實現多對多發布訂閱

連線redis

簡單連線通常本機沒有設定密碼 可以簡寫為

7import redis

"""decode_responses 寫存的資料是字串形式"""

r = redis.redis(host='ip位址', port=6379, db=0, password='設定的密碼', decode_responses=true) # 預設db=0

"""本地redis無密碼可以簡寫"""

r = redis.redis()

連線池當併發量比較高的時候, 頻繁的連線建立和釋放對效能會有較高的影響;連線池的原理是, 通過預先建立多個連線, 當進行redis操作時, 直接獲取已經建立的連線進行操作。

6import redis

"""decode_responses 寫存的資料是字串形式"""

pool = redis.connectionpool(host='ip位址', port=6379, db=0, password='設定的密碼', decode_responses=true) # 預設db=0

r = redis.redis(connection_pool=pool)

1. 字串

插入字串

簡單插入

1r.set('key', 'value')

nx=true控制相同key不覆蓋

1r.set('key', 'value', nx=true) # 不覆蓋

獲取通過get獲取到的是bytes型別,所以需要decode轉換

1ret = r.get('key2').decode()

數字增量 incr(key) 數字增加、引數2預設1= 增加1

數字減量 decr(key) 數字減小、引數2預設1= 減1

使用場景常用於記錄簡單的對映關係。 例如 一萬個員工資訊與工號的關係 ,key=工號、value=員工名

弊端資料量超過百萬級,字串儲存會造成大量記憶體浪費, 此時推薦用redis的hash資料儲存,記憶體佔用率只有字串型別1/4,速度不比字串形式差

當資料量上百萬級時候,執行 keys * 會很卡,所以在不知道資料體量時,切勿執行 keys *命令

2. 列表列表分左右兩個方向,所以可以從兩側對列表進行操作

還有很多操作例如:

lrem 刪除指定元素

lindex 獲取指定下標的值

ltrim 修剪列表

linsert 指定位置新增元素

lpushx 如果存在新增,不存在不新增

rpushx 同上

blpop 有值就取出,否則阻塞等待

brpop 同上

brpoplpush 同上

插入資料插入

描述語法

從左插入

原生語法

lpush list str

從左插入

redis模組

r.lpush(list, str)

從右插入

原生語法

rpush list str

從右插入

redis模組

r.rpush(list, str)

檢視資料

查資料長度檢視

描述語法

檢視長度

原生語法

llen key

檢視長度

redis模組

r.llen(key)

根據索引查詢索引從左邊開始,可以為-1 例如 檢視右邊5條。lrange key -5 -1

查詢描述

語法根據索引查詢

原生語法

lrange key 0 2 查詢索引 0-2的

根據索引查詢

redis模組

r.lrange(list, 0,2)

檢視列表所有

原生語法

lrange key 0 -1

檢視列表所有

redis模組

r.lrange(list, 0,-1)

檢視列表所有資料在不知道資料量的時候,切勿查詢所有,應當先檢視其長度

查詢描述

語法檢視列表所有

原生語法

lrange key 0 -1

檢視列表所有

redis模組

r.lrange(list, 0,-1)

彈出資料除了讀取,還能彈出pop資料,彈出也分左右,注意資料彈出後會被刪除

彈出描述

語法從左彈出

原生語法

lpush key

從左彈出

redis模組

r.lpop(key)

從右彈出

原生語法

rpush key

從右彈出

redis模組

r.rpop(key)

修改資料支援,根據索引查修改資料值

修改描述

語法修改資料

原生語法

lset key index new_str

修改資料

redis模組

r.lset(key, index, value)

3. 集合集合與列表不同之處: 集合資料不能重複,且集合沒有方向!

集合的應用根據集合內資料不重複的特性實現去重並記錄資訊

多個集合可以做交集、差集等計算

比如: 學生課程監控,學生報名每一門課為乙個集合, 這樣就可以計算出,既報了學科a 又報名了學科b的學生。 或者只報名了a沒報名b的學生

插入資料1sadd key value1 value2

key 可以是數字、字母、下劃線、中文 但是不建議使用中文

value 可以是乙個或者多個,如果多個則必須用空格隔開

插入順序無關

插入後返回插入資料量(去重之後的)

查詢資料spop取出的資料會被刪除掉, 但是 smembers取全部資料不會刪除

功能描述

語法取元素數量

原生語法

scard key

取元素數量

redis模組

r.scard(key)

取資料原生語法

spop key sount count為取多少資料 預設1條

取資料redis模組

r.spop(key)

取全部資料

原生語法

smembers key

取全部資料

redis模組

r.smembers(key)

判斷是否存在

原生語法

sismembers key 存在返回1

判斷是否存在

redis模組

r.sismembers(key)

刪除資料1srem key value1 value2

集合的交集概念:集合a 與 集合b ,a與b都有的資料集合稱為交集

1sinter key key2

集合的並集概念:集合a 與 集合b ,兩個集合合併在一起並去重

1sunion key key2

集合的差集概念:集合a 與 集合b ,只屬於自己的集合,與上面兩個相反

1sdiff key key2

redis 佇列 redis 延時佇列

定時發公告 使用者下單30分鐘後未付款自動關閉訂單 使用者下單後延時簡訊提醒 延時關閉空閒客戶端連線 使用redis提供的有序資料結構zset,把過期時間戳作為score。public void produce string topic,string msg,date date 生產訊息 於 消費 ...

用redis實現scrapy的url去重與增量爬取

scrapy 自帶了去重方案,通過rfpdupefilter類完成去重,檢視原始碼。def request seen self,request fp self.request fingerprint request if fp in self.fingerprints return true sel...

python資料去重並存入redis資料庫

import redis import os import re redis資料庫連線 r redis.strictredis host localhost port 6379 db 0 利用redis total set 去重 defadd os.getcwd 返回表示當前工作目錄的字串 path...