連接 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 設置值
2. r.get 獲取值
3. mset 批量設置值
4. mget(keys, *args) 批量獲取
5. getset 設置新值,打印原值
6. getrange 根據字節獲取子序列
7. setrange 修改字符串內容,從指定字符串索引開始向後替換,如果新值太長時,則向後添加
8. strlen(name) 返回name對應值的字節長度
9. incr 值的累加 amount為累加的值
10. append 在name對應的值後面追加內容
11.type 查看類型
案例
頁面點擊數
假定我們對一系列頁面需要記錄點擊次數。例如論壇的每個帖子都要記錄點擊次數,而點擊次數比回帖的次數的多得多。如果使用關係數據庫來存儲點擊,可能存在大量的行級鎖爭用。所以,點擊數的增加使用redis的INCR命令最好不過了。
當redis服務器啟動時,可以從關係數據庫讀入點擊數的初始值(1237這個頁面被訪問了34634次)
每當有一個頁面點擊,則使用INCR增加點擊數即可。
二、Hash 操作
redis中的Hash 在內存中類似於一個name對應一個dic來存儲
1. hset name對應的hash中設置一個鍵值對(不存在,則創建,否則,修改)
2. hget 在name對應的hash中根據key獲取value
3. hgetall 獲取name對應hash的所有鍵值
4. hmset 在name對應的hash中批量設置鍵值對,mapping:字典
5. hmget 在name對應的hash中獲取多個key的值
6.hlen 獲取hash中鍵值對的個數
hkeys 獲取hash中所有的key的值
hvals 獲取hash中所有的value的值
7. hexists 檢查name對應的hash是否存在當前傳入的key
8. hdel 刪除指定name對應的key所在的鍵值對
9. hincrby 自增hash中key對應的值,不存在則創建key=amount(amount為整數)
10.hincrbyfloat 自增hash中key對應的值,不存在則創建key=amount(amount為浮點數)
自增hash中key對應的值,不存在則創建key=amount(amount為浮點數)
hincrbyfloat(name, key, amount=1.0)
案例
使用hash類型保存多樣化對象,類似二維表結構
當有大量類型文檔的對象,文檔的內容都不一樣時,(即“表”沒有固定的列),可以使用hash來表達。
三、List 操作
redis中的List在內存中按照一個name對應一個List來存儲
1. lpush 在name對應的list中添加元素,每個新的元素都添加到列表的最左邊
2.rpush 同lpush,但每個新的元素都添加到列表的最右邊
3. lpushx 在name對應的list中添加元素,只有name已經存在時,值添加到列表的最左邊
4. rpushx 在name對應的list中添加元素,只有name已經存在時,值添加到列表的最右邊
5. llen name對應的list元素的個數
6. linsert 在name對應的列表的某一個值前或後插入一個新值
7. r.lset 對list中的某一個索引位置重新賦值
8. r.lrem 刪除name對應的list中的指定值
9. lpop 移除列表的左側第一個元素,返回值則是第一個元素
10. lindex 根據索引獲取列表內元素
11. lrange 分片獲取元素
12. ltrim 移除列表內沒有在該索引之內的值(裁剪)
13. rpoplpush(src, dst) 從一個列表取出最右邊的元素,同時將其添加至另一個列表的最左邊
四、Set 操作
Set集合就是不允許重複的列表
1. sadd(name,values) 給name對應的集合中添加元素
2. smembers(name) 獲取name對應的集合的所有成員
3. scard(name) 獲取name對應的集合中的元素個數
4. sdiff(keys, *args) 在第一個name對應的集合中且不在其他name對應的集合的元素集合
5. sinter(keys, *args) 獲取多個name對應集合的並集
6.sismember 檢查value是否是name對應的集合內的元素
7. smove(src, dst, value) 將某個元素從一個集合中移動到另外一個集合
8. spop(name) 從集合的右側移除一個元素,並將其返回
9. srandmember(name, numbers) 從name對應的集合中隨機獲取numbers個元素
10. srem(name, values) 刪除name對應的集合中的某些值
11. sunion(keys, *args) 獲取多個name對應的集合的並集
12. sunionstore(dest,keys, *args) 獲取多個name對應的集合的並集,並將結果保存到dest對應的集合中
案例
社交圈子數據
在社交網站中,每一個圈子(circle)都有自己的用戶群。通過圈子可以找到有共同特徵(比如某一體育活動、遊戲、電影等愛好者)的人。當一個用戶加入一個或幾個圈子後,系統可以向這個用戶推薦圈子中的人。
我們定義這樣兩個圈子,並加入一些圈子成員。
獲取一個圈子的成員
可以使用集合運算來得到幾個圈子的共同成員:
五、有序集合 zset
有序集合:
在集合的基礎上,為每元素排序,元素的排序需要根據另外一個值來進行比較,所以,對於有序集合,每一個元素有兩個值,即:值和分數,分數專門用來做排序。
1. zadd(name, args, *kwargs)
2. zcard(name) 獲取有序集合內元素的數量
3. zcount(name, min, max) 獲取有序集合中分數在[min,max]之間的個數
4. zincrby(name, value, amount) 自增有序集合內value對應的分數
5. zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
6. zrevrange(name, start, end, withscores=False, score_cast_func=float)
7. zrank(name, value)、zrevrank(name, value)
8. zscore(name, value) 獲取name對應有序集合中 value 對應的分數
9. zrem(name, values) 刪除name對應的有序集合中值是values的成員
10. zremrangebyrank(name, min, max) 根據排行範圍刪除
11. zremrangebyscore(name, min, max) 根據分數範圍刪除
12. zinterstore(dest, keys, aggregate=None)
13. zunionstore(dest, keys, aggregate=None)
其他常用操作
1. delete(*names) 根據name刪除redis中的任意數據類型
2. exists(name) 檢測redis的name是否存在
3. keys(pattern='*') 根據* ?等通配符匹配獲取redis的name
4. expire(name ,time) 為某個name設置超時時間
5. rename(src, dst) 重命名
6. move(name, db)) 將redis的某個值移動到指定的db下
7. randomkey() 隨機獲取一個redis的name(不刪除)
8. type(name) 獲取name對應值的類型
來源:https://segmentfault.com/a/1190000015191422
閱讀更多 Python學習 的文章