Python 操作 redis

連接 Redis

import

redis

連接方式:redis提供了2個方法

1:StrictRedis:實現大部分官方的命令

2:Redis:是StrictRedis的子類,用於向後兼容舊版的redis。

官方推薦使用StrictRedis方法。

舉例(普通連接):

import redis

#decode_responses=True 自動解碼

r = redis.Redis(host='127.0.0.1',port=6379,password='123456',db=0,decode_responses=True) #默認數據庫為0

r = redis.StrictRedis(host='10.10.2.14',port=6379,password='123456',decode_responses=True)

連接池:connection pool

管理對一個redis server的所有連接,避免每次建立,釋放連接的開銷。默認,每個redis實例都會維護一個自己的連接池,可以直接建立一個連接池,作為參數傳給redis,這樣可以實現多個redis實例共享一個連接池。

舉例(連接池):

pool = redis.ConnectionPool(host='127.0.0.1',port=6379,password='123456',decode_responses=True

)

r = redis.Redis(connection_pool=pool)

一 、STRING 字符串的操作

1. r.set 設置值

Python 操作 redis

2. r.get 獲取值

Python 操作 redis

3. mset 批量設置值

Python 操作 redis

4. mget(keys, *args) 批量獲取

Python 操作 redis

5. getset 設置新值,打印原值

Python 操作 redis

6. getrange 根據字節獲取子序列

Python 操作 redis

7. setrange 修改字符串內容,從指定字符串索引開始向後替換,如果新值太長時,則向後添加

Python 操作 redis

8. strlen(name) 返回name對應值的字節長度

Python 操作 redis

9. incr 值的累加 amount為累加的值

Python 操作 redis

10. append 在name對應的值後面追加內容

Python 操作 redis

11.type 查看類型

Python 操作 redis

案例

頁面點擊數

假定我們對一系列頁面需要記錄點擊次數。例如論壇的每個帖子都要記錄點擊次數,而點擊次數比回帖的次數的多得多。如果使用關係數據庫來存儲點擊,可能存在大量的行級鎖爭用。所以,點擊數的增加使用redis的INCR命令最好不過了。

​ 當redis服務器啟動時,可以從關係數據庫讀入點擊數的初始值(1237這個頁面被訪問了34634次)

Python 操作 redis

每當有一個頁面點擊,則使用INCR增加點擊數即可。

Python 操作 redis

二、Hash 操作

redis中的Hash 在內存中類似於一個name對應一個dic來存儲

1. hset name對應的hash中設置一個鍵值對(不存在,則創建,否則,修改)

Python 操作 redis

2. hget 在name對應的hash中根據key獲取value

Python 操作 redis

3. hgetall 獲取name對應hash的所有鍵值

Python 操作 redis

4. hmset 在name對應的hash中批量設置鍵值對,mapping:字典

Python 操作 redis

5. hmget 在name對應的hash中獲取多個key的值

Python 操作 redis

6.hlen 獲取hash中鍵值對的個數

hkeys 獲取hash中所有的key的值

hvals 獲取hash中所有的value的值

Python 操作 redis

7. hexists 檢查name對應的hash是否存在當前傳入的key

Python 操作 redis

8. hdel 刪除指定name對應的key所在的鍵值對

Python 操作 redis

9. hincrby 自增hash中key對應的值,不存在則創建key=amount(amount為整數)

Python 操作 redis

10.hincrbyfloat 自增hash中key對應的值,不存在則創建key=amount(amount為浮點數)

自增hash中key對應的值,不存在則創建key=amount(amount為浮點數)

hincrbyfloat(name, key, amount=1.0)

案例

使用hash類型保存多樣化對象,類似二維表結構

當有大量類型文檔的對象,文檔的內容都不一樣時,(即“表”沒有固定的列),可以使用hash來表達。

Python 操作 redis

三、List 操作

redis中的List在內存中按照一個name對應一個List來存儲

1. lpush 在name對應的list中添加元素,每個新的元素都添加到列表的最左邊

Python 操作 redis

2.rpush 同lpush,但每個新的元素都添加到列表的最右邊

Python 操作 redis

3. lpushx 在name對應的list中添加元素,只有name已經存在時,值添加到列表的最左邊

Python 操作 redis

4. rpushx 在name對應的list中添加元素,只有name已經存在時,值添加到列表的最右邊

Python 操作 redis

5. llen name對應的list元素的個數

Python 操作 redis

6. linsert 在name對應的列表的某一個值前或後插入一個新值

Python 操作 redis

7. r.lset 對list中的某一個索引位置重新賦值

Python 操作 redis

8. r.lrem 刪除name對應的list中的指定值

Python 操作 redis

9. lpop 移除列表的左側第一個元素,返回值則是第一個元素

Python 操作 redis

10. lindex 根據索引獲取列表內元素

Python 操作 redis

11. lrange 分片獲取元素

Python 操作 redis

12. ltrim 移除列表內沒有在該索引之內的值(裁剪)

Python 操作 redis

13. rpoplpush(src, dst) 從一個列表取出最右邊的元素,同時將其添加至另一個列表的最左邊

Python 操作 redis

四、Set 操作

Set集合就是不允許重複的列表

1. sadd(name,values) 給name對應的集合中添加元素

Python 操作 redis

2. smembers(name) 獲取name對應的集合的所有成員

Python 操作 redis

3. scard(name) 獲取name對應的集合中的元素個數

Python 操作 redis

4. sdiff(keys, *args) 在第一個name對應的集合中且不在其他name對應的集合的元素集合

Python 操作 redis

5. sinter(keys, *args) 獲取多個name對應集合的並集

Python 操作 redis

6.sismember 檢查value是否是name對應的集合內的元素

Python 操作 redis

7. smove(src, dst, value) 將某個元素從一個集合中移動到另外一個集合

Python 操作 redis

8. spop(name) 從集合的右側移除一個元素,並將其返回

Python 操作 redis

9. srandmember(name, numbers) 從name對應的集合中隨機獲取numbers個元素

Python 操作 redis

10. srem(name, values) 刪除name對應的集合中的某些值

Python 操作 redis

11. sunion(keys, *args) 獲取多個name對應的集合的並集

Python 操作 redis

12. sunionstore(dest,keys, *args) 獲取多個name對應的集合的並集,並將結果保存到dest對應的集合中

Python 操作 redis

案例

社交圈子數據

在社交網站中,每一個圈子(circle)都有自己的用戶群。通過圈子可以找到有共同特徵(比如某一體育活動、遊戲、電影等愛好者)的人。當一個用戶加入一個或幾個圈子後,系統可以向這個用戶推薦圈子中的人。

​ 我們定義這樣兩個圈子,並加入一些圈子成員。

Python 操作 redis

獲取一個圈子的成員

Python 操作 redis

可以使用集合運算來得到幾個圈子的共同成員:

Python 操作 redis

五、有序集合 zset

有序集合:

在集合的基礎上,為每元素排序,元素的排序需要根據另外一個值來進行比較,所以,對於有序集合,每一個元素有兩個值,即:值和分數,分數專門用來做排序。

1. zadd(name, args, *kwargs)

Python 操作 redis

2. zcard(name) 獲取有序集合內元素的數量

Python 操作 redis

3. zcount(name, min, max) 獲取有序集合中分數在[min,max]之間的個數

Python 操作 redis

4. zincrby(name, value, amount) 自增有序集合內value對應的分數

Python 操作 redis

5. zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)

Python 操作 redis

6. zrevrange(name, start, end, withscores=False, score_cast_func=float)

Python 操作 redis

7. zrank(name, value)、zrevrank(name, value)

Python 操作 redis

8. zscore(name, value) 獲取name對應有序集合中 value 對應的分數

Python 操作 redis

9. zrem(name, values) 刪除name對應的有序集合中值是values的成員

Python 操作 redis

10. zremrangebyrank(name, min, max) 根據排行範圍刪除

Python 操作 redis

11. zremrangebyscore(name, min, max) 根據分數範圍刪除

Python 操作 redis

12. zinterstore(dest, keys, aggregate=None)

Python 操作 redis

13. zunionstore(dest, keys, aggregate=None)

Python 操作 redis

其他常用操作

1. delete(*names) 根據name刪除redis中的任意數據類型

Python 操作 redis

2. exists(name) 檢測redis的name是否存在

Python 操作 redis

3. keys(pattern='*') 根據* ?等通配符匹配獲取redis的name

Python 操作 redis

4. expire(name ,time) 為某個name設置超時時間

Python 操作 redis

5. rename(src, dst) 重命名

Python 操作 redis

6. move(name, db)) 將redis的某個值移動到指定的db下

Python 操作 redis

7. randomkey() 隨機獲取一個redis的name(不刪除)

Python 操作 redis

8. type(name) 獲取name對應值的類型

Python 操作 redis

來源:https://segmentfault.com/a/1190000015191422


分享到:


相關文章: