<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Redis是一個開源的基於記憶體也可持久化的Key-Value資料庫,採用ANSI C語言編寫。它擁有豐富的資料結構,擁有事務功能,保證命令的原子性。由於是記憶體資料庫,讀寫非常高速,可達10w/s的評率,所以一般應用於資料變化快、實時通訊、快取等。但記憶體資料庫通常要考慮機器的記憶體大小。
Redis有16個邏輯資料庫(db0-db15),每個邏輯資料庫專案是隔離的,預設使用db0資料庫。若選擇第2個資料庫,通過命令 select 2 ,python中連線時可以指定資料庫。
python中我們使用redis-py庫來操作Redis資料庫,下面將著重介紹。
前提:需安裝Redis資料庫,若沒安裝點這裡
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中字元返回值型別都是位元組(bytes)型別
在redis中,一個鍵對應一個值
1.String set 設定單個鍵值
set(name, value, ex=None, px=None, nx=False, xx=False)
redis_conn.set('name_2', 'Zarten_2')
2.String get 獲取單個值
v = redis_conn.get('name_1') print(v)
3.String mset 設定多個鍵值
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 獲取多個值
mget(keys, *args)
m = redis_conn.mget('name_1', 'name_2') #m = redis_conn.mget(['name_1', 'name_2']) 也行 print(m)
5.String getset 給已有的鍵設定新值,並返回原有的值
getset(name, value)
當所給的鍵不存在時,會設定其新值,但返回值為None
v = redis_conn.getset('name_1', 'hi')
6.String setrange 根據索引修改某個鍵的value值
setrange(name, offset, value)
返回值為:修改後的字串長度
length = redis_conn.setrange('name_2', 1, 'zhihu') print(length)
7.String getrange 根據索引獲取某個鍵的部分value值
若所給的鍵不存在時,返回空值 b''
getrange(key, start, end)
v = redis_conn.getrange('name_4', 0, 2)
結果為:
8.String strlen 獲取value的長度
strlen(name)
所給的鍵不存在時,返回值為0
length = redis_conn.strlen('name_2')
9.String incr int型別的value自增(自減)
同理:自減,decr(name, amount=1)
所給的鍵對應的值必須是整數或字串的數值,不然會報錯。預設自增幅度為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 浮點數型別的value自增
incrbyfloat(name, amount=1.0)
返回值為:浮點數型別float
v = redis_conn.incrbyfloat('num_2')
11.String append value後面追加
append(key, value)
若所給的鍵不存在,則設定新值
返回值為修改後的字串的長度
length = redis_conn.append('name_5', '666')
結果為:
在redis中,一個鍵對應一個列表
12.List lpush 列表左邊新增值 rpush(右邊)
lpush(name, *values)
value值有多個時,從左到右依次向列表左邊新增,型別可以不同
所給的鍵不存在時,新建一個列表
返回值:列表的大小
v = redis_conn.lpush('Zarten', 1,2,3,4,5) #v = redis_conn.lpush('Zarten', 6)
13.List lpushx 鍵存在時,新增到列表左邊 rpushx(最右邊)
lpushx(name, value)
只有鍵存在時,才新增。若鍵不存在則不新增,也不新建立列表
返回值為:列表大小
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)
返回值:插入後列表的長度,若返回-1,則refvalue不存在
插入前的資料:
v = redis_conn.linsert('Zarten', 'AFTER', 6, 'b')
插入後的資料:
16.List lset 列表中通過索引賦值
lset(name, index, value)
返回值:成功 True 否則 False
v = redis_conn.lset('Zarten', 2, 'cc')
17.List lindex 通過索引獲取列表值
lindex(name, index)
v = redis_conn.lindex('Zarten', 2)
18.List lrange 列表中獲取一段資料
lrange(name, start, end)
返回值:List型別的一段資料
v = redis_conn.lrange('Zarten', 2, 5)
19.List lpop 刪除左邊的第一個值 rpop(右邊)
lpop(name)
返回值:被刪除元素的值
v = redis_conn.rpop('Zarten')
20.List lrem 刪除列表中N個相同的值
lrem(name, value, num=0)
返回值:返回刪除的個數
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)
返回值:tuple型別 形如: (鍵名, 刪除的值) (b'Zarten', b'hehe')
v = redis_conn.blpop('Zarten')
23.List rpoplpush 一個列表中最右邊值取出後新增到另一個列表的最左邊 brpoplpush阻塞版本
rpoplpush(src, dst)
brpoplpush(src, dst, timeout=0)為rpoplpush的阻塞版本,timeout為0時,永遠阻塞
返回值:取出的元素值
v = redis_conn.rpoplpush('Zarten', 'Zhihu')
內部儲存為各個鍵值對
24.Hash hset 雜湊中新增一個鍵值對
hset(name, key, value)
key存在,則修改,否則新增
返回值:返回新增成功的個數 int
v = redis_conn.hset('Zarten', 'age', 10)
25.Hash hmset 設定雜湊中的多個鍵值對
hmset(name, mapping)
mapping:dict 型別
返回值:成功 True
v = redis_conn.hmset('Zarten', {'sex':1, 'tel':'123'})
26.Hash hmget 獲取雜湊中多個鍵值對
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 獲取雜湊中所有的鍵值對
hgetall(name)
返回值:dict型別
v = redis_conn.hgetall('Zarten')
29.Hash hlen 獲取雜湊中鍵值對的個數
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 檢查雜湊中是否有某個鍵key
hexists(name, key)
返回值:有 True ;否則 False
v = redis_conn.hexists('Zarten', 'b')
33.Hash hdel 刪除雜湊中鍵值對(key-value)
hdel(self, name, *keys)
返回值:int 刪除的個數
v = redis_conn.hdel('Zarten', 'age')
34.Hash hincrby 自增雜湊中key對應的value值(必須整數數值型別)
hincrby(name, key, amount=1)
若所給的key不存在則建立,amount預設增加1,可以為負數
返回值:int 增加後的數值
v = redis_conn.hincrby('Zarten', 'sex', -3)
35.Hash hincrbyfloat 自增浮點數 同上hincrby
hincrbyfloat(name, key, amount=1.0)
36.Hash expire 設定整個鍵的過期時間
expire(name, time)
time:秒,時間一到,立馬自動刪除
v = redis_conn.expire('Zarten', 10)
37.Hash hscan 增量迭代獲取雜湊中的資料
hscan(name, cursor=0, match=None, count=None)
返回值:tuple 型別 ;(掃描位置,所有dict資料)
v = redis_conn.hscan('Zarten')
38.Hash hscan_iter 返回hscan的生成器
hscan_iter(name, match=None, count=None)
參照上面函數hscan
v = redis_conn.hscan_iter('Zarten') for i in v: print(type(i), i)
集合中的元素不重複,一般用於過濾元素
39.Set sadd 新增元素到集合中
sadd(name, *values)
若插入已有的元素,則自動不插入
v = redis_conn.sadd('Zarten', 'apple', 'a', 'b', 'c')
40.Set scard 返回集合中元素的個數
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 隨機獲取一個或N個元素
srandmember(name, number=None)
返回值:返回一個值或一個列表
v = redis_conn.srandmember('Zarten', 2)
43.Set sismember 判斷某個值是否在集合中
sismember(name, value)
返回值:True 在 False 不在
v = redis_conn.sismember('Zarten', 'appl')
44.Set spop 隨機刪除並返回集合中的元素
spop(name)
v = redis_conn.spop('Zarten')
45.Set srem 刪除集合中的一個或多個元素
srem(name, *values)
返回值:返回刪除的個數 int
v = redis_conn.srem('Zarten', 'c', 'a')
46.Set smove 將一個集合中的值移動到另一個集合中
smove(src, dst, value)
若value不存在時,返回False
返回值:成功 True
v = redis_conn.smove('Zarten', 'Fruit', 'apple')
47.Set sdiff 返回在一個集合中但不在其他集合的所有元素(差集)
sdiff(keys, *args)
在keys集合中,不在其他集合中的元素
返回值:set型別 {b'2', b'4', b'3', b'1'}
v = redis_conn.sdiff('Zarten', 'Fruit')
48.Set sdiffstore 上面的sdiff的返回值(差集)儲存在另一個集合中
sdiffstore(dest, keys, *args)
在keys集合中,不在其他集合中的元素儲存在dest集合中
返回值:int 返回作用的個數
v = redis_conn.sdiffstore('Left', 'Zarten', 'Fruit')
49.Set sinter 返回一個集合與其他集合的交集
sinter(keys, *args)
返回值:set型別
v = redis_conn.sinter('Zarten', 'Fruit')
50.Set sinterstore 返回一個集合與其他集合的交集,並儲存在另一個集合中
sinterstore(dest, keys, *args)
v = redis_conn.sinterstore('Left', 'Zarten', 'Fruit')
51.Set sunion 返回一個集合與其他集合的並集
sunion(keys, *args)
v = redis_conn.sunion('Zarten', 'Fruit')
52.Set sunionstore 返回一個集合與其他集合的並集,並儲存在另一個集合中
sunionstore(dest, keys, *args)
返回值:新集合元素個數
v = redis_conn.sunionstore('Left', 'Zarten', 'Fruit')
有序集合比集合多了一個分數的欄位,可對分數升序降序
53.Zset zadd 有序集合中新增元素
zadd(name, *args, **kwargs)
新增元素時需指定元素的分數
返回值:返回新增的個數
2種方式如下:
v = redis_conn.zadd('Zarten', 'a', 3, 'b', 4) #v = redis_conn.zadd('Zarten', c= 5, d= 6)
54.Zset zcard 返回有序集合中元素個數
zcard(name)
v = redis_conn.zcard('Zarten')
55.Zset zcount 返回有序集合中分數範圍內的元素個數
zcount(name, min, max)
包含min max
返回值:個數 int
v = redis_conn.zcount('Zarten', 3, 5)
56.Zset zscore 返回有序集合中指定某個值的分數
zscore(name, value)
返回值:float 型別的分數;形如: -5.0 <class 'float'>
v = redis_conn.zscore('Zarten', 'zhi')
57.Zset zincrby 增加有序集合中某個值的分數
zincrby(name, value, amount=1)
返回值:增加後的分數 float型別 ;形如: -5.0 <class 'float'>
v = redis_conn.zincrby('Zarten', 'zhi', -5)
58.Zset zrem 刪除有序集合中的某個或多個值
zrem(name, *values)
返回值:返回刪除的個數
v = redis_conn.zrem('Zarten', 'zhi', 'a')
59.Zset zremrangebyrank 刪除有序集合元素根據排序範圍
zremrangebyrank(name, min, max)
返回值:刪除個數 int
v = redis_conn.zremrangebyrank('Zarten', 1, 3)
刪除後如下圖:
60.Zset zremrangebyscore 刪除有序集合根據分數範圍
zremrangebyscore(name, min, max)
返回值:刪除個數 int
v = redis_conn.zremrangebyscore('Zarten', 8, 15)
61.Zset zrank 返回某個值在有序集合中的分數排名(從小到大) zrevrank(從大到小)
zrank(name, value)
返回值:value在name中的分數排名值,分數從小到大排名,從0開始
v = redis_conn.zrank('Zarten', 'b')
返回值如下圖:
62.Zset zrange 返回有序集合分數排序的一段資料
zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)
返回值: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)
結果如圖:
bitmap中存放二進位制的位0和1,類似位陣列。典型應用是基於redis的布隆過濾器。
屬於String字串資料結構,固bit 對映被限制在 512 MB 之內(2^32)
63.Bitmap setbit 設定點陣圖的值
setbit(name, offset, value)
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 返回點陣圖中二進位制為1的總個數
bitcount(key, start=None, end=None)
start end指定開始和結束的位,預設整個點陣圖
v = redis_conn.bitcount('Zarten_2', 100, 1000)
全域性函數對任何資料結構都適用
66.全域性函數 delete 刪除redis中一個或多個鍵的所有資料
delete(*names)
返回值:int 刪除的個數
v = redis_conn.delete('name', 'name_1')
67.全域性函數 exists 判斷redis中是否存在某個鍵
exists(name)
返回值:存在True;反之False
v = redis_conn.exists('name')
68.全域性函數 rename 重新命名redis中鍵名
rename(src, dst)
返回值:成功True
v = redis_conn.rename('name_2', 'name_100')
69.全域性函數 move 移動redis中某個鍵所有資料到某個db中
move(name, db)
返回值:成功True
v = redis_conn.move('name_100', 12)
70.全域性函數 randomkey 隨機獲取redis中某個鍵名
randomkey()
返回值:形如: b'name_55'
v = redis_conn.randomkey()
71.全域性函數 type 檢視redis中某個鍵資料結構型別
type(name)
返回值:字串(位元組形式) 形如: b'hash'
none
(key不存在)string
(字串)list
(列表)set
(集合)zset
(有序集)hash
(雜湊表)v = redis_conn.type('name_4')
到此這篇關於Python操作Redis資料庫的文章就介紹到這了,更多相關Python操作Redis內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45