python操做Redis緩存

python操做Redis緩存

https://www.cnblogs.com/guotianbao/p/8683037.htmlhtml

學習資料: 電子書資源 python

聯繫郵箱:gmu1592618@gmail.comgit

flask微電影: movie_project github

 

正文shell

1、Redis的安裝

  xshell連上服務器,依次輸入如下代碼:flask

1
2
3
4
wget http: / / download.redis.io / releases / redis - 3.0 . 6.tar .gz
tar xzf redis - 3.0 . 6.tar .gz
cd redis - 3.0 . 6
make

 

  若是不巧發生如下截圖中的錯誤:centos

  說明未安裝gcc,若是是centos系統,輸入:yum install gcc安裝gcc便可,而後再次輸入make執行。緩存

  輸入make後,很不幸,再次發生以下截圖錯誤:服務器

  推測是由於編譯庫的問題。

  將make改成make MALLOC=libc 再次運行!好事多磨。

     終於安裝成功了!

  還有配置文件的修改什麼的先不折騰了,此時已然能夠啓動Redis服務

1
2
3
4
5
6
7
8
src / redis - server  # 啓動服務端
 
# 啓動客戶端的代碼以下
src / redis - cli
redis>  set  foo bar
OK
redis> get foo
"bar"

     看到上面的圖像,說明服務端已經起來了!

  可是看到不少WARNING,沒錯,此時你用pycharm寫了鏈接redis服務端的代碼,可是你發現服務端居然沒有響應

  OK,在服務端Ctrl + C ,先把服務斷開

  分別執行下面的語句:

1
2
3
4
echo  511  / proc / sys / net / core / somaxconn
echo  "vm.overcommit_memory = 1"  >>  / etc / sysctl.conf
sysctl vm.overcommit_memory = 1
echo never >  / sys / kernel / mm / transparent_hugepage / enabled

  在/etc下的rc.local的最後添加:

1
echo never >  / sys / kernel / mm / transparent_hugepage / enabled

  最後的重點來了,折騰半天仍是服務器不鳥我,無奈之下試了試臨時關閉防火牆:

1
service iptables stop 

  唉呀呀,終於成功了!

  我在另外一臺服務器用了另外一種搭建方法:傳送門也成功了,可是也不要忘記要臨時關掉防火牆。

 

2、Redis的兩種鏈接方式

1.簡單鏈接
1
2
3
4
5
import  redis
conn  =  redis.Redis(host = '207.148.120.229' , port = 6379 )
conn. set ( 'foo' 'Bar' )
print (conn.get( 'foo' ))
=  input ( '按任意鍵結束' )

2.使用鏈接池  

  爲了減小每次創建、釋放鏈接的開銷,推薦使用鏈接池

  redis使用connection pool來管理對一個redis服務的全部鏈接。

  多個redis實例可共享一個鏈接池。

1
2
3
4
5
6
7
import  redis
pool  =  redis.ConnectionPool(host = '207.148.120.229' ,port = 6379 )
conn  =  redis.Redis(connection_pool = pool)
 
conn. set ( 'key' 'Hello World' )
print (conn.get( 'key' ))
=  input ( '按任意鍵結束' )

3、五大數據類型

1.String操做  

  redis中的String在在內存中按照一個key對應一個value來存儲。以鍵值對的方式存儲。

 

  set(name, value, ex=None, px=None, nx=False, xx=False)

   mset(*args, **kwargs) 批量設置值

  View Code

  get(name)  獲取值

print(conn.get('k1'))

  mget(keys, *args) 批量獲取值

  View Code

  getset(name, value) 設置新值並獲取原來的值

  View Code

  getrange(key, start, end)  獲取name對應value的指定字節

  View Code

  setrange(name, offset, value) 從指定字節開始替換新值

  View Code

  strlen(name) 獲取name對應的value的長度

  View Code

  incr(self, name, amount=1) name存在,則自增amount,不然設置name的value值爲amount

  View Code

  decr(self, name, amount=1) 自減(整數)

  View Code

     append(key, value)

  View Code

2.Hash操做

 

  hset(name, key, value)  設置值

  View Code 

  hmset(name, mapping) 批量設置值

  View Code

  hmget(name, keys, *args) 獲取多個值

  View Code

  hgetall(name)  獲取name對應hash的全部鍵值

  View Code

  hlen(name)  獲取name對應的hash中鍵值對的個數

  hkeys(name)  獲取name對應的hash中全部的key的值 

  hvals(name)  獲取name對應的hash中全部的value的值

  hdel(name,*keys)  將name對應的hash中指定key的鍵值對刪除

  hincrby(name, key, amount=1)  自增(整數)

  View Code

  hincrbyfloat(name, key, amount=1.0) 自增(浮點數)

  hscan(name, cursor=0, match=None, count=None)   增量式迭代獲取

  View Code

  hscan_iter(name, match=None, count=None)

  View Code

3.List操做

  lpush(name,values)  

  View Code

  lpushx(name,value)

  View Code 

  llen(name)  name對應的list元素的個數

  linsert(name, where, refvalue, value))

  View Code 

  r.lset(name, index, value)

  View Code 

  r.lrem(name, value, num)

  View Code 

  lpop(name)

  View Code

  lindex(name, index)  在name對應的列表中根據索引獲取列表元素

  lrange(name, start, end)

  View Code 

  ltrim(name, start, end)

  View Code 

  rpoplpush(src, dst)

  View Code 

  blpop(keys, timeout)

複製代碼
# 將多個列表排列,按照從左到右去pop對應列表的元素
 
# 參數:
    # keys,redis的name的集合
    # timeout,超時時間,當元素全部列表的元素獲取完以後,阻塞等待列表內有數據的時間(秒), 0 表示永遠阻塞
 
# 更多:
    # r.brpop(keys, timeout),從右向左獲取數據
複製代碼

  brpoplpush(src, dst, timeout=0)

  View Code

  自定義增量迭代

  View Code

4.Set操做

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

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

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

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

  sdiffstore(dest, keys, *args)  獲取第一個name對應的集合中且不在其餘name對應的集合,再將其新加入到dest對應的集合中

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

  sinterstore(dest, keys, *args)  獲取多一個name對應集合的並集,再講其加入到dest對應的集合中

  sismember(name, value)  檢查value是不是name對應的集合的成員

  smembers(name)    獲取name對應的集合的全部成員

  smove(src, dst, value)  將某個成員從一個集合中移動到另一個集合

  spop(name)  從集合的右側(尾部)移除一個成員,並將其返回

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

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

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

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

  sscan_iter(name, match=None, count=None)  同字符串的操做,用於增量迭代分批獲取元素,避免內存消耗太大

5.有序集合

  在集合的基礎上,爲每元素排序;元素的排序須要根據另一個值來進行比較,因此,對於有序集合,每個元素有兩個值,即:值和分數,分數專門用來作排序。

  zadd(name, *args, **kwargs)  在name對應的有序集合中添加元素

  View Code

  zcard(name)  獲取name對應的有序集合元素的數量

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

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

  View Code

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

  View Code

  zrank(name, value)  

  View Code

  zrangebylex(name, min, max, start=None, num=None)

  View Code

  zrem(name, values)

  View Code

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

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

  zremrangebylex(name, min, max)  根據值返回刪除

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

  zinterstore(dest, keys, aggregate=None)

  View Code

  zunionstore(dest, keys, aggregate=None)

  View Code

  zscan_iter(name, match=None, count=None,score_cast_func=float)  同字符串類似,相較於字符串新增score_cast_func,用來對分數進行操做

6.其餘經常使用操做

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

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

  keys(pattern='*')

  View Code

  expire(name ,time)  爲某個redis的某個name設置超時時間

  rename(src, dst)  對redis的name重命名

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

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

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

  scan(cursor=0, match=None, count=None)

  scan_iter(match=None, count=None)  同字符串操做,用於增量迭代獲取key

4、管道

  redis-py默認在執行每次請求都會建立(鏈接池申請鏈接)和斷開(歸還鏈接池)一次鏈接操做,若是想要在一次請求中指定多個命令,則可使用pipline實現一次請求指定多個命令,而且默認狀況下一次pipline 是原子性操做。

  View Code

5、發佈和訂閱

  發佈者:服務器

  訂閱者:Dashboad和數據處理

  Demo以下:

  RedisHelper

 

  訂閱者:

  View Code

 

  發佈者:

  View Code
相關文章
相關標籤/搜索