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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

redis 介绍与操作

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

參考連接:

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

redis 是什么?

redis是一個軟件,幫助開發者對一臺機器的內存進行操作.

能干嗎?

用于操作內存的軟件。

--- 可以做持久化

  AOF :則是將Redis執行的每次寫命令記錄到單獨的日志文件中當Redis重啟時再次執行AOF文件中的命令來恢復數據。

  ROB :RDB持久化是將進程數據寫入文件。

-- 相當于大字典

-- 單進程單線程

數據類型

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用于實現Redis的命令,StrictRedis用于實現大部分官方的命令,

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

普通redis

import redis

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

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

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

連接池redis

為什么要用連接池?

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

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

# 連接池

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

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

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

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

字符串的操作(String)

String操作,redis中的String在在內存中按照一個name對應一個value來存儲。如圖:

設置值

1.set

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

在Redis中設置值,默認,不存在則創建,存在則修改

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

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

# 2.每個Redis實例都會維護一個自己的連接池。
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不存在時,執行設置操作(添加)

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

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

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

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

3.setex

setex(name,time, value, )

    # name, 設置值.

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

    # value, 參數.
   

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

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

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

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

4.psetex

psetex(name, time_ms, value)

  # name : 設置值

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

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

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

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

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

5.mset

mset(*args, **kwargs)

批量設置值


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


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

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

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

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

get 獲取值

1.mget

mget(keys, *args)

  批量獲取值

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

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

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

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

2.getset

getset(name, value)

設置新值并獲取原來的值


3. getrange

getrange(key, start, end)

# 獲取子序列(根據字節獲取,非字符)

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

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

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

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

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


修改字符串

1.setrange

setrange(name, offset, value)

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

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

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

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

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

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

2.setbit

setbit(name, offset, value)

# 對name對應值的二進制表示的位進行操作


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

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

# 擴展,轉換二進制表示:

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

查(bit)

1.getbit

getbit(name, offset)

# 獲取name對應的值的二進制表示中的某位的值 (0或1)

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

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

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

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

2.bitcount

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

# 獲取name對應的值的二進制表示中 1 的個數

# 參數:
# key,Redis的name
# start,位起始位置
# end,位結束位置

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

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

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

# 4.獲取對應的值的二進制表示中 1 的個數
print(r.bitcount('k1',1,2))

3.bitop

bitop(operation, dest, *keys)

# 獲取多個值,并將值做位運算,將最后的結果保存至新的name對應的值


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

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

4.strlen

strlen(name)

# 返回name對應值的字節長度(一個漢字3個字節)

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

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

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

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

5.incr

incr(self, name, amount=1)

# 自增 name對應的值,當name不存在時,則創建name=amount,否則,則自增。


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

# 注:同incrby

6.incrbyfloat

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

# 自增 name對應的值,當name不存在時,則創建name=amount,否則,則自增。

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

7.decr

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

# 自減 name對應的值,當name不存在時,則創建name=amount,否則,則自減。

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

8.append

append(key, value)
1
2
3
4
5

# 在redis name對應的值后面追加內容

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


Hash(字典)操作

設置值

1.hset

hset(name, key, value)

# name對應的hash中設置一個鍵值對(不存在,則創建;否則,修改)


# 參數:
# name :redis的name
# key :name對應的hash中的key
# value:name對應的hash中的value

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

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

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

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

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

2.hmset

hmset(name, mapping)

# 在name對應的hash中批量設置鍵值對


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

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

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

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

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

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

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

1.hscan

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

ps:field數量應該大于某個值時,分頁命令才會生效

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

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

# 3. # 在name對應的hash中批量設置鍵值對
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',
})

# 增量式迭代獲取,對于數據大的數據非常有用,hscan可以實現分片的獲取數據,并非一次性將數據全部獲取完,從而放置內存被撐爆
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創建生成器,實現分批去redis中獲取數據


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

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

import redis

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

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

# 3. # 在name對應的hash中批量設置鍵值對
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創建生成器,實現分批去redis中獲取數據
ret = r.hscan_iter('xx',match=None,count=10)

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

View Code

獲取值

1.hget

hget(name,key)

# 在name對應的hash中獲取根據key獲取value

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

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

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

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

2.hmget

hmget(name, keys, *args)

# 在name對應的hash中獲取多個key的值


# 參數:
# name : reids對應的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.創建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379)

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

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

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

3.hgetall

hgetall(name)

獲取name對應hash的所有鍵值。

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

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

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

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

4.hlen

hlen(name)

# 獲取name對應的hash中鍵值對的個數

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

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

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

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

5.hkeys

hkeys(name)

# 獲取name對應的hash中所有的key的值

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

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

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

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

6.hvals

hvals(name)

# 獲取name對應的hash中所有的value的值

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

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

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

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

判斷值

1.hexists

hexists(name, key)

# 檢查name對應的hash是否存在當前傳入的key

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

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

# 3. # 在name對應的hash中批量設置鍵值對
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對應的hash中指定key的鍵值對刪除

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

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

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

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

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

自增

1.hincrby

hincrby(name, key, amount=1)

# 自增name對應的hash中的指定key的值,不存在則創建key=amount。

# 參數:
# name :redis中的name。
# key : hash對應的key。
# amount :自增數(整數)。

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

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

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

# 4. 自增xx對應的hash中的指定age的值(只能是整數),不存在則創建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對應的hash中的指定key的值,不存在則創建key=amount


# 參數:
# name :redis中的name
# key : hash對應的key
# amount :自增數(浮點數)

# 自增name對應的hash中的指定key的值,不存在則創建key=amount

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

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

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

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

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

List(列表操作)

List操作,redis中的List在在內存中按照一個name對應一個List來存儲。如圖:

增加值

1.lpush

lpush(name,values)

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


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

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

import redis

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

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

# 3. 相當于創建了一個 k1:['riven','riven','riven'], 從左邊插入一條數據
r.lpush('k1', 'riven1')

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

2.lpushx

lpushx(name,value)

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


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

import redis

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

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

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

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

3.linsert

linsert(name, where, refvalue, value))

# 在name對應的列表的某一個值前或后插入一個新值。


# 參數:
# name :redis的name。
# where :BEFORE或AFTER。
# refvalue :標桿值,即:在它前后插入數據。
# value :要插入的數據。

import redis

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

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

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

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

4.lset

r.lset(name, index, value)

# 對name對應的list中的某一個索引位置重新賦值


# 參數:
# name,redis的name
# index,list的索引位置
# value,要設置的值

import redis

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

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

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

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

5.rpoplpush

rpoplpush(src, dst)

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

# 參數:
# src,要取數據的列表的name
# dst,要添加數據的列表的name

import redis

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

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

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

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

6.brpoplpush

brpoplpush(src, dst, timeout=0)

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


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

import redis

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

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

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

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

刪除

1.lrem

r.lrem(name, value, count)

# 在name對應的list中刪除指定的值

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

import redis

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

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

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

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

2.lpop

lpop(name)

# 在name對應的列表的左側獲取第一個元素并在列表中移除,返回值則是第一個元素

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

import redis

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

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

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

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

3.ltrim

ltrim(name, start, end)

# 在name對應的列表中移除沒有在start-end索引之間的值
# 參數:
# name,redis的name
# start,索引的起始位置
# end,索引結束位置

import redis

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

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

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

4.blpop

blpop(keys, timeout)

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


# 參數:
# keys,redis的name的集合
# timeout,超時時間,當元素所有列表的元素獲取完之后,阻塞等待列表內有數據的時間(秒), 0 表示永遠阻塞

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

import redis

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

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

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

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

獲取值

1.lindex

lindex(name, index)

#在name對應的列表中根據索引獲取列表元素

import redis

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

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

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

2.lrange

lrange(name, start, end)

# 在name對應的列表分片獲取數據
# 參數:
# name,redis的name
# start,索引的起始位置
# end,索引結束位置

import redis

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

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

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

3.自定義增量迭代

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


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

統計個數

1.llen

lpushx(name,value)

# name對應的list元素的個數

import redis

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

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

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

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

Set操作

Set集合就是不允許重復的列表

添加

1.sadd

sadd(name,values)

# name對應的集合中添加元素

import redis

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

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

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


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

查詢個數

1.scard

scard(name)

獲取name對應的集合中元素個數。

import redis

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

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

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


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

2.sdiff

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

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

import redis

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

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

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

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


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

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

3.sdiffstore

sdiffstore(dest, keys, *args)

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

import redis

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

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

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


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


# 5.獲取name對應的集合中元素個數
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.創建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

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

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


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


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

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

5.sinterstore

sinterstore(dest, keys, *args)

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

import redis

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

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

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


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


# 5.獲取name對應的集合中元素個數
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對應的集合的成員

import redis

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

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

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


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


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

獲取值

1.smembers

smembers(name)

# 獲取name對應的集合的所有成員

import redis

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

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

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

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

2.srandmember

srandmember(name, numbers)

# 從name對應的集合中隨機獲取 numbers 個元素

import redis

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

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

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

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

3.sunion

sunion(keys, *args)

# 獲取多二個name對應的集合的并集

import redis

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

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

# 獲取多一個name對應的集合的差集
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.創建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

# 2.每個Redis實例都會維護一個自己的連接池。
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)

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

5.sscan_iter

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

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

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

import redis

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

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

# 3.用于增量迭代分批獲取元素,避免內存消耗太大
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.創建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

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

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

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

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

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

刪除

1.spop

spop(name)

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

import redis

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

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

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

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

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

2.srem

srem(name, values)

# 在name對應的集合中刪除某些值

import redis

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

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

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

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

有序集合

在集合的基礎上,為每元素排序;元素的排序需要根據另外一個值來進行比較,

所以,對于有序集合,每一個元素有兩個值,即:值和分數,分數專門用來做排序.

1.zadd

zadd(name, *args, **kwargs)

# 在name對應的有序集合中添加元素

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

import redis

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

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

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

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

2.zincrby

zincrby(name, value, amount)

# 自增name對應的有序集合的 name 對應的分數

import redis

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

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

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

# 4.# 自增name對應的有序集合的 name 對應的分數
r.zincrby('xset1',amount=2,value='riven')


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

獲取數量

1.zcard

zcard(name)

# 獲取name對應的有序集合元素的數量

import redis

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

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

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

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

獲取值

1.zcount

zcount(name, min, max)

# 獲取name對應的有序集合中分數 在 [min,max] 之間的個數

import redis

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

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

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

# 4.## 獲取name對應的有序集合中分數 在 [min,max] 之間的個數
print(r.zcount('xset1', 0, 100))

2.zrange

r.zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
# 按照索引范圍獲取name對應的有序集合的元素
 
# 參數:
    # name,redis的name
    # start,有序集合索引起始位置(非分數)
    # end,有序集合索引結束位置(非分數)
    # desc,排序規則,默認按照分數從小到大排序
    # withscores,是否獲取元素的分數,默認只獲取元素的值
    # score_cast_func,對分數進行數據轉換的函數
 
# 更多:
    # 從大到小排序
    # zrevrange(name, start, end, withscores=False, score_cast_func=float)
 
    # 按照分數范圍獲取name對應的有序集合的元素
    # 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.創建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

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

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

# 4.# 按照索引范圍獲取name對應的有序集合的元素
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.創建一個redis連接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

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

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

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

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

# 按照分數范圍獲取name對應的有序集合的元素

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

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

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

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

# 4.# 按照分數范圍獲取name對應的有序集合的元素
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))

# 分數從大到小排序

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

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

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

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

# 4.# 按照分數范圍獲取name對應的有序集合的元素 # 從大到小排序
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對應的有序集合中的排行(從 0 開始)


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

import redis

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

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

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

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

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

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

import redis

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

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

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

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

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

4.zrangebylex

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

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

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

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

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

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

4.zscore

zscore(name, value)

# 獲取name對應有序集合中 value 對應的分數

import redis

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

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

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

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


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

5.zinterstore

zinterstore(dest, keys, aggregate=None)

# 獲取兩個有序集合的交集,如果遇到相同值不同分數,則按照aggregate進行操作

# aggregate的值為: SUM MIN MAX

import redis

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

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

# 3.# 在name對應的有序集合中添加元素。即:值和分數,分數專門用來做排序()。
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})

#  獲取兩個有序集合的交集,如果遇到相同值不同分數,則按照aggregate進行操作
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
# 獲取兩個有序集合的并集,如果遇到相同值不同分數,則按照aggregate進行操作
# 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,用來對分數進行操作

刪除

1.zrem

zrem(name, values)

# 刪除name對應的有序集合中值是values的成員


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

import redis

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

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

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

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


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

2.zremrangebyrank

zremrangebyrank(name, min, max)

# 根據排行范圍刪除

import redis

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

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

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

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


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

3.zremrangebyscore

zremrangebyscore(name, min, max)

## 根據分數范圍刪除

import redis

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

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

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

#  # 根據分數范圍刪除
ret = r.zremrangebyscore('xset1', 20,30)


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

4.zremrangebylex(目前無法使用)

zremrangebylex(name, min, max)

# 根據值返回刪除

其他常用操作(全能)

1.delete

delete(*names)

# 根據刪除redis中的任意數據類型

import redis

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

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

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


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


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

檢測

1.exists

exists(name)

# 檢測redis的name是否存在

import redis

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

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

# 3.# 在name對應的有序集合中添加元素。即:值和分數,分數專門用來做排序()。
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='*')

# 根據模型獲取redis的name


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

import redis

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

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

# 3.# 在name對應的有序集合中添加元素。即:值和分數,分數專門用來做排序()。
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))

設置超時時間

1.expire

expire(name ,time)

# 為某個redis的某個name設置超時時間

import redis

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

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

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

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

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

重命名

1.rename

rename(src, dst)

# 對redis的name重命名為

import redis

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

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

# 3.# 在name對應的有序集合中添加元素。即:值和分數,分數專門用來做排序()。
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))

隨機獲取一個redis的name

1.randomkey

randomkey()

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

import redis

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

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

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

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

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

獲取name對應值的類型

1.type

type(name)
import redis

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

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

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

# 4. # 獲取name對應值的類型
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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。