Redis Python 客戶端

目錄

Python Redis
>>> import redis
>>> r = redis.Redis(host='localhost', port=6379, db=0)
>>> r.set('foo', 'bar')
True
>>> r.get('foo')
'bar'

鏈接池

redis-py 使用 Connection Pool 來管理實例對象對 Redis Server 的全部鏈接,避免多個實例對象屢次創建、釋放鏈接的開銷。能夠直接創建一個鏈接池,而後做爲參數創建 Redis 實例對象,這樣就能夠實現多個實例共享一個鏈接池。python

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import redis
 
pool = redis.ConnectionPool(host='192.168.18.11', port=6379)
 
r = redis.Redis(connection_pool=pool)
r.set('foo', 'Bar')
print r.get('foo')

管道

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

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import redis
 
pool = redis.ConnectionPool(host='10.211.55.4', port=6379)
 
r = redis.Redis(connection_pool=pool)
 
# pipe = r.pipeline(transaction=False)
pipe = r.pipeline(transaction=True)
pipe.multi()
pipe.set('name', 'alex')
pipe.set('role', 'sb')
 
pipe.execute()

String 操做

  • 建立值:(默認)不存在則建立,存在則修改。
set(name, value, ex=None, px=None, nx=False, xx=False)

     ex,過時時間(秒)
     px,過時時間(毫秒)
     nx,若是設置爲True,則只有name不存在時,當前set操做才執行
     xx,若是設置爲True,則只有name存在時,崗前set操做才執行
  • 批量建立
mset(*args, **kwargs)

# e.g.
mset(k1='v1', k2='v2')
mset({'k1': 'v1', 'k2': 'v2'})
  • 獲取值
get(name)
  • 批量獲取
mget(keys, *args)

# e.g.
mget('ylr', 'zhaogongzi')
mget(['ylr', 'zhaogongzi'])
  • 獲取字符串長度
strlen(name)
  • 追加:在後面追加內容
append(name, value)
  • 獲取子序列(切片)
getrange(name, start, end)
  • 修改子序列:修改字符串內容,從指定字符串索引開始向後替換,新值太長時,則向後添加。
setrange(name, offset, value)
  • 建立新值並獲取原來的值
getset(name, value)
  • 值自增(整型):自增 name 對應的值,當 name 不存在時,則建立 name=amount,不然,則自增。
incr(self, name, amount=1)
  • 值自增(浮點型):自增 name 對應的值,當 name 不存在時,則建立 name=amount,不然,則自增。
incrbyfloat(self, name, amount=1.0)
  • 自減
decr(self, name, amount=1)

List 操做

  • 建立 List 實例,並添加元素
# 每一個新的元素都添加到列表的最左邊
lpush(name, values)

# 每一個新的元素都添加到列表的最右邊
rpush(name, values)
  • 向已存在的 List 實例添加元素
lpushx(name, value)
rpushx(name, value)
  • 查看元素的個數
llen(name)
  • 插入元素:在某一個值前或後插入一個新值
linsert(name, where, refvalue, value))
  • 獲取某個 index 的值
lindex(name, index)
  • 修改某個 index 的值
r.lset(name, index, value)
  • 刪除指定元素
r.lrem(name, value, num)
  • 彈出
lpop(name)
rpop(name)
  • 切片
lrange(name, start, end)
  • 排他:移除沒有在 [start, end] 索引之間的值
ltrim(name, start, end)

Hash 操做

  • 建立並添加元素
hset(name, key, value)
  • 批量添加
hmset(name, mapping)

# e.g.
hmset('xx', {'k1':'v1', 'k2': 'v2'})
  • 獲取 key 映射的 value
hget(name,key)
  • 批量獲取
mget('xx', ['k1', 'k2'])
hmget('xx', 'k1', 'k2')
  • 獲取全部鍵值對
hgetall(name)
  • 獲取鍵值對的個數
hlen(name)
  • 獲取全部 keys
hkeys(name)
  • 獲取全部 values
hvals(name)
  • 檢查 key 是否存在
hexists(name, key)
  • 刪除指定的鍵值對
hdel(name, *keys)
  • 自增(整型):不存在則建立 key=amount
hincrby(name, key, amount=1)
  • 自增(浮點型)
hincrbyfloat(name, key, amount=1.0)

Set 操做

  • 建立並添加元素
sadd(name,values)
  • 獲取集合中元素的個數
scard(name)
  • 差集:在第一個 name 對應的集合中且不在其餘 name 對應的集合的元素集合
sdiff(keys, *args)
  • 導出差集:獲取第一個 name 對應的集合中且不在其餘 name 對應的集合,再將其新加入到 dest 對應的集合中
sdiffstore(dest, keys, *args)
  • 並集:獲取多個 name 對應集合的並集
sinter(keys, *args)
  • 導出並集:獲取多個 name 對應集合的並集,再講其加入到 dest 對應的集合中
sinterstore(dest, keys, *args)
  • 檢查成員是否存在
sismember(name, value)
  • 獲取全部成員
smembers(name)
  • 移動成員
smove(src, dst, value)
  • 彈出成員
spop(name)
  • 隨機獲取若干個成員
srandmember(name, numbers)
  • 刪除指定成員
srem(name, values)
  • 交集
sunion(keys, *args)
  • 導出交集
sunionstore(dest,keys, *args)

ZSet 操做

對於有序集合,每個元素有兩個值,即:值和分數,分數專門用來作排序。app

  • 建立並添加有序集合
zadd(name, *args, **kwargs)

# e.g.
zadd('zz', 'n1', 1, 'n2', 2)
zadd('zz', n1=1, n2=2)
  • 獲取指定成員數量
zcard(name)
  • 獲取有序集合中分數在 [min,max] 之間的成員個數
zcount(name, min, max)
  • 刪除指定成員
zrem(name, values)
  • 根據分數範圍刪除
zremrangebyscore(name, min, max)
  • 根據排行範圍刪除
zremrangebyrank(name, min, max)
  • 查當作員的分數
zscore(name, value)

常規操做

  • 刪除
delete(*names)
  • 判斷是否存在
exists(name)
  • 重命名
rename(src, dst)
  • 將對象移動到指定的 DB
move(name, db))
  • 判斷對象類型
type(name)
相關文章
相關標籤/搜索