中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Python操作Redis數據庫

發布時間:2022-06-24 09:38:08 來源:億速云 閱讀:243 作者:iii 欄目:開發技術

本篇內容主要講解“怎么使用Python操作Redis數據庫”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用Python操作Redis數據庫”吧!

介紹

Redis是一個開源的基于內存也可持久化的Key-Value數據庫,采用ANSI C語言編寫。它擁有豐富的數據結構,擁有事務功能,保證命令的原子性。由于是內存數據庫,讀寫非常高速,可達10w/s的評率,所以一般應用于數據變化快、實時通訊、緩存等。但內存數據庫通常要考慮機器的內存大小。

Redis有16個邏輯數據庫(db0-db15),每個邏輯數據庫項目是隔離的,默認使用db0數據庫。若選擇第2個數據庫,通過命令 select 2 ,python中連接時可以指定數據庫。

常用數據結構

  • String-字符串

  • List-列表

  • Hash-哈希

  • Set-集合

  • ZSet-有序集合

  • Bitmap-位圖

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)類型

String 字符串(鍵值對)

在redis中,一個鍵對應一個值

1.String set 設置單個鍵值

set(name, value, ex=None, px=None, nx=False, xx=False)

  • ex:過期時間(秒),時間到了后redis會自動刪除

  • px:過期時間(毫秒),時間到了后redis會自動刪除。ex、px二選一即可

  • nx:如果設置為True,則只有name不存在時,當前set操作才執行

  • xx:如果設置為True,則只有name存在時,當前set操作才執行

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)

怎么使用Python操作Redis數據庫

5.String getset 給已有的鍵設置新值,并返回原有的值

getset(name, value)

當所給的鍵不存在時,會設置其新值,但返回值為None

v = redis_conn.getset('name_1', 'hi')

6.String setrange 根據索引修改某個鍵的value值

setrange(name, offset, value)

返回值為:修改后的字符串長度

  • name:鍵,所給不存在時自動添加

  • offset:偏移量,以0開始

  • value:修改的字符或字符串,字符串時以offset向后順延

length = redis_conn.setrange('name_2', 1, 'zhihu')
print(length)

怎么使用Python操作Redis數據庫

7.String getrange 根據索引獲取某個鍵的部分value值

若所給的鍵不存在時,返回空值 b''

getrange(key, start, end)

v = redis_conn.getrange('name_4', 0, 2)

結果為:

怎么使用Python操作Redis數據庫

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')

結果為:

怎么使用Python操作Redis數據庫

List 列表

在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)

怎么使用Python操作Redis數據庫

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)

  • name:鍵名

  • where:位置,前面(BEFORE)或后面(AFTER)

  • refvalue:指定哪個值的前后插入

  • value:插入的新值

返回值:插入后列表的長度,若返回-1,則refvalue不存在

插入前的數據:

怎么使用Python操作Redis數據庫

v = redis_conn.linsert('Zarten', 'AFTER', 6, 'b')

插入后的數據:

怎么使用Python操作Redis數據庫

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)

  • name:鍵名

  • value:需刪除的值

  • num:刪除的個數 整數表示從左往右 負數表示從右往左 例如:2 -2

返回值:返回刪除的個數

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:等待超時時間,默認為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')

Hash 哈希

內部存儲為各個鍵值對

怎么使用Python操作Redis數據庫

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)

  • name:redis的name

  • cursor:游標(基于游標分批取獲取數據)

  • match:匹配指定key,默認None 表示所有的key

  • count:每次分片最少獲取個數,默認None表示采用Redis的默認分片個數

返回值: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)

怎么使用Python操作Redis數據庫

Set 集合

集合中的元素不重復,一般用于過濾元素

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)

  • name:鍵名

  • number:一個或N個,默認返回一個。若返回N個,則返回List類型

返回值:返回一個值或一個列表

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集合中

  • 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)

  • dest:另一個集合,設置新集合,舊集合元素會被覆蓋

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)

  • dest:另一個集合,設置新集合,舊集合元素會被覆蓋

返回值:新集合元素個數

v = redis_conn.sunionstore('Left', 'Zarten', 'Fruit')

Zset 有序集合

有序集合比集合多了一個分數的字段,可對分數升序降序

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)

怎么使用Python操作Redis數據庫

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)

  • value:若存在,則增加其amount分數;若不存在,則增加新值以及對應的分數

  • amount:增加的值,可以為負數

返回值:增加后的分數 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

怎么使用Python操作Redis數據庫

v = redis_conn.zremrangebyrank('Zarten', 1, 3)

刪除后如下圖:

怎么使用Python操作Redis數據庫

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開始

怎么使用Python操作Redis數據庫

v = redis_conn.zrank('Zarten', 'b')

返回值如下圖:

怎么使用Python操作Redis數據庫

62.Zset zrange 返回有序集合分數排序的一段數據

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

  • name:redis的name

  • start:有序集合索引起始位置(非分數)

  • end:有序集合索引結束位置(非分數)

  • desc:排序規則,默認按照分數從小到大排序

  • withscores:是否獲取元素的分數,默認只獲取元素的值

  • score_cast_func:對分數進行數據轉換的函數

返回值:list類型 [(b'tt', 10.0), (b'd', 6.0), (b'c', 5.0)] <class 'list'>

怎么使用Python操作Redis數據庫

v = redis_conn.zrange('Zarten', 1, 3, True, True, score_cast_func=float)

結果如圖:

怎么使用Python操作Redis數據庫

Bitmap 位圖

bitmap中存放二進制的位0和1,類似位數組。典型應用是基于redis的布隆過濾器。

屬于String字符串數據結構,固bit 映射被限制在 512 MB 之內(2^32)

63.Bitmap setbit 設置位圖的值

setbit(name, offset, value)

  • name:redis鍵名

  • offset:偏移量,大于等于0。當偏移伸展時,空白位置以0填充

  • value:二進制值 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 返回位圖中二進制為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數據庫”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

册亨县| 三穗县| 靖州| 济宁市| 无极县| 平乡县| 陵川县| 达日县| 建水县| 慈利县| 永和县| 佛坪县| 平安县| 芜湖市| 黄冈市| 三原县| 伊宁市| 南昌县| 昭平县| 大同县| 汶上县| 滨州市| 庆元县| 长沙市| 沂源县| 确山县| 辉县市| 睢宁县| 车险| 玉溪市| 湖南省| 遂宁市| 江孜县| 靖西县| 岳西县| 灌云县| 浙江省| 忻州市| 双桥区| 辽宁省| 隆回县|