1. 程式人生 > >路飛專案三:

路飛專案三:




使用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')