日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

redis 介绍与操作

發(fā)布時間:2023/12/13 综合教程 23 生活家
生活随笔 收集整理的這篇文章主要介紹了 redis 介绍与操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考連接:

https://www.cnblogs.com/wupeiqi/articles/5132791.html

redis 是什么?

redis是一個軟件,幫助開發(fā)者對一臺機(jī)器的內(nèi)存進(jìn)行操作.

能干嗎?

用于操作內(nèi)存的軟件。

--- 可以做持久化

  AOF :則是將Redis執(zhí)行的每次寫命令記錄到單獨的日志文件中當(dāng)Redis重啟時再次執(zhí)行AOF文件中的命令來恢復(fù)數(shù)據(jù)。

  ROB :RDB持久化是將進(jìn)程數(shù)據(jù)寫入文件。

-- 相當(dāng)于大字典

-- 單進(jìn)程單線程

數(shù)據(jù)類型

1.字符串

k1:“ 這是個憂傷的故事 “

2.列表

k2:[1,2,3,4,5,6,7,8]

3.集合

k3:{1,2,3,4,5,6}

4.字典

k4:{ name:123, age:666 }

5.有序集合

k5:{('alex',60),('eva-j'80),('rt',70)}

操作

redis-py提供兩個類Redis和StrictRedis用于實現(xiàn)Redis的命令,StrictRedis用于實現(xiàn)大部分官方的命令,

并使用官方的語法和命令,Redis是StrictRedis的子類,用于向后兼容舊版本的redis-py。

普通redis

import redis

# 1.創(chuàng)建一個redis連接
r = redis.Redis(host='127.0.0.1',port=6379)

# 2.只能設(shè)置一個值,放入redis
r.set('foo','Bar')

# 3.去redis中取值
print(r.get('foo'))

連接池redis

為什么要用連接池?

redis-py 使用connection pool來管理對一個redis server的所有連接,避免每次建立、釋放連接的開銷。默認(rèn),每個Redis實例都會維護(hù)一個自己的連接池。

可以直接建立一個連接池,然后作為參數(shù)Redis,這樣就可以實現(xiàn)多個Redis實例共享一個連接池。

# 連接池

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.Redis(connection_pool=pool)

# 3.放入值到redis
r.set('foo','Bar')

# 4.取值
print(r.get('foo'))

字符串的操作(String)

String操作,redis中的String在在內(nèi)存中按照一個name對應(yīng)一個value來存儲。如圖:

設(shè)置值

1.set

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

在Redis中設(shè)置值,默認(rèn),不存在則創(chuàng)建,存在則修改

參數(shù):
ex,過期時間(秒)
px,過期時間(毫秒)
nx,如果設(shè)置為True,則只有name不存在時,當(dāng)前set操作才執(zhí)行
xx,如果設(shè)置為True,則只有name存在時,崗前set操作才執(zhí)行

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.Redis(connection_pool=pool)

# 3.放入值到redism,3秒后過期
r.set('foo','Bar',ex=3)

# 4.取值
print(r.get('foo'))

2.setnx

setnx(name, value)

只有name不存在時,執(zhí)行設(shè)置操作(添加)

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.Redis(connection_pool=pool)

# 3.,只有name不存在時,執(zhí)行設(shè)置操作(添加)
r.setnx('foo','Bar1')

# 4.取值
print(r.get('foo'))

3.setex

setex(name,time, value, )

    # name, 設(shè)置值.

    # time,過期時間(數(shù)字秒 或 timedelta對象).

    # value, 參數(shù).
   

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.Redis(connection_pool=pool)

# 3.設(shè)置k 時間 v 
r.setex('foo',5,5454)

# 4.取值
print(r.get('foo'))

4.psetex

psetex(name, time_ms, value)

  # name : 設(shè)置值

  # time_ms : 參數(shù):
  # time_ms : 過期時間(數(shù)字毫秒 或 timedelta對象)

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.Redis(connection_pool=pool)

# 3.設(shè)置k 時間 v 豪秒
r.psetex('foo',5000,5454)

# 4.取值
print(r.get('foo'))

5.mset

mset(*args, **kwargs)

批量設(shè)置值


r.mset({'k1': 'v1', 'k2': 'v2'})
print(r.mget("k1", "k2"))   # 一次取出多個鍵對應(yīng)的值
print(r.mget("k1"))


r.mset({'k1': 'v1', 'k2': 'v2'})
import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3.批量設(shè)置值
r.mset({'k1':'riven','k2':'mark'})

# 4.獲取多個值
print(r.mget('k1','k2'))

get 獲取值

1.mget

mget(keys, *args)

  批量獲取值

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3.批量設(shè)置值
r.mget({'k1':'riven','k2':'mark'})

# 4.獲取多個值
print(r.mget('k1','k2'))

2.getset

getset(name, value)

設(shè)置新值并獲取原來的值


3. getrange

getrange(key, start, end)

# 獲取子序列(根據(jù)字節(jié)獲取,非字符)

# 參數(shù):
# name,Redis 的 name
# start,起始位置(字節(jié))
# end,結(jié)束位置(字節(jié))
# 如: "武沛齊" ,0-3表示 "武" , 相當(dāng)于切片

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3.批量設(shè)置值
r.mget({'k1':'riven','k2':'mark'})

# 4.切片取值
print(r.getrange('k1',1,2))


修改字符串

1.setrange

setrange(name, offset, value)

# 修改字符串內(nèi)容,從指定字符串索引開始向后替換(新值太長時,則向后添加)
# 參數(shù):
# offse : 字符串的索引,字節(jié)(一個漢字三個字節(jié))。
# value : 要設(shè)置的值。

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3.批量設(shè)置值
r.mget({'k1':'riven','k2':'mark'})

# 4.索引指定位置 修改替換成新值
r.setrange('k1',5,'666666666666666666666666')

# 5.獲取值
print(r.mget('k1'))

2.setbit

setbit(name, offset, value)

# 對name對應(yīng)值的二進(jìn)制表示的位進(jìn)行操作


# 參數(shù):
# name : redis的name 。
# offset : 位的索引(將值變換成二進(jìn)制后再進(jìn)行索引)。
# value : 值只能是 1 或 0 。

# 注:如果在Redis中有一個對應(yīng): n1 = "foo",
    那么字符串foo的二進(jìn)制表示為:01100110 01101111 01101111
    所以,如果執(zhí)行 setbit('n1', 7, 1),則就會將第7位設(shè)置為1,
    那么最終二進(jìn)制則變成 01100111 01101111 01101111,即:"goo"

# 擴(kuò)展,轉(zhuǎn)換二進(jìn)制表示:

 # source = "武沛齊"
    source = "foo"
 
    for i in source:
        num = ord(i)
        print bin(num).replace('b','')
特別的,如果source是漢字 "武沛齊"怎么辦?
    答:對于utf-8,每一個漢字占 3 個字節(jié),那么 "武沛齊" 則有 9個字節(jié)
       對于漢字,for循環(huán)時候會按照 字節(jié) 迭代,那么在迭代時,將每一個字節(jié)轉(zhuǎn)換 十進(jìn)制數(shù),然后再將十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制
       11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000

查(bit)

1.getbit

getbit(name, offset)

# 獲取name對應(yīng)的值的二進(jìn)制表示中的某位的值 (0或1)

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3.批量設(shè)置值
r.mget({'k1':'riven','k2':'mark'})

# 4.獲取2進(jìn)制中索引的0或者1
print(r.getbit('k1',8))

2.bitcount

bitcount(key, start=None, end=None)

# 獲取name對應(yīng)的值的二進(jìn)制表示中 1 的個數(shù)

# 參數(shù):
# key,Redis的name
# start,位起始位置
# end,位結(jié)束位置

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3.批量設(shè)置值
r.mget({'k1':'riven','k2':'mark'})

# 4.獲取對應(yīng)的值的二進(jìn)制表示中 1 的個數(shù)
print(r.bitcount('k1',1,2))

3.bitop

bitop(operation, dest, *keys)

# 獲取多個值,并將值做位運算,將最后的結(jié)果保存至新的name對應(yīng)的值


# 參數(shù):
# operation,AND(并) 、 OR(或) 、 NOT(非) 、 XOR(異或)
# dest, 新的Redis的name
# *keys,要查找的Redis的name

# 如:
bitop("AND",'new_name','n1','n2','n3')
# 獲取Redis中n1,n2,n3對應(yīng)的值,然后講所有的值做位運算(求并集),然后將結(jié)果保存 new_name 對應(yīng)的值中

4.strlen

strlen(name)

# 返回name對應(yīng)值的字節(jié)長度(一個漢字3個字節(jié))

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3.批量設(shè)置值
r.mget({'k1':'riven','k2':'mark'})

# 4.# 返回name對應(yīng)值的字節(jié)長度(一個漢字3個字節(jié))
print(r.strlen('k1'))

5.incr

incr(self, name, amount=1)

# 自增 name對應(yīng)的值,當(dāng)name不存在時,則創(chuàng)建name=amount,否則,則自增。


# 參數(shù):
# name,Redis的name
# amount,自增數(shù)(必須是整數(shù))

# 注:同incrby

6.incrbyfloat

incrbyfloat(self, name, amount=1.0)
1
2
3
4
5

# 自增 name對應(yīng)的值,當(dāng)name不存在時,則創(chuàng)建name=amount,否則,則自增。

# 參數(shù):
# name,Redis的name
# amount,自增數(shù)(浮點型)

7.decr

decr(self, name, amount=1)
1
2
3
4
5

# 自減 name對應(yīng)的值,當(dāng)name不存在時,則創(chuàng)建name=amount,否則,則自減。

# 參數(shù):
# name,Redis的name
# amount,自減數(shù)(整數(shù))

8.append

append(key, value)
1
2
3
4
5

# 在redis name對應(yīng)的值后面追加內(nèi)容

# 參數(shù):
key, redis的name
value, 要追加的字符串


Hash(字典)操作

設(shè)置值

1.hset

hset(name, key, value)

# name對應(yīng)的hash中設(shè)置一個鍵值對(不存在,則創(chuàng)建;否則,修改)


# 參數(shù):
# name :redis的name
# key :name對應(yīng)的hash中的key
# value:name對應(yīng)的hash中的value

# 注:
# hsetnx(name, key, value),當(dāng)name對應(yīng)的hash中不存在當(dāng)前key時則創(chuàng)建(相當(dāng)于添加)

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3.# name對應(yīng)的hash中設(shè)置一個鍵值對(不存在,則創(chuàng)建;否則,修改)  單個
r.hset('xx', 'name','riven')

# 4. 批量獲取值
print(r.hgetall('xx'))

2.hmset

hmset(name, mapping)

# 在name對應(yīng)的hash中批量設(shè)置鍵值對


# 參數(shù):
# name,redis的name
# mapping,字典,如:{'k1':'v1', 'k2': 'v2'}

# 如:
# r.hmset('xx', {'k1':'v1', 'k2': 'v2'})

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18'})

# 4. 批量獲取值
print(r.hgetall('xx'))

按位置獲取值(數(shù)據(jù)量大的時候)

1.hscan

hscan(name, cursor=0, match=None, count=None)
# 增量式迭代獲取,對于數(shù)據(jù)大的數(shù)據(jù)非常有用,hscan可以實現(xiàn)分片的獲取數(shù)據(jù),并非一次性將數(shù)據(jù)全部獲取完,從而放置內(nèi)存被撐爆
 
# 參數(shù):
    # name,redis的name
    # cursor,游標(biāo)(基于游標(biāo)分批取獲取數(shù)據(jù))
    # match,匹配指定key,默認(rèn)None 表示所有的key
    # count,每次分片最少獲取個數(shù),默認(rèn)None表示采用Redis的默認(rèn)分片個數(shù)
 
# 如:
    # 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
    # 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
    # ...
    # 直到返回值cursor的值為0時,表示數(shù)據(jù)已經(jīng)通過分片獲取完畢

ps:field數(shù)量應(yīng)該大于某個值時,分頁命令才會生效

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {
    'name':'riven','age':'18.00','hogby':'gril','name2':'mark','age2':'20','hogby2':'littlgril',
'name11':'riven','age11':'18.00','hogby11':'gril','name211':'mark','age211':'20','hogby211':'littlgril',
'name222':'riven','age222':'18.00','hogby222':'gril','name2222':'mark','age2222':'20','hogby2222':'littlgril',
'name333':'riven','age333':'18.00','hogby333':'gril','name2333':'mark','age2333':'20','hogby2333':'littlgril',
})

# 增量式迭代獲取,對于數(shù)據(jù)大的數(shù)據(jù)非常有用,hscan可以實現(xiàn)分片的獲取數(shù)據(jù),并非一次性將數(shù)據(jù)全部獲取完,從而放置內(nèi)存被撐爆
cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=10)



print(r.hscan('xx'))

View Code

2.hscan_iter

hscan_iter(name, match=None, count=None)

# 利用yield封裝hscan創(chuàng)建生成器,實現(xiàn)分批去redis中獲取數(shù)據(jù)


# 參數(shù):
# match : 匹配指定key,默認(rèn)None 表示所有的key
# count : 每次分片最少獲取個數(shù),默認(rèn)None表示采用Redis的默認(rèn)分片個數(shù)

# 如:
# for item in r.hscan_iter('xx'):
# print item

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {
    'name': 'riven', 'age': '18.00', 'hogby': 'gril', 'name2': 'mark', 'age2': '20', 'hogby2': 'littlgril',
    'name11': 'riven', 'age11': '18.00', 'hogby11': 'gril', 'name211': 'mark', 'age211': '20', 'hogby211': 'littlgril',
    'name222': 'riven', 'age222': '18.00', 'hogby222': 'gril', 'name2222': 'mark', 'age2222': '20',
    'hogby2222': 'littlgril',
    'name333': 'riven', 'age333': '18.00', 'hogby333': 'gril', 'name2333': 'mark', 'age2333': '20',
    'hogby2333': 'littlgril',
})

# # 利用yield封裝hscan創(chuàng)建生成器,實現(xiàn)分批去redis中獲取數(shù)據(jù)
ret = r.hscan_iter('xx',match=None,count=10)

#獲取數(shù)據(jù)
for item in ret:
    print(item)

View Code

獲取值

1.hget

hget(name,key)

# 在name對應(yīng)的hash中獲取根據(jù)key獲取value

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18'})

# 4. 指定獲取字典某個key值
print(r.hget('xx','name'))

2.hmget

hmget(name, keys, *args)

# 在name對應(yīng)的hash中獲取多個key的值


# 參數(shù):
# name : reids對應(yīng)的name
# keys : 要獲取key集合,如:['k1', 'k2', 'k3']
# *args : 要獲取的key,如:k1,k2,k3

# 如:
# r.mget('xx', ['k1', 'k2'])
# 或
# print r.hmget('xx', 'k1', 'k2')

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18','hogby':'gril'})

# 4. 指定獲取多個字典某個key值
print(r.hmget('xx',['name','hogby']))

3.hgetall

hgetall(name)

獲取name對應(yīng)hash的所有鍵值。

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18','hogby':'gril'})

# 4. 指定獲取xx字典中所有的key值
print(r.hgetall('xx'))

4.hlen

hlen(name)

# 獲取name對應(yīng)的hash中鍵值對的個數(shù)

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18','hogby':'gril'})

# 4. 指定獲取xx字典中所有鍵值對的個數(shù)
print(r.hlen('xx'))

5.hkeys

hkeys(name)

# 獲取name對應(yīng)的hash中所有的key的值

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18','hogby':'gril'})

# 4. 單獨獲取 xx 中的key值
print(r.hkeys('xx'))

6.hvals

hvals(name)

# 獲取name對應(yīng)的hash中所有的value的值

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18','hogby':'gril'})

# 4. 單獨獲取 xx 中的key值
print(r.hvals('xx'))

判斷值

1.hexists

hexists(name, key)

# 檢查name對應(yīng)的hash是否存在當(dāng)前傳入的key

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18','hogby':'gril'})

# 4. 檢查 xx hash中是否有value age 
print(r.hexists('xx','age'))

刪除字典

1.hdel

hdel(name,*keys)

# 將name對應(yīng)的hash中指定key的鍵值對刪除

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18','hogby':'gril'})

# 4. 將xx對應(yīng)的hash中指定age的鍵值對刪除
r.hdel('xx','age')

# 5. 檢查 xx hash中是否有value age
print(r.hgetall('xx'))

自增

1.hincrby

hincrby(name, key, amount=1)

# 自增name對應(yīng)的hash中的指定key的值,不存在則創(chuàng)建key=amount。

# 參數(shù):
# name :redis中的name。
# key : hash對應(yīng)的key。
# amount :自增數(shù)(整數(shù))。

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18','hogby':'gril'})

# 4. 自增xx對應(yīng)的hash中的指定age的值(只能是整數(shù)),不存在則創(chuàng)建key=amount
r.hincrby('xx','age',amount=10)

# 5. 檢查 xx hash中是否有value age
print(r.hgetall('xx'))

2.hincrbyfloat

hincrbyfloat(name, key, amount=1.0)

# 自增name對應(yīng)的hash中的指定key的值,不存在則創(chuàng)建key=amount


# 參數(shù):
# name :redis中的name
# key : hash對應(yīng)的key
# amount :自增數(shù)(浮點數(shù))

# 自增name對應(yīng)的hash中的指定key的值,不存在則創(chuàng)建key=amount

import redis
# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r=redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的hash中批量設(shè)置鍵值對
r.hmset('xx', {'name':'riven','age':'18.00','hogby':'gril'})

# 4. 自增xx對應(yīng)的hash中的指定age的值(浮點數(shù)),不存在則創(chuàng)建key=amount
r.hincrbyfloat('xx','age',amount=10.15)

# 5. 檢查 xx hash中是否有value age
print(r.hgetall('xx'))

List(列表操作)

List操作,redis中的List在在內(nèi)存中按照一個name對應(yīng)一個List來存儲。如圖:

增加值

1.lpush

lpush(name,values)

# 在name對應(yīng)的list中添加元素,每個新的元素都添加到列表的最左邊


# 如:
# r.lpush('oo', 11,22,33)
# 保存順序為: 33,22,11

# 擴(kuò)展:
# rpush(name, values) 表示從右向左操作

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. 相當(dāng)于創(chuàng)建了一個 k1:['riven','riven','riven'], 從左邊插入一條數(shù)據(jù)
r.lpush('k1', 'riven1')

# 4.切片取數(shù)據(jù)
result = r.lrange('k1', 0, 100)
print(result)

2.lpushx

lpushx(name,value)

# 在name對應(yīng)的list中添加元素,只有name已經(jīng)存在時,值添加到列表的最左邊


# 更多:
# rpushx(name, value) 表示從右向左操作

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3.  在name對應(yīng)的list中添加元素,只有name已經(jīng)存在時,值添加到列表的最左邊
r.lpushx('k1', 'riven11')

# 4.切片取數(shù)據(jù)
result = r.lrange('k1', 0, 100)
print(result)

3.linsert

linsert(name, where, refvalue, value))

# 在name對應(yīng)的列表的某一個值前或后插入一個新值。


# 參數(shù):
# name :redis的name。
# where :BEFORE或AFTER。
# refvalue :標(biāo)桿值,即:在它前后插入數(shù)據(jù)。
# value :要插入的數(shù)據(jù)。

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3.  # # 在name對應(yīng)的列表的某一個值前或后插入一個新值
r.linsert('k1',where='before',refvalue='riven11',value='888')

# 4.切片取數(shù)據(jù)
result = r.lrange('k1', 0, 100)
print(result)

4.lset

r.lset(name, index, value)

# 對name對應(yīng)的list中的某一個索引位置重新賦值


# 參數(shù):
# name,redis的name
# index,list的索引位置
# value,要設(shè)置的值

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3.  # 對name對應(yīng)的list中的某一個索引位置重新賦值
r.lset('k1', 0, value='999')

# 4.切片取數(shù)據(jù)
result = r.lrange('k1', 0, 100)
print(result)

5.rpoplpush

rpoplpush(src, dst)

# 從一個列表取出最右邊的元素,同時將其添加至另一個列表的最左邊

# 參數(shù):
# src,要取數(shù)據(jù)的列表的name
# dst,要添加數(shù)據(jù)的列表的name

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 從一個列表取出最右邊的元素,同時將其添加至另一個列表的最左邊
r.rpoplpush('k1','k2')

# 3.# 在name對應(yīng)的列表分片獲取數(shù)據(jù)
result = r.lrange('k1', 0,100)
result1 = r.lrange('k2', 0,100)
print(result)
print(result1)

6.brpoplpush

brpoplpush(src, dst, timeout=0)

# 從一個列表的右側(cè)移除一個元素并將其添加到另一個列表的左側(cè)


# 參數(shù):
# src, 取出并要移除元素的列表對應(yīng)的name。
# dst, 要插入元素的列表對應(yīng)的name。
# timeout, 當(dāng)src對應(yīng)的列表中沒有數(shù)據(jù)時,阻塞等待其有數(shù)據(jù)的超時時間(秒),0 表示永遠(yuǎn)阻塞。

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

#  從一個列表的右側(cè)移除一個元素并將其添加到另一個列表的左側(cè)
# timeout,當(dāng)src對應(yīng)的列表中沒有數(shù)據(jù)時,阻塞等待其有數(shù)據(jù)的超時時間(秒),0 表示永遠(yuǎn)阻塞
r.brpoplpush('k1','k2',timeout=50)

# 3.# 在name對應(yīng)的列表分片獲取數(shù)據(jù)
result = r.lrange('k1', 0,100)
result1 = r.lrange('k2', 0,100)
print(result)
print(result1)

刪除

1.lrem

r.lrem(name, value, count)

# 在name對應(yīng)的list中刪除指定的值

# 參數(shù):
# name,redis的name
# value,要刪除的值
# count, count=0,刪除列表中所有的指定值;
# count=2,從前到后,刪除2個;
# count=-2,從后向前,刪除2個

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. 在name對應(yīng)的list中刪除指定的相同的值
r.lrem('k1', value='riven1',count=2)

# 4.切片取數(shù)據(jù)
result = r.lrange('k1', 0, 100)
print(result)

2.lpop

lpop(name)

# 在name對應(yīng)的列表的左側(cè)獲取第一個元素并在列表中移除,返回值則是第一個元素

# 更多:
# rpop(name) 表示從右向左操作

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. 在name對應(yīng)的列表的左側(cè)獲取第一個元素并在列表中移除,返回值則是第一個元素
r.lpop('k1',)

# 4.切片取數(shù)據(jù)
result = r.lrange('k1', 0, 100)
print(result)

3.ltrim

ltrim(name, start, end)

# 在name對應(yīng)的列表中移除沒有在start-end索引之間的值
# 參數(shù):
# name,redis的name
# start,索引的起始位置
# end,索引結(jié)束位置

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3.# 在name對應(yīng)的列表中移除沒有在start-end索引之間的值
result = r.ltrim('k1', 1,3)
print(result)

4.blpop

blpop(keys, timeout)

# 將多個列表排列,按照從左到右去pop對應(yīng)列表的元素


# 參數(shù):
# keys,redis的name的集合
# timeout,超時時間,當(dāng)元素所有列表的元素獲取完之后,阻塞等待列表內(nèi)有數(shù)據(jù)的時間(秒), 0 表示永遠(yuǎn)阻塞

# 更多:
# r.brpop(keys, timeout),從右向左獲取數(shù)據(jù)

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3.將多個列表排列,按照從左到右去pop對應(yīng)列表的元素
# timeout,當(dāng)src對應(yīng)的列表中沒有數(shù)據(jù)時,阻塞等待其有數(shù)據(jù)的超時時間(秒),0 表示永遠(yuǎn)阻塞
r.blpop('k1', timeout=10)

# 4.# 在name對應(yīng)的列表分片獲取數(shù)據(jù)
result = r.lrange('k1', 0, 100)

獲取值

1.lindex

lindex(name, index)

#在name對應(yīng)的列表中根據(jù)索引獲取列表元素

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3.在name對應(yīng)的列表中根據(jù)索引獲取列表元素
result = r.lindex('k1', 4,)
print(result)

2.lrange

lrange(name, start, end)

# 在name對應(yīng)的列表分片獲取數(shù)據(jù)
# 參數(shù):
# name,redis的name
# start,索引的起始位置
# end,索引結(jié)束位置

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3.# 在name對應(yīng)的列表分片獲取數(shù)據(jù)
result = r.lrange('k1', 0,4)
print(result)

3.自定義增量迭代

 # 由于redis類庫中沒有提供對列表元素的增量迭代,
如果想要循環(huán)name對應(yīng)的列表的所有元素,那么就需要: # 1、獲取name對應(yīng)的所有列表 # 2、循環(huán)列表 # 但是,如果列表非常大,那么就有可能在第一步時就將程序的內(nèi)容撐爆,所以有必要自定義一個增量迭代的功能:
def list_iter(name):
    """
    自定義redis列表增量迭代
    :param name: redis中的name,即:迭代name對應(yīng)的列表
    :return: yield 返回 列表元素
    """
    # 我計算出 當(dāng)前的k1 中值得數(shù)量
    list_count = r.llen(name)
    # 我range 循環(huán)的數(shù)量
    for index in range(list_count):
        # 按照索引值 一個一個獲取值
        yield r.lindex(name, index)


# 使用
for item in list_iter('k1'):
    # 一個一個取值
    print(item)

統(tǒng)計個數(shù)

1.llen

lpushx(name,value)

# name對應(yīng)的list元素的個數(shù)

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3.  # name對應(yīng)的list元素的個數(shù)
print(r.llen('k1', ))

# 4.切片取數(shù)據(jù)
result = r.lrange('k1', 0, 100)
print(result)

Set操作

Set集合就是不允許重復(fù)的列表

添加

1.sadd

sadd(name,values)

# name對應(yīng)的集合中添加元素

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k5','riven3')


# 4.# 獲取name對應(yīng)的集合的所有成員
result = r.smembers('k5',)
print(result)

查詢個數(shù)

1.scard

scard(name)

獲取name對應(yīng)的集合中元素個數(shù)。

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k5','riven3')


# 4.# 獲取name對應(yīng)的集合中元素個數(shù)
result = r.scard('k5',)
print(result)

2.sdiff

sdiff(keys, *args)
在第一個name對應(yīng)的集合中且不在其他name對應(yīng)的集合的元素集合(我要去第一個name中 與第二個name不一樣的元素集合)

使用交互方式來合并文件
返回兩個集合中第一個的差集

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k5', '1')
r.sadd('k6', '2')

# 4.在第一個name對應(yīng)的集合中且不在其他name對應(yīng)的集合的元素集合(我要去第一個name中 與第二個name不一樣的元素集合)
print(r.sdiff('k5','k6'))


# 5.# 獲取name對應(yīng)的集合中元素個數(shù)
result = r.sinter('k5', )
print(result)

result1 = r.sinter('k6', )
print(result1)

3.sdiffstore

sdiffstore(dest, keys, *args)

# 獲取第一個name對應(yīng)的集合中且不在其他name對應(yīng)的集合,再將其新加入到dest對應(yīng)的集合中

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k5', '1')
r.sadd('k6', '2')


# 4. 獲取第一個name對應(yīng)的集合中且不在其他name對應(yīng)的集合,再將其新加入到dest對應(yīng)的集合中
    # 獲取第一個name  k5和k6的差集 然后加入一個新建的k2 中
r.sdiffstore('k2','k5','k6')


# 5.獲取name對應(yīng)的集合中元素個數(shù)
result = r.sinter('k5', )
print(result,111)

result1 = r.sinter('k6', )
print(result1,222)

result1 = r.sinter('k2', )
print(result1,333)

4.sinter

sinter(keys, *args)
import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k5', '1')
r.sadd('k6', '2')


# 4. # 獲取多個name對應(yīng)集合的并集(也就是 相同的元素)
print(r.sinter('k5','k6'))


# # 5.獲取name對應(yīng)的集合中元素個數(shù)
result = r.sinter('k5', )
print(result,111)

result1 = r.sinter('k6', )
print(result1,222)

5.sinterstore

sinterstore(dest, keys, *args)

# 獲取多一個name對應(yīng)集合的并集,再講其加入到dest對應(yīng)的集合中

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k5', '1')
r.sadd('k6', '2')


# 4. # 獲取多name對應(yīng)集合的并集,再講其加入到dest對應(yīng)的集合中
r.sinterstore('k2','k5','k6')


# 5.獲取name對應(yīng)的集合中元素個數(shù)
result = r.sinter('k5', )
print(result,111)

result1 = r.sinter('k6', )
print(result1,222)

result1 = r.sinter('k2', )
print(result1,333)

判斷

1.sismember

sismember(name, value)

# 檢查value是否是name對應(yīng)的集合的成員

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k6', '2')


# 4. # 檢查value是否是name對應(yīng)的集合的成員
print(r.sismember('k6','riven1'))


# 5.獲取name對應(yīng)的集合中元素個數(shù)
result1 = r.sinter('k6', )
print(result1,222)

獲取值

1.smembers

smembers(name)

# 獲取name對應(yīng)的集合的所有成員

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k6', '2')

# 4.獲取name對應(yīng)的集合中元素個數(shù)
result1 = r.sinter('k6', )
print(result1,222)

2.srandmember

srandmember(name, numbers)

# 從name對應(yīng)的集合中隨機(jī)獲取 numbers 個元素

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k6', 'riven55')

# 4.# 從name對應(yīng)的集合中隨機(jī)獲取 numbers 個元素
result1 = r.srandmember('k6', 2)
print(result1, 222)

3.sunion

sunion(keys, *args)

# 獲取多二個name對應(yīng)的集合的并集

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 獲取多一個name對應(yīng)的集合的差集
result0 = r.sunion('k5','k6')
print(result0, 000)


# 4.# 獲取所有值
result1 = r.smembers('k6')
print(result1, 111)

result2 = r.smembers('k5')
print(result2, 222)

4.sunionstore

sunionstore(dest,keys, *args)

#Redis Sunionstore 將k6和k5 中相同元素合并成一個,后與不同的元素 一起放入k2中

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# Redis Sunionstore 將k6和k5 中相同元素合并成一個,后與不同的元素 一起放入k2中
r.sunionstore('k2','k6','k5')


# 4.# 獲取所有值
result1 = r.smembers('k6')
print(result1, 111)

result2 = r.smembers('k5')
print(result2, 222)

result3 = r.smembers('k2')
print(result3, 333)

sscan(name, cursor=0, match=None, count=None)(貌似不好用)
sscan_iter(name, match=None, count=None)

# 用法同字符串的操作,用于增量迭代分批獲取元素,避免內(nèi)存消耗太大

5.sscan_iter

sscan_iter(name, match=None, count=None)

# 同字符串的操作,用于增量迭代分批獲取元素,避免內(nèi)存消耗太大

# name,redis的name
# match,匹配指定key,默認(rèn)None 表示所有的key
# count,每次分片最少獲取個數(shù),默認(rèn)None表示采用Redis的默認(rèn)分片個數(shù)

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3.用于增量迭代分批獲取元素,避免內(nèi)存消耗太大
ret = r.sscan_iter('k6', match=None, count=10)

# 4.# 迭代獲取獲取所有值
for i in ret:
    print(i)

集合之間移動

1.smove

smove(src, dst, value)

# 將某個成員從一個集合中移動到另外一個集合

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k6', '2')

# 將某個成員從一個集合中移動到另外一個集合
r.smove('k5','k6','1')

# 4.獲取name對應(yīng)的集合中元素個數(shù)
result1 = r.sinter('k6', )
print(result1,222)

result1 = r.sinter('k5', )
print(result1,222)

刪除

1.spop

spop(name)

# 從集合的右側(cè)(尾部)移除一個成員,并將其返回

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # name對應(yīng)的集合中添加元素
r.sadd('k6', '2')

# # 從集合的右側(cè)(尾部)移除一個成員,并將其返回
print(r.spop('k6'))

# 4.獲取name對應(yīng)的集合中元素個數(shù)
result1 = r.sinter('k6', )
print(result1,222)

2.srem

srem(name, values)

# 在name對應(yīng)的集合中刪除某些值

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.StrictRedis(connection_pool=pool)

# 3. # 在name對應(yīng)的集合中刪除某些值(指定刪除某個值)
r.srem('k6', '666')

# 4.# 從name對應(yīng)的集合中隨機(jī)獲取 numbers 個元素
result1 = r.smembers('k6')
print(result1, 222)

有序集合

在集合的基礎(chǔ)上,為每元素排序;元素的排序需要根據(jù)另外一個值來進(jìn)行比較,

所以,對于有序集合,每一個元素有兩個值,即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序.

1.zadd

zadd(name, *args, **kwargs)

# 在name對應(yīng)的有序集合中添加元素

# 如:
  r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, })

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序(也就是后面的數(shù)字)。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, })

# 4.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

2.zincrby

zincrby(name, value, amount)

# 自增name對應(yīng)的有序集合的 name 對應(yīng)的分?jǐn)?shù)

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, })

# 4.# 自增name對應(yīng)的有序集合的 name 對應(yīng)的分?jǐn)?shù)
r.zincrby('xset1',amount=2,value='riven')


# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

獲取數(shù)量

1.zcard

zcard(name)

# 獲取name對應(yīng)的有序集合元素的數(shù)量

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序(也就是后面的數(shù)字)。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, })

# 4.# 獲取name對應(yīng)的有序集合元素的數(shù)量
print(r.zcard('xset1'))

獲取值

1.zcount

zcount(name, min, max)

# 獲取name對應(yīng)的有序集合中分?jǐn)?shù) 在 [min,max] 之間的個數(shù)

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, })

# 4.## 獲取name對應(yīng)的有序集合中分?jǐn)?shù) 在 [min,max] 之間的個數(shù)
print(r.zcount('xset1', 0, 100))

2.zrange

r.zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
# 按照索引范圍獲取name對應(yīng)的有序集合的元素
 
# 參數(shù):
    # 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,對分?jǐn)?shù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換的函數(shù)
 
# 更多:
    # 從大到小排序
    # zrevrange(name, start, end, withscores=False, score_cast_func=float)
 
    # 按照分?jǐn)?shù)范圍獲取name對應(yīng)的有序集合的元素
    # zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
    # 從大到小排序
    # zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)
import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, 'marke':8,'mimi':9})

# 4.# 按照索引范圍獲取name對應(yīng)的有序集合的元素
ret = r.zrange( 'xset1', 0, 2, desc=False, withscores=True, score_cast_func=float)
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

從大到小排序

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, 'marke':8,'mimi':9})

# 4.# 按照索引范圍獲取name對應(yīng)的有序集合的元素
ret = r.zrevrange( 'xset1', 0, 2,  withscores=True, score_cast_func=float)
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

# 按照分?jǐn)?shù)范圍獲取name對應(yīng)的有序集合的元素

  # zrangebyscore(name, min, max, start=None, num=None, 
        withscores=False, score_cast_func=float)
import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, 'marke':8,'mimi':9})

# 4.# 按照分?jǐn)?shù)范圍獲取name對應(yīng)的有序集合的元素
ret = r.zrangebyscore( 'xset1', 9, 25, start=None, num=None, withscores=True, score_cast_func=float)
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

# 分?jǐn)?shù)從大到小排序

 zrevrangebyscore(name, max, min, start=None, 
        num=None, withscores=False, score_cast_func=float)
import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, 'marke':8,'mimi':9})

# 4.# 按照分?jǐn)?shù)范圍獲取name對應(yīng)的有序集合的元素 # 從大到小排序
ret = r.zrevrangebyscore( 'xset1', 25, 9, start=None, num=None, withscores=True, score_cast_func=float)
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

3.zrank

zrank(name, value)

# 獲取某個值在 name對應(yīng)的有序集合中的排行(從 0 開始)


# 更多:
# zrevrank(name, value),從大到小排序

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, 'marke':8,'mimi':9})

# 4.# 獲取某個值在 name對應(yīng)的有序集合中的排行(從 0 開始)
ret = r.zrank( 'xset1','m1')
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

zrevrank(name, value),從大到小排序

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 18, 'marke':8,'mimi':9})

# 4.# 獲取某個值在 name對應(yīng)的有序集合中的排行(從 0 開始)應(yīng)該沒啥區(qū)別
ret = r.zrevrank( 'xset1','marke')
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

4.zrangebylex

zrangebylex(name, min, max, start=None, num=None)
# 當(dāng)有序集合的所有成員都具有相同的分值時,有序集合的元素會根據(jù)成員的 
值 (lexicographical ordering)來進(jìn)行排序,而這個命令則可以返回給定的有序集合鍵 key 中,
元素的值介于 min 和 max 之間的成員。
# 對集合中的每個成員進(jìn)行逐個字節(jié)的對比(byte-by-byte compare),
并按照從低到高的順序, 返回排序后的集合成員。 如果兩個字符串有一部分內(nèi)容是相同的話,
那么命令會認(rèn)為較長的字符串比較短的字符串要大。 # 參數(shù): # name,redis的name # min,左區(qū)間(值)。 + 表示正無限; - 表示負(fù)無限; ( 表示開區(qū)間; [ 則表示閉區(qū)間 # min,右區(qū)間(值) # start,對結(jié)果進(jìn)行分片處理,索引位置 # num,對結(jié)果進(jìn)行分片處理,索引后面的num個元素 # 如: # ZADD myzset 0 aa 0 ba 0 ca 0 da 0 ea 0 fa 0 ga # r.zrangebylex('myzset', "-", "[ca") 結(jié)果為:['aa', 'ba', 'ca'] # 更多: # 從大到小排序 # zrevrangebylex(name, max, min, start=None, num=None)
import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 20, 'm2': 20, 'riven': 20, 'marke': 20, 'mimi': 20})

# 4.# min,左區(qū)間(值)。 + 表示正無限; - 表示負(fù)無限; ( 表示開區(qū)間(不包含本身); [ 則表示閉區(qū)間 (包含本身)
ret = r.zrangebylex('xset1', '-', '(riven', start=None, num=None)
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

4.zscore

zscore(name, value)

# 獲取name對應(yīng)有序集合中 value 對應(yīng)的分?jǐn)?shù)

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})

#  # 根據(jù)值返回刪除
ret = r.zscore('xset1','m2')
print(ret)


# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

5.zinterstore

zinterstore(dest, keys, aggregate=None)

# 獲取兩個有序集合的交集,如果遇到相同值不同分?jǐn)?shù),則按照aggregate進(jìn)行操作

# aggregate的值為: SUM MIN MAX

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset4', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})
r.zadd('xset5', {'m2': 12, 'm3': 25, 'riven': 35, 'marke': 45, 'mimi': 51})

#  獲取兩個有序集合的交集,如果遇到相同值不同分?jǐn)?shù),則按照aggregate進(jìn)行操作
ret = r.zinterstore('xset4','xset5',aggregate=None)
print(ret)


# 5.# 迭代獲取獲取所有值
print(r.zrange('xset4', 0, 100))
print(r.zrange('xset5', 0, 100))

用的少

zunionstore(dest, keys, aggregate=None)

1
2
# 獲取兩個有序集合的并集,如果遇到相同值不同分?jǐn)?shù),則按照aggregate進(jìn)行操作
# aggregate的值為:  SUM  MIN  MAX
zscan(name, cursor=0, match=None, count=None, score_cast_func=float)
zscan_iter(name, match=None, count=None,score_cast_func=float)

1
# 同字符串相似,相較于字符串新增score_cast_func,用來對分?jǐn)?shù)進(jìn)行操作

刪除

1.zrem

zrem(name, values)

# 刪除name對應(yīng)的有序集合中值是values的成員


# 如:zrem('zz', ['s1', 's2'])

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 20, 'm2': 20, 'riven': 20, 'marke': 20, 'mimi': 20})

# 刪除name對應(yīng)的有序集合中值是values的成員
ret = r.zrem('xset1', 'm1','m2')


# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

2.zremrangebyrank

zremrangebyrank(name, min, max)

# 根據(jù)排行范圍刪除

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 20, 'm2': 20, 'riven': 20, 'marke': 20, 'mimi': 20})

# # 根據(jù)排行范圍刪除
ret = r.zremrangebyrank('xset1', 0,2)


# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

3.zremrangebyscore

zremrangebyscore(name, min, max)

## 根據(jù)分?jǐn)?shù)范圍刪除

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset1', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})

#  # 根據(jù)分?jǐn)?shù)范圍刪除
ret = r.zremrangebyscore('xset1', 20,30)


# 5.# 迭代獲取獲取所有值
print(r.zrange('xset1', 0, 100))

4.zremrangebylex(目前無法使用)

zremrangebylex(name, min, max)

# 根據(jù)值返回刪除

其他常用操作(全能)

1.delete

delete(*names)

# 根據(jù)刪除redis中的任意數(shù)據(jù)類型

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset4', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})


# 根據(jù)刪除redis中的任意數(shù)據(jù)類型
ret = r.delete('xset4')


# 5.# 迭代獲取獲取所有值
print(r.zrange('xset4', 0, 100))

檢測

1.exists

exists(name)

# 檢測redis的name是否存在

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset4', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})


# # 檢測redis的name是否存在
ret = r.exists('xset4')
print(ret)


# 5.# 迭代獲取獲取所有值
print(r.zrange('xset4', 0, 100))

查詢

keys

keys(pattern='*')

# 根據(jù)模型獲取redis的name


# 更多:
# KEYS * 匹配數(shù)據(jù)庫中所有 key 。
# KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
# KEYS h*llo 匹配 hllo 和 heeeeello 等。
# KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset4', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})

# # 檢測redis的name是否存在
ret = r.keys('*')
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset4', 0, 100))

設(shè)置超時時間

1.expire

expire(name ,time)

# 為某個redis的某個name設(shè)置超時時間

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset4', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})

# 為某個redis的某個name設(shè)置超時時間
ret = r.expire('xset4', 10)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset4', 0, 100))

重命名

1.rename

rename(src, dst)

# 對redis的name重命名為

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset4', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})

# 4. # 對redis的name重命名為
ret = r.rename('xset4', 'xset10')

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset10', 0, 100))

隨機(jī)獲取一個redis的name

1.randomkey

randomkey()

# 隨機(jī)獲取一個redis的name(不刪除)

import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset4', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})

# 4. # 隨機(jī)獲取一個redis的name(不刪除)
ret = r.randomkey()
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset10', 0, 100))

獲取name對應(yīng)值的類型

1.type

type(name)
import redis

# 1.創(chuàng)建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護(hù)一個自己的連接池。
r = redis.Redis(connection_pool=pool)

# 3.# 在name對應(yīng)的有序集合中添加元素。即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序()。
r.zadd('xset4', {'m1': 10, 'm2': 20, 'riven': 30, 'marke': 40, 'mimi': 50})

# 4. # 獲取name對應(yīng)值的類型
ret = r.type('xset4')
print(ret)

# 5.# 迭代獲取獲取所有值
print(r.zrange('xset10', 0, 100))

scan(cursor=0, match=None, count=None)
scan_iter(match=None, count=None)


# 同字符串操作,用于增量迭代獲取key

總結(jié)

以上是生活随笔為你收集整理的redis 介绍与操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。