這篇文章主要介紹redis的使用。 簡單介紹下redis,一個高性能key-value的存儲系統,支持存儲的類型有string、list、set、zset和hash。在處理大規模數據讀寫的場景下運用比較多。 1.連接Redis資料庫: 1)直接連接 2)連接池連接 連接池的原理是, 通過預先創建多個 ...
這篇文章主要介紹redis的使用。
簡單介紹下redis,一個高性能key-value的存儲系統,支持存儲的類型有string、list、set、zset和hash。在處理大規模數據讀寫的場景下運用比較多。
1.連接Redis資料庫:
1)直接連接
import redis red = redis.Redis(host='localhost',port=6379,db=1)
2)連接池連接
連接池的原理是, 通過預先創建多個連接, 當進行redis操作時, 直接獲取已經創建的連接進行操作, 而且操作完成後, 不會釋放, 用於後續的其他redis操作,這樣就達到了避免頻繁的redis連接創建和釋放的目的, 從而提高性能。redis模塊採用ConnectionPool來管理對redis server的所有連接。
import redis pool = redis.ConnectionPool(host='localhost', port=6379,db=1) red = redis.Redis(connection_pool=pool) red.set('key1', 'value1') red.set('key2', 'value2')
2.String類型存取:
set(self, name, value, ex=None, px=None, nx=False, xx=False)
#在Redis中設置值,預設不存在則創建,存在則修改 red.set('key', 'value') #參數: # set(name, value, ex=None, px=None, nx=False, xx=False) # ex,過期時間(秒) # px,過期時間(毫秒) # nx,如果設置為True,則只有key不存在時,當前set操作才執行,同#setnx(key, value) # xx,如果設置為True,則只有key存在時,當前set操作才執行
setex(self, name, value, time) #設置過期時間(秒) psetex(self, name, time_ms, value) #設置過期時間(豪秒)
mset(self, *args, **kwargs)
#批量設置值 red.mget({"key1":'value1', "key2":'value2'})
get(self, name)
#獲取某個key的值 red.get('key1')
mget(self, keys, *args)
#批量獲取 red.mget("key1","key1")
strlen(self, name)
#返回key對應值的位元組長度(一個漢字3個位元組) red.strlen("key")
append(name, value)
#在name對應的值後面追加內容 red.set("key","value") print(r.get("key")) #輸出:'value' r.append("key","one") print(r.get("key")) #輸出:'valueone'
3.Hash類型:一個name對應一個dic字典來存儲。
hset(self, name, key, value)
#name對應的hash中設置一個鍵值對(不存在,則創建,否則,修改) red.hset("name","key","value")
hget(self, name, key)
red.hset("name","key","value") #在name對應的hash中根據key獲取value print(red.hget("name","key"))#輸出:'value'
hgetall(self, name)
#獲取name所有鍵值對 red.hgetall("name")
hmset(self, name, mapping)
#在name對應的hash中批量設置鍵值對,mapping:字典 dic={"key1":"aa","key2":"bb"} red.hmset("name",dic) print(red.hget("name","key2"))#輸出:bb
hmget(self, name, keys, *args)
#在name對應的hash中批量獲取鍵所對應的值 dic={"key1":"aa","key2":"bb"} red.hmset("name",dic) print(red.hmget("name","key1","key2"))#輸出:['aa', 'bb']
hlen(self, name)
#獲取hash鍵值對的個數 print(red.hlen("name"))#輸出:2
hkeys(self, name)
#獲取hash中所有key red.hkeys("name")
hvals(self, name)
#獲取hash中所有value red.hvals("name")
hexists(self, name, key)
#檢查name對應的hash是否存在當前傳入的key print(red.hexists("name","key1"))#輸出:Ture
hdel(self, name, *keys)
#刪除指定name對應的key所在的鍵值對,刪除成功返回1,失敗返回0 print(red.hdel("name","key1"))#輸出:1
hincrby(self, name, key, amount=1)
#與hash中key對應的值相加,不存在則創建key=amount(amount為整數) print(red.hincrby("name","key",amount=10))#返回:10
4.list類型:一個name對應一個列表存儲。
lpush(self, name, *values)
#元素從list的左邊添加,可以添加多個 red.lpush('name','元素1','元素2')
rpush(self, name, *values)
#元素從list右邊添加,可以添加多個 red.rpush('name','元素1','元素2')
lpushx(self, name, *values)
#當name存在時,元素才能從list的左邊加入 red.lpushx('name','元素1')
rpushx(self, name, *values)
#當name存在時,元素才能從list的右邊加入 red.rpushx('name','元素1')
llen(self, name)
#name列表長度 red.llen('name')
linsert(self, name, where, refvalue, value)
# 在name對應的列表的某一個值前或後插入一個新值 red.linsert("name","BEFORE","元素2","元素1.5")#在列表內找到第一個"元素2",在它前面插入"元素1.5" #參數: # name: redis的name # where: BEFORE(前)或AFTER(後) # refvalue: 列表內的值 # value: 要插入的數據
lset(self, name, index, value)
#對list中的某一個索引位置重新賦值 red.lset("name",0,"abc")
lrem(self, name, value, num=0)
#刪除name對應的list中的指定值 red.lrem("name","元素1",num=0) # 參數: # name: redis的name # value: 要刪除的值 # num: num=0 刪除列表中所有的指定值; # num=2 從前到後,刪除2個; # num=-2 從後向前,刪除2個'''
lpop(self, name)
#移除列表的左側第一個元素,返回值則是第一個元素 print(red.lpop("name"))
lindex(self, name, index)
#根據索引獲取列表內元素 print(red.lindex("name",1))
lrange(self, name, start, end)
#分片獲取元素 print(red.lrange("name",0,-1))
ltrim(self, name, start, end)
#移除列表內沒有在該索引之內的值 red.ltrim("name",0,2)
5.set類型:集合是不允許重覆的列表
sadd(self, name, *values)
#給name對應的集合中添加元素 red.sadd("name","aa") red.sadd("name","aa","bb")
scard(self, name)
#獲取name對應的集合中的元素個數 red.scard("name")
smembers(self, name)
#獲取name對應的集合的所有成員 red.smembers('name')
sdiff(self, keys, *args)
#在第一個name對應的集合中且不在其他name對應的集合的元素集合 red.sadd("name","aa","bb") red.sadd("name1","bb","cc") red.sadd("name2","bb","cc","dd") print(red.sdiff("name","name1","name2"))#輸出:{aa}
sismember(self, name, value)
#檢查value是否是name對應的集合內的元素
smove(self, src, dst, value)
#將某個元素從一個集合中移動到另外一個集合
spop(self, name)
#從集合的右側移除一個元素,並將其返回
6.其他常用操作
flushdb(self,asynchronous=False)
#清空當前db中的數據,預設是同步。若開啟非同步asynchronous=True,會新起一個線程進行清空操作,不阻塞主線程
flushall(self,asynchronous=False)
#清空所有db中的數據,預設是同步。非同步同flushdb
delete(self, *names)
#根據name刪除redis中的任意數據類型
exists(self, name)
#檢查redis的name是否存在
keys(self, pattern='*')
#根據* ?等通配符匹配獲取redis的name
expire(self,name ,time)
#為某個name的設置過期時間
rename(self, src, dst)
#重命名
move(self, name, db))
# 將redis的某個name移動到指定的db下
randomkey(self)
#隨機獲取一個redis的name(不刪除)
type(self, name)
# 獲取name對應值的類