redis 常用API(python)

redis 常用API(python)

通用 API

使用 keys 查詢所有鍵

keys = redis.keys()

使用 type 查看 結構類型

keys = redis.keys()
for key in keys:
    log.info(redis.type(key))

使用 dbsize 查看當前有哪些鍵

log.info(redis.dbsize())

使用 exists 查看鍵是否存在,可以查詢多個,返回存在的個數,所以返回的值爲0時表示都不存在

log.info(redis.exists('world'))

使用 del 刪除鍵,python 提供的API是 delete

redis.append('test','test_value')

log.info(redis.get('test'))

log.info(redis.exists('test'))

redis.delete('test')

log.info(redis.exists('test'))

使用 expire 爲鍵設置過期時間,單位是 秒

redis.expire('test',10)

time.sleep(5)

log.info(redis.exists('test'))

time.sleep(6)

log.info(redis.exists('test'))

使用 ttl 查詢剩餘的過期時間, -1 表示沒有設置過期時間, -2 表示鍵不存在

redis.expire('test',10)

time.sleep(5)

log.info(redis.ttl('test'))

time.sleep(6)

log.info(redis.exists('test'))

使用 object encoding 查看鍵對應的內部編碼

log.info(redis.object('encoding','hello'))

字符串 API

使用 set 進行添加或者更新

# set key value [ex seconds] [px milliseconds] [nx|xx]
# ex 設置秒級別的過期時間
# px 設置毫秒級別的過期時間
# nx 鍵不存在才能設置成功,用於添加
# xx 鍵存在才能設置成功,用於修改

# python 對應 API
def set(self, name, value, ex=None, px=None, nx=False, xx=False)

使用 get 獲取字符串的值

log.info(redis.get('hello'))

使用 mset 批量設置值

# python 中對應的 API ,mapping 在 python 中的是實現是 dict
def mset(self, mapping)

使用 mget 批量獲取值

# 參數可以是多個 key
def mget(self, keys, *args)

log.info(redis.mget('hello','world'))

使用 incr 進行自增

# 不是整數返回錯誤,不存在則是默認值,某則進行遞增
def incr(self, name, amount=1)

# 針對浮點數的操作
def incrbyfloat(self, name, amount=1.0)

使用 append 追加值

def append(self, key, value)

使用 strlen 返回字符串的長度

def strlen(self, name)

使用 getset 設置並返回原來的值

def getset(self, name, value)

使用 setrange 修改指定位置的字符

def setrange(self, name, offset, value)

使用 getrange 獲取指定範圍的字符串

def getrange(self, key, start, end)

哈希 API

使用 hset 設置 一對 field-value(鍵值對)

def hset(self, name, key, value)

使用 hget 獲取值

def hget(self, name, key)

使用 hdel 刪除 field

def hdel(self, name, *keys)

使用 hlen 計算 field 的個數

def hlen(self, name)

使用 hmget 批量獲取

def hmget(self, name, keys, *args)

使用 hmset 批量設置

def hmset(self, name, mapping)

使用 hexists 判斷 field 是否存在

def hexists(self, name, key)

使用 hkeys 獲取所有的 field

def hkeys(self, name)

使用 hvals 獲取所有的 value

def hvals(self, name)

使用 hgetall 獲取所有的 field-value

# 返回一個 dict
def hgetall(self, name)

使用 hincrbyhincrbyfloat 對 field 進行計算操作

def hincrby(self, name, key, amount=1)

def hincrbyfloat(self, name, key, amount=1.0)

使用 hstrlen 計算 value 的長度

def hstrlen(self, name, key)

列表 API

使用 rpush 從列表右邊插入元素

def rpush(self, name, *values)

# 如果列表不存在操作無效
def rpushx(self, name, value)

使用 lpush 從列表左邊插入元素

def lpush(self, name, *values)

def lpushx(self, name, value)

使用 linsert 在某個元素的前或者後插入元素

# where 有 before 和 after 兩種選擇,如果有多個相同值,則只對第一個符合的 refvalue 位置進行操作
def linsert(self, name, where, refvalue, value)

使用 lrange 獲取範圍內的元素

# 0 是開始位置,-1 是結束位置
def lrange(self, name, start, end)

使用 lindex 獲取指定下標元素

def lindex(self, name, index)

使用 llen 獲取列表長度

def llen(self, name)

使用 lpop 從左側彈出元素

def lpop(self, name)

使用 rpop 從列表右側彈出元素

def rpop(self, name)

使用 lrem 刪除指定 value 元素

# 對於 count 的說明,count > 0 ,表示從左到右開始刪除 count 個
# count < 0 , 表示 從右到左開始刪除 count 個
# count = 0 , 表示 刪除所有
def lrem(self, name, count, value)

使用 ltrim 按照索引範圍修剪列表

# 只會留下 start 到 end 範圍的元素
def ltrim(self, name, start, end)

使用 lset 對下標元素進行修改

def lset(self, name, index, value)

使用 blpopbrpop 進行阻塞彈出( 常用於消息隊列的實現 )

# 如果隊列爲空,且timeout爲0,則會一直阻塞下去,知道有元素彈出爲止,如果 timeout 不爲 0,則會阻塞指定時間,除非列表有元素可以彈出
def blpop(self, keys, timeout=0)

def brpop(self, keys, timeout=0)

集合 API

使用 sadd 添加元素

def sadd(self, name, *values)

使用 srem 刪除元素

def srem(self, name, *values)

使用 scard 計算元素個數

def scard(self, name)

使用 sismember 判斷元素是否在集合中

def sismember(self, name, value)

使用 srandmember 隨機返回指定個數的集合

def srandmember(self, name, number=None)

使用 spop 隨機 彈出 指定個數元素( 彈出的元素會從集合中刪除 )

def spop(self, name, count=None)

使用 smembers 獲取所有元素

def smembers(self, name)

使用 sinter 獲取多個集合之間的交集

def sinter(self, keys, *args)

# 將結果保存到 name 爲 dest(參數) 的集合中
def sinterstore(self, dest, keys, *args)

使用 sunion 獲取多個集合之間的並集

def sunion(self, keys, *args)

# 將結果保存到 name 爲 dest(參數) 的集合中
def sunionstore(self, dest, keys, *args)

使用 sdiff 獲取多個集合之間的差集

def sdiff(self, keys, *args)

# 將結果保存到 name 爲 dest(參數) 的集合中
def sdiffstore(self, dest, keys, *args)

有序集合 API

使用 zadd 添加成員

# python api 中 這裏的 score 和 value 需要封裝成 mapping ,也就是 dict
# {str(value):float(score)} 對應 mapping
# nx 用於添加
# xx 用於修改
# ch 返回此次操作有序集合元素和分數變化的個數
# incr 對 score 添加
def zadd(self, name, mapping, nx=False, xx=False, ch=False, incr=False)

使用 zcard 返回成員個數

def zcard(self, name)

使用 zscore 返回成員的分數

def zscore(self, name, value)

使用 zrankzrevrank 計算成員的排名

# 升序,使用 withscores 同時返回分數
def zrank(self, name, value)
# 降序
def zrevrange(self, name, start, end, withscores=False,score_cast_func=float)

使用 zrem 刪除成員

def zrem(self, name, *values)

使用 zincrby 添加成員分數

def zincrby(self, name, amount, value)

使用 zrangezrevrange 返回指定排名範圍的成員

def zrange(self, name, start, end, desc=False, withscores=False,score_cast_func=float)

def zrevrange(self, name, start, end, withscores=False,score_cast_func=float)

使用 zrangebyscorezrevrangebyscore 返回指定分數的成員

def zrangebyscore(self, name, min, max, start=None, num=None,withscores=False, score_cast_func=float)

def zrevrangebyscore(self, name, max, min, start=None, num=None,withscores=False, score_cast_func=float)

使用 zcount 返回指定分數範圍的成員個數

def zcount(self, name, min, max)

使用 zremrangebyrank 刪除指定範圍內的升序成員

def zremrangebyrank(self, name, min, max)

使用 zremrangebyscore 刪除指定分數範圍內的成員

def zremrangebyscore(self, name, min, max)

使用 zinterstore 對多個有序集合進行交集操作

# aggregate 可以對分數進行聚合操作
def zinterstore(self, dest, keys, aggregate=None)

使用 zunionstore 對多個有序集合進行並集操作

def zunionstore(self, dest, keys, aggregate=None)

鍵管理 API

使用 renamerenamenx 對鍵進行重命名

# 將 src 改爲 dst
def rename(self, src, dst)

# 只有當 dst 不存在時操作才能成功,這個 api 更安全一些
def renamenx(self, src, dst)

使用 randomkey 隨機返回一個鍵

def randomkey(self)

使用 **expire expireat pexpire pexpireat ttl pttl ** 都是針對鍵過期的 API

# 指定經過多長時間過期,秒級別
def expire(self, name, time)

# 指定經過多長時間過期,毫秒級別
def pexpire(self, name, time)

# 指定到對應的時間戳過期,秒級別
def expireat(self, name, when)

#指定到對應的時間戳過期,毫秒級別
def pexpireat(self, name, when)

# 查詢過期剩餘時間,秒級別
def ttl(self, name)

# 查詢過期剩餘時間,毫秒級別
def pttl(self, name)

使用 keysscan 進行遍歷所有鍵

# pattern 是使用 glob 風格的通配符
def keys(self, pattern='*')

# cursor 遊標開始位置,match等同於 pattern,count 表示每次遍歷的數量,第一次遍歷 cursor 從 0 開始,當 cursor 再次變爲 0 時,表示遍歷結束相比於 keys 可以更好的防止阻塞的情況,不過 scan 不能保證遍歷到所有的鍵
def scan(self, cursor=0, match=None, count=None)

數據遷移 API

使用 move 針對 redis 內部進行數據遷移

# 將某個鍵遷移到對應數據庫
def move(self, name, db)

使用 dump + restore 實現在不同的 redis 之間進行數據遷移

# 使用 dump 對 key 進行序列化
def dump(self, name)

# 使用 restore 對 key 進行反序列化
def restore(self, name, ttl, value, replace=False)

使用 migrate 進行reids數據遷移,具有原子性

# host 目標 redis 的主機
# port 目標 reids 的端口
# keys 要遷移的數據
# destination_db 目標數據庫的索引
# timeout 遷移的超時時間
# copy 如果是 True 則遷移以後不刪除源 reids 的數據
# replace 如果目標 redis 已經有對應 key 的數據,是否進行覆蓋
# auth 目標主機的密碼
def migrate(self, host, port, keys, destination_db, timeout,copy=False, replace=False, auth=None)

數據庫操作 API

使用 swapdb 交換兩個數據庫數據,redis 中的數據庫不是按照數據庫名來區分,而是使用索引數字,比如有16個數據庫,0表示第一個,15表示最後一個

def swapdb(self, first, second)

使用 flushdbflushall 清除數據庫

def flushdb(self, asynchronous=False)

def flushall(self, asynchronous=False)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章