您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“怎么使用Python操作Redis數(shù)據(jù)庫(kù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么使用Python操作Redis數(shù)據(jù)庫(kù)”吧!
Redis是一個(gè)開(kāi)源的基于內(nèi)存也可持久化的Key-Value數(shù)據(jù)庫(kù),采用ANSI C語(yǔ)言編寫。它擁有豐富的數(shù)據(jù)結(jié)構(gòu),擁有事務(wù)功能,保證命令的原子性。由于是內(nèi)存數(shù)據(jù)庫(kù),讀寫非常高速,可達(dá)10w/s的評(píng)率,所以一般應(yīng)用于數(shù)據(jù)變化快、實(shí)時(shí)通訊、緩存等。但內(nèi)存數(shù)據(jù)庫(kù)通常要考慮機(jī)器的內(nèi)存大小。
Redis有16個(gè)邏輯數(shù)據(jù)庫(kù)(db0-db15),每個(gè)邏輯數(shù)據(jù)庫(kù)項(xiàng)目是隔離的,默認(rèn)使用db0數(shù)據(jù)庫(kù)。若選擇第2個(gè)數(shù)據(jù)庫(kù),通過(guò)命令 select 2 ,python中連接時(shí)可以指定數(shù)據(jù)庫(kù)。
String-字符串
List-列表
Hash-哈希
Set-集合
ZSet-有序集合
Bitmap-位圖
python中我們使用redis-py庫(kù)來(lái)操作Redis數(shù)據(jù)庫(kù),下面將著重介紹。
前提:需安裝Redis數(shù)據(jù)庫(kù),若沒(méi)安裝點(diǎn)這里
pip3 install redis
第一種方式:普通
import redis redis_conn = redis.Redis(host='127.0.0.1', port= 6379, password= 'your pw', db= 0)
第二種方式:連接池
import redis redis_pool = redis.ConnectionPool(host='127.0.0.1', port= 6379, password= 'your pw', db= 0) redis_conn = redis.Redis(connection_pool= redis_pool)
redis中字符返回值類型都是字節(jié)(bytes)類型
在redis中,一個(gè)鍵對(duì)應(yīng)一個(gè)值
1.String set 設(shè)置單個(gè)鍵值
set(name, value, ex=None, px=None, nx=False, xx=False)
ex:過(guò)期時(shí)間(秒),時(shí)間到了后redis會(huì)自動(dòng)刪除
px:過(guò)期時(shí)間(毫秒),時(shí)間到了后redis會(huì)自動(dòng)刪除。ex、px二選一即可
nx:如果設(shè)置為True,則只有name不存在時(shí),當(dāng)前set操作才執(zhí)行
xx:如果設(shè)置為True,則只有name存在時(shí),當(dāng)前set操作才執(zhí)行
redis_conn.set('name_2', 'Zarten_2')
2.String get 獲取單個(gè)值
v = redis_conn.get('name_1') print(v)
3.String mset 設(shè)置多個(gè)鍵值
mset(*args, **kwargs)
redis_conn.mset(name_1= 'Zarten_1', name_2= 'Zarten_2')
或者
name_dict = { 'name_4' : 'Zarten_4', 'name_5' : 'Zarten_5' } redis_conn.mset(name_dict)
4.String mget 獲取多個(gè)值
mget(keys, *args)
m = redis_conn.mget('name_1', 'name_2') #m = redis_conn.mget(['name_1', 'name_2']) 也行 print(m)
5.String getset 給已有的鍵設(shè)置新值,并返回原有的值
getset(name, value)
當(dāng)所給的鍵不存在時(shí),會(huì)設(shè)置其新值,但返回值為None
v = redis_conn.getset('name_1', 'hi')
6.String setrange 根據(jù)索引修改某個(gè)鍵的value值
setrange(name, offset, value)
返回值為:修改后的字符串長(zhǎng)度
name:鍵,所給不存在時(shí)自動(dòng)添加
offset:偏移量,以0開(kāi)始
value:修改的字符或字符串,字符串時(shí)以offset向后順延
length = redis_conn.setrange('name_2', 1, 'zhihu') print(length)
7.String getrange 根據(jù)索引獲取某個(gè)鍵的部分value值
若所給的鍵不存在時(shí),返回空值 b''
getrange(key, start, end)
v = redis_conn.getrange('name_4', 0, 2)
結(jié)果為:
8.String strlen 獲取value的長(zhǎng)度
strlen(name)
所給的鍵不存在時(shí),返回值為0
length = redis_conn.strlen('name_2')
9.String incr int類型的value自增(自減)
同理:自減,decr(name, amount=1)
所給的鍵對(duì)應(yīng)的值必須是整數(shù)或字符串的數(shù)值,不然會(huì)報(bào)錯(cuò)。默認(rèn)自增幅度為1
incr(name, amount=1)
返回值為:修改后的值,int類型
redis_conn.set('num_2', 2) #redis_conn.set('num_2', '2') 都行 v = redis_conn.incr('num_2')
10.String incrbyfloat 浮點(diǎn)數(shù)類型的value自增
incrbyfloat(name, amount=1.0)
返回值為:浮點(diǎn)數(shù)類型float
v = redis_conn.incrbyfloat('num_2')
11.String append value后面追加
append(key, value)
若所給的鍵不存在,則設(shè)置新值
返回值為修改后的字符串的長(zhǎng)度
length = redis_conn.append('name_5', '666')
結(jié)果為:
在redis中,一個(gè)鍵對(duì)應(yīng)一個(gè)列表
12.List lpush 列表左邊添加值 rpush(右邊)
lpush(name, *values)
value值有多個(gè)時(shí),從左到右依次向列表左邊添加,類型可以不同
所給的鍵不存在時(shí),新建一個(gè)列表
返回值:列表的大小
v = redis_conn.lpush('Zarten', 1,2,3,4,5) #v = redis_conn.lpush('Zarten', 6)
13.List lpushx 鍵存在時(shí),添加到列表左邊 rpushx(最右邊)
lpushx(name, value)
只有鍵存在時(shí),才添加。若鍵不存在則不添加,也不新創(chuàng)建列表
返回值為:列表大小
v = redis_conn.lpushx('Zarten_1', 'hehe')
14.List llen 獲取所給鍵的列表大小
llen(name)
v = redis_conn.llen('Zarten')
15.List linsert 在列表中間插入新值
linsert(name, where, refvalue, value)
name:鍵名
where:位置,前面(BEFORE)或后面(AFTER)
refvalue:指定哪個(gè)值的前后插入
value:插入的新值
返回值:插入后列表的長(zhǎng)度,若返回-1,則refvalue不存在
插入前的數(shù)據(jù):
v = redis_conn.linsert('Zarten', 'AFTER', 6, 'b')
插入后的數(shù)據(jù):
16.List lset 列表中通過(guò)索引賦值
lset(name, index, value)
返回值:成功 True 否則 False
v = redis_conn.lset('Zarten', 2, 'cc')
17.List lindex 通過(guò)索引獲取列表值
lindex(name, index)
v = redis_conn.lindex('Zarten', 2)
18.List lrange 列表中獲取一段數(shù)據(jù)
lrange(name, start, end)
返回值:List類型的一段數(shù)據(jù)
v = redis_conn.lrange('Zarten', 2, 5)
19.List lpop 刪除左邊的第一個(gè)值 rpop(右邊)
lpop(name)
返回值:被刪除元素的值
v = redis_conn.rpop('Zarten')
20.List lrem 刪除列表中N個(gè)相同的值
lrem(name, value, num=0)
name:鍵名
value:需刪除的值
num:刪除的個(gè)數(shù) 整數(shù)表示從左往右 負(fù)數(shù)表示從右往左 例如:2 -2
返回值:返回刪除的個(gè)數(shù)
v = redis_conn.lrem('Zarten', 'hehe', -2)
21.List ltrim 刪除列表中范圍之外的所有值
ltrim(name, start, end)
返回值:成功 True
v = redis_conn.ltrim('Zarten', 5, 10)
22.List blpop 刪除并返回列表最左邊的值 brpop(最右邊)
blpop(keys, timeout=0)
keys:給定的鍵
timeout:等待超時(shí)時(shí)間,默認(rèn)為0,表示一直等待
返回值:tuple類型 形如: (鍵名, 刪除的值) (b'Zarten', b'hehe')
v = redis_conn.blpop('Zarten')
23.List rpoplpush 一個(gè)列表中最右邊值取出后添加到另一個(gè)列表的最左邊 brpoplpush阻塞版本
rpoplpush(src, dst)
brpoplpush(src, dst, timeout=0)為rpoplpush的阻塞版本,timeout為0時(shí),永遠(yuǎn)阻塞
返回值:取出的元素值
v = redis_conn.rpoplpush('Zarten', 'Zhihu')
內(nèi)部存儲(chǔ)為各個(gè)鍵值對(duì)
24.Hash hset 哈希中添加一個(gè)鍵值對(duì)
hset(name, key, value)
key存在,則修改,否則添加
返回值:返回添加成功的個(gè)數(shù) int
v = redis_conn.hset('Zarten', 'age', 10)
25.Hash hmset 設(shè)置哈希中的多個(gè)鍵值對(duì)
hmset(name, mapping)
mapping:dict 類型
返回值:成功 True
v = redis_conn.hmset('Zarten', {'sex':1, 'tel':'123'})
26.Hash hmget 獲取哈希中多個(gè)鍵值對(duì)
hmget(name, keys, *args)
返回值:值的列表 list 形如: [b'1', b'123'] <class 'list'>
v = redis_conn.hmget('Zarten', ['sex', 'tel']) #v = redis_conn.hmget('Zarten', 'sex', 'tel') 也ok
27.Hash hget 獲取指定key的值
hget(name, key)
v = redis_conn.hget('Zarten', 'age')
28.Hash hgetall 獲取哈希中所有的鍵值對(duì)
hgetall(name)
返回值:dict類型
v = redis_conn.hgetall('Zarten')
29.Hash hlen 獲取哈希中鍵值對(duì)的個(gè)數(shù)
hlen(name)
v = redis_conn.hlen('Zarten')
30.Hash hkeys 獲取哈希中所有的鍵key
hkeys(name)
返回值:list類型
v = redis_conn.hkeys('Zarten')
31.Hash hvals 獲取哈希中所有的值value
hvals(name)
返回值:list類型
v = redis_conn.hvals('Zarten')
32.Hash hexists 檢查哈希中是否有某個(gè)鍵key
hexists(name, key)
返回值:有 True ;否則 False
v = redis_conn.hexists('Zarten', 'b')
33.Hash hdel 刪除哈希中鍵值對(duì)(key-value)
hdel(self, name, *keys)
返回值:int 刪除的個(gè)數(shù)
v = redis_conn.hdel('Zarten', 'age')
34.Hash hincrby 自增哈希中key對(duì)應(yīng)的value值(必須整數(shù)數(shù)值類型)
hincrby(name, key, amount=1)
若所給的key不存在則創(chuàng)建,amount默認(rèn)增加1,可以為負(fù)數(shù)
返回值:int 增加后的數(shù)值
v = redis_conn.hincrby('Zarten', 'sex', -3)
35.Hash hincrbyfloat 自增浮點(diǎn)數(shù) 同上hincrby
hincrbyfloat(name, key, amount=1.0)
36.Hash expire 設(shè)置整個(gè)鍵的過(guò)期時(shí)間
expire(name, time)
time:秒,時(shí)間一到,立馬自動(dòng)刪除
v = redis_conn.expire('Zarten', 10)
37.Hash hscan 增量迭代獲取哈希中的數(shù)據(jù)
hscan(name, cursor=0, match=None, count=None)
name:redis的name
cursor:游標(biāo)(基于游標(biāo)分批取獲取數(shù)據(jù))
match:匹配指定key,默認(rèn)None 表示所有的key
count:每次分片最少獲取個(gè)數(shù),默認(rèn)None表示采用Redis的默認(rèn)分片個(gè)數(shù)
返回值:tuple 類型 ;(掃描位置,所有dict數(shù)據(jù))
v = redis_conn.hscan('Zarten')
38.Hash hscan_iter 返回hscan的生成器
hscan_iter(name, match=None, count=None)
參照上面函數(shù)hscan
v = redis_conn.hscan_iter('Zarten') for i in v: print(type(i), i)
集合中的元素不重復(fù),一般用于過(guò)濾元素
39.Set sadd 添加元素到集合中
sadd(name, *values)
若插入已有的元素,則自動(dòng)不插入
v = redis_conn.sadd('Zarten', 'apple', 'a', 'b', 'c')
40.Set scard 返回集合中元素的個(gè)數(shù)
scard(name)
v = redis_conn.scard('Zarten')
41.Set smembers 獲取集合中的所有元素
smembers(name)
返回值:set類型,形如: {b'a', b'apple', b'c', b'b'}
v = redis_conn.smembers('Zarten')
42.Set srandmember 隨機(jī)獲取一個(gè)或N個(gè)元素
srandmember(name, number=None)
name:鍵名
number:一個(gè)或N個(gè),默認(rèn)返回一個(gè)。若返回N個(gè),則返回List類型
返回值:返回一個(gè)值或一個(gè)列表
v = redis_conn.srandmember('Zarten', 2)
43.Set sismember 判斷某個(gè)值是否在集合中
sismember(name, value)
返回值:True 在 False 不在
v = redis_conn.sismember('Zarten', 'appl')
44.Set spop 隨機(jī)刪除并返回集合中的元素
spop(name)
v = redis_conn.spop('Zarten')
45.Set srem 刪除集合中的一個(gè)或多個(gè)元素
srem(name, *values)
返回值:返回刪除的個(gè)數(shù) int
v = redis_conn.srem('Zarten', 'c', 'a')
46.Set smove 將一個(gè)集合中的值移動(dòng)到另一個(gè)集合中
smove(src, dst, value)
若value不存在時(shí),返回False
返回值:成功 True
v = redis_conn.smove('Zarten', 'Fruit', 'apple')
47.Set sdiff 返回在一個(gè)集合中但不在其他集合的所有元素(差集)
sdiff(keys, *args)
在keys集合中,不在其他集合中的元素
返回值:set類型 {b'2', b'4', b'3', b'1'}
v = redis_conn.sdiff('Zarten', 'Fruit')
48.Set sdiffstore 上面的sdiff的返回值(差集)保存在另一個(gè)集合中
sdiffstore(dest, keys, *args)
在keys集合中,不在其他集合中的元素保存在dest集合中
dest:新的集合,設(shè)置的新集合,舊集合會(huì)被覆蓋
返回值:int 返回作用的個(gè)數(shù)
v = redis_conn.sdiffstore('Left', 'Zarten', 'Fruit')
49.Set sinter 返回一個(gè)集合與其他集合的交集
sinter(keys, *args)
返回值:set類型
v = redis_conn.sinter('Zarten', 'Fruit')
50.Set sinterstore 返回一個(gè)集合與其他集合的交集,并保存在另一個(gè)集合中
sinterstore(dest, keys, *args)
dest:另一個(gè)集合,設(shè)置新集合,舊集合元素會(huì)被覆蓋
v = redis_conn.sinterstore('Left', 'Zarten', 'Fruit')
51.Set sunion 返回一個(gè)集合與其他集合的并集
sunion(keys, *args)
v = redis_conn.sunion('Zarten', 'Fruit')
52.Set sunionstore 返回一個(gè)集合與其他集合的并集,并保存在另一個(gè)集合中
sunionstore(dest, keys, *args)
dest:另一個(gè)集合,設(shè)置新集合,舊集合元素會(huì)被覆蓋
返回值:新集合元素個(gè)數(shù)
v = redis_conn.sunionstore('Left', 'Zarten', 'Fruit')
有序集合比集合多了一個(gè)分?jǐn)?shù)的字段,可對(duì)分?jǐn)?shù)升序降序
53.Zset zadd 有序集合中添加元素
zadd(name, *args, **kwargs)
添加元素時(shí)需指定元素的分?jǐn)?shù)
返回值:返回添加的個(gè)數(shù)
2種方式如下:
v = redis_conn.zadd('Zarten', 'a', 3, 'b', 4) #v = redis_conn.zadd('Zarten', c= 5, d= 6)
54.Zset zcard 返回有序集合中元素個(gè)數(shù)
zcard(name)
v = redis_conn.zcard('Zarten')
55.Zset zcount 返回有序集合中分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù)
zcount(name, min, max)
包含min max
返回值:個(gè)數(shù) int
v = redis_conn.zcount('Zarten', 3, 5)
56.Zset zscore 返回有序集合中指定某個(gè)值的分?jǐn)?shù)
zscore(name, value)
返回值:float 類型的分?jǐn)?shù);形如: -5.0 <class 'float'>
v = redis_conn.zscore('Zarten', 'zhi')
57.Zset zincrby 增加有序集合中某個(gè)值的分?jǐn)?shù)
zincrby(name, value, amount=1)
value:若存在,則增加其amount分?jǐn)?shù);若不存在,則增加新值以及對(duì)應(yīng)的分?jǐn)?shù)
amount:增加的值,可以為負(fù)數(shù)
返回值:增加后的分?jǐn)?shù) float類型 ;形如: -5.0 <class 'float'>
v = redis_conn.zincrby('Zarten', 'zhi', -5)
58.Zset zrem 刪除有序集合中的某個(gè)或多個(gè)值
zrem(name, *values)
返回值:返回刪除的個(gè)數(shù)
v = redis_conn.zrem('Zarten', 'zhi', 'a')
59.Zset zremrangebyrank 刪除有序集合元素根據(jù)排序范圍
zremrangebyrank(name, min, max)
返回值:刪除個(gè)數(shù) int
v = redis_conn.zremrangebyrank('Zarten', 1, 3)
刪除后如下圖:
60.Zset zremrangebyscore 刪除有序集合根據(jù)分?jǐn)?shù)范圍
zremrangebyscore(name, min, max)
返回值:刪除個(gè)數(shù) int
v = redis_conn.zremrangebyscore('Zarten', 8, 15)
61.Zset zrank 返回某個(gè)值在有序集合中的分?jǐn)?shù)排名(從小到大) zrevrank(從大到小)
zrank(name, value)
返回值:value在name中的分?jǐn)?shù)排名值,分?jǐn)?shù)從小到大排名,從0開(kāi)始
v = redis_conn.zrank('Zarten', 'b')
返回值如下圖:
62.Zset zrange 返回有序集合分?jǐn)?shù)排序的一段數(shù)據(jù)
zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)
name:redis的name
start:有序集合索引起始位置(非分?jǐn)?shù))
end:有序集合索引結(jié)束位置(非分?jǐn)?shù))
desc:排序規(guī)則,默認(rèn)按照分?jǐn)?shù)從小到大排序
withscores:是否獲取元素的分?jǐn)?shù),默認(rèn)只獲取元素的值
score_cast_func:對(duì)分?jǐn)?shù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換的函數(shù)
返回值:list類型 [(b'tt', 10.0), (b'd', 6.0), (b'c', 5.0)] <class 'list'>
v = redis_conn.zrange('Zarten', 1, 3, True, True, score_cast_func=float)
結(jié)果如圖:
bitmap中存放二進(jìn)制的位0和1,類似位數(shù)組。典型應(yīng)用是基于redis的布隆過(guò)濾器。
屬于String字符串?dāng)?shù)據(jù)結(jié)構(gòu),固bit 映射被限制在 512 MB 之內(nèi)(2^32)
63.Bitmap setbit 設(shè)置位圖的值
setbit(name, offset, value)
name:redis鍵名
offset:偏移量,大于等于0。當(dāng)偏移伸展時(shí),空白位置以0填充
value:二進(jìn)制值 0或1
v = redis_conn.setbit('Zarten_2', 100, 1)
64.Bitmap getbit 返回位圖指定偏移量的值
getbit(name, offset)
返回0或1
v = redis_conn.getbit('Zarten_2', 101)
65.Bitmap bitcount 返回位圖中二進(jìn)制為1的總個(gè)數(shù)
bitcount(key, start=None, end=None)
start end指定開(kāi)始和結(jié)束的位,默認(rèn)整個(gè)位圖
v = redis_conn.bitcount('Zarten_2', 100, 1000)
全局函數(shù)對(duì)任何數(shù)據(jù)結(jié)構(gòu)都適用
66.全局函數(shù) delete 刪除redis中一個(gè)或多個(gè)鍵的所有數(shù)據(jù)
delete(*names)
返回值:int 刪除的個(gè)數(shù)
v = redis_conn.delete('name', 'name_1')
67.全局函數(shù) exists 判斷redis中是否存在某個(gè)鍵
exists(name)
返回值:存在True;反之False
v = redis_conn.exists('name')
68.全局函數(shù) rename 重命名redis中鍵名
rename(src, dst)
返回值:成功True
v = redis_conn.rename('name_2', 'name_100')
69.全局函數(shù) move 移動(dòng)redis中某個(gè)鍵所有數(shù)據(jù)到某個(gè)db中
move(name, db)
返回值:成功True
v = redis_conn.move('name_100', 12)
70.全局函數(shù) randomkey 隨機(jī)獲取redis中某個(gè)鍵名
randomkey()
返回值:形如: b'name_55'
v = redis_conn.randomkey()
71.全局函數(shù) type 查看redis中某個(gè)鍵數(shù)據(jù)結(jié)構(gòu)類型
type(name)
返回值:字符串(字節(jié)形式) 形如: b'hash'
none
(key不存在)
string
(字符串)
list
(列表)
set
(集合)
zset
(有序集)
hash
(哈希表)
v = redis_conn.type('name_4')
到此,相信大家對(duì)“怎么使用Python操作Redis數(shù)據(jù)庫(kù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。