路飛專案三:
使用Python操作redis
首先安裝redis,普通連線
pip install redis
import redis conn=redis.Redis('127.0.0.1',6379) conn.set('name','s_jun') print(conn.get('name'))
Python操作Redis之連線池
redis-py使用connection pool來管理對一個redis server的所有連線,避免每次建立、釋放連線的開銷。預設,每個Redis例項都會維護一個自己的連線池。可以直接建立一個連線池,然後作為引數Redis,這樣就可以實現多個Redis例項共享一個連線池
import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379) r = redis.Redis(connection_pool=pool) r.set('foo', 'Bar')print(r.get('foo'))
操作之String操作
conn.set('token','dfsaklasdlkfjas',ex=9) # key值"token" 超過9秒過期
ex,過期時間(秒)
px,過期時間(毫秒)
nx,如果設定為True,則只有name不存在時,當前set操作才執行,值存在,就修改不了,執行沒效果
xx,如果設定為True,則只有name存在時,當前set操作才執行,值存在才能修改,值不存在,不會設定新值
setnx(name, value)
設定值,只有name不存在時,執行設定操作(新增),如果存在,不會修改
setex(name, value, time)
# 設定值
# 引數:
# time,過期時間(數字秒 或 timedelta物件)
psetex(name, time_ms, value)
# 設定值
# 引數:
# time_ms,過期時間(數字毫秒 或 timedelta物件
mset(*args, **kwargs)
批量設定值 如: mset(k1='v1', k2='v2') 或 mget({'k1': 'v1', 'k2': 'v2'})
get(name) # 獲取值
mget(keys, *args)
批量獲取 如: mget('k1', 'k2') 或 r.mget(['k3', 'k4'])
getset(name, value) # 設定新值並獲取原來的值
getrange(key, start, end)
# 獲取子序列(根據位元組獲取,非字元) # 引數: # name,Redis 的 name # start,起始位置(位元組) # end,結束位置(位元組) # 如: "劉清政" ,0-3表示 "劉"
setrange(name, offset, value)
# 修改字串內容,從指定字串索引開始向後替換(新值太長時,則向後新增) # 引數: # offset,字串的索引,位元組(一個漢字三個位元組) # value,要設定的值
setbit(name, offset, value)
# 對name對應值的二進位制表示的位進行操作 # 引數: # name,redis的name # offset,位的索引(將值變換成二進位制後再進行索引) # value,值只能是 1 或 0 # 注:如果在Redis中有一個對應: n1 = "foo", 那麼字串foo的二進位制表示為:01100110 01101111 01101111 所以,如果執行 setbit('n1', 7, 1),則就會將第7位設定為1, 那麼最終二進位制則變成 01100111 01101111 01101111,即:"goo"
getbit(name, offset) # 獲取name對應的值的二進位制表示中的某位的值 (0或1)
bitcount(key, start=None, end=None)
# 獲取name對應的值的二進位制表示中 1 的個數 # 引數: # key,Redis的name # start,位起始位置 # end,位結束位置
bitop(operation, dest, *keys)
# 獲取多個值,並將值做位運算,將最後的結果儲存至新的name對應的值 # 引數: # operation,AND(並) 、 OR(或) 、 NOT(非) 、 XOR(異或) # dest, 新的Redis的name # *keys,要查詢的Redis的name # 如: bitop("AND", 'new_name', 'n1', 'n2', 'n3') # 獲取Redis中n1,n2,n3對應的值,然後講所有的值做位運算(求並集),然後將結果儲存 new_name 對應的值中
strlen(name) # 返回name對應值的位元組長度(一個漢字3個位元組)
incr(self, name, amount=1)
# 自增 name對應的值,當name不存在時,則建立name=amount,否則,則自增。 # 引數: # name,Redis的name # amount,自增數(必須是整數) # 注:同incrby
incrbyfloat(self, name, amount=1.0)
# 自增 name對應的值,當name不存在時,則建立name=amount,否則,則自增。 # 引數: # name,Redis的name # amount,自增數(浮點型)
decr(self, name, amount=1)
# 自減 name對應的值,當name不存在時,則建立name=amount,否則,則自減。 # 引數: # name,Redis的name # amount,自減數(整數)
append(key, value)
# 在redis name對應的值後面追加內容 # 引數: key, redis的name value, 要追加的字串
操作之Hash操作
Hash操作,redis中Hash在記憶體中的儲存格式如下圖:
hset(name, key, value)
# name對應的hash中設定一個鍵值對(不存在,則建立;否則,修改) # 引數: # name,redis的name # key,name對應的hash中的key # value,name對應的hash中的value # 注: # hsetnx(name, key, value),當name對應的hash中不存在當前key時則建立(相當於新增)
hmset(name, mapping)
# 在name對應的hash中批量設定鍵值對 # 引數: # name,redis的name # mapping,字典,如:{'k1':'v1', 'k2': 'v2'} # 如: # r.hmset('xx', {'k1':'v1', 'k2': 'v2'})
hget(name,key) # 在name對應的hash中獲取根據key獲取value
hmget(name, keys, *args)
# 在name對應的hash中獲取多個key的值 # 引數: # name,reids對應的name # keys,要獲取key集合,如:['k1', 'k2', 'k3'] # *args,要獲取的key,如:k1,k2,k3 # 如: # r.mget('xx', ['k1', 'k2']) # 或 # print r.hmget('xx', 'k1', 'k2')