1. 程式人生 > >python操作Redis快取 python操作Redis快取

python操作Redis快取 python操作Redis快取

python操作Redis快取

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

學習資料: 電子書資源 

聯絡郵箱:[email protected]

flask微電影: movie_project 

閱讀目錄

 

正文

回到頂部

一、Redis的安裝

  xshell連上伺服器,依次輸入以下程式碼:

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

 

  如果不巧發生以下截圖中的錯誤:

  說明未安裝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 

  唉呀呀,終於成功了!

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

 

回到頂部

二、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 ( '按任意鍵結束' )

回到頂部

三、五大資料型別

1.String操作  

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

 

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

+ View Code

   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

回到頂部

四、管道

  redis-py預設在執行每次請求都會建立(連線池申請連線)和斷開(歸還連線池)一次連線操作,如果想要在一次請求中指定多個命令,則可以使用pipline實現一次請求指定多個命令,並且預設情況下一次pipline 是原子性操作。

  View Code 回到頂部

五、釋出和訂閱

  釋出者:伺服器

  訂閱者:Dashboad和資料處理

  Demo如下:

  RedisHelper

 

  訂閱者:

  View Code

 

  釋出者:

  View Code