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)
使用 hincrby 和 hincrbyfloat 對 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)
使用 blpop 和 brpop 進行阻塞彈出( 常用於消息隊列的實現 )
# 如果隊列爲空,且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)
使用 zrank 和 zrevrank 計算成員的排名
# 升序,使用 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)
使用 zrange 和 zrevrange 返回指定排名範圍的成員
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)
使用 zrangebyscore 和 zrevrangebyscore 返回指定分數的成員
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
使用 rename 或 renamenx 對鍵進行重命名
# 將 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)
使用 keys 和 scan 進行遍歷所有鍵
# 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)
使用 flushdb 和 flushall 清除數據庫
def flushdb(self, asynchronous=False)
def flushall(self, asynchronous=False)