In diesem Artikel erfahren Sie, wie Sie das Redis-Modul in Python installieren und verwenden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein. 🔜 dis-py bietet zwei Klassen Re dis und StrictRedis wird zur Implementierung der meisten offiziellen Befehle und zur Verwendung der offiziellen Syntax und Befehle verwendet. Redis ist eine Unterklasse von StrictRedis und dient der Abwärtskompatibilität mit alten Versionen von redis-py
pip3 install redis
Connection pool
redis -py verwendet den Verbindungspool, um alle Verbindungen zu einem Redis-Server zu verwalten und vermeidet so den Aufwand, jedes Mal Verbindungen herzustellen und freizugeben. Standardmäßig verwaltet jede Redis-Instanz ihren eigenen Verbindungspool. Sie können direkt einen Verbindungspool erstellen und ihn dann als Parameter Redis verwenden, sodass mehrere Redis-Instanzen einen Verbindungspool gemeinsam nutzen könnenVerbindungspool: redis_pool.py
import redis conn = redis.Redis(host='127.0.0.1', port=6379) # 可以使用url方式连接到数据库 # conn = Redis.from_url('redis://@localhost:6379/1') conn.set('name', 'LinWOW') print(conn.get('name'))Verwenden Sie den Verbindungspool: test_redis.py
from redis import ConnectionPool POOL=ConnectionPool(host='127.0.0.1',port=6379,max_connections=100)Erstellen Sie eine URL Zum Herstellen einer Verbindung verfügt die Datenbank über die folgenden drei Modi:
import redis from redis_pool import POOl conn = redis.Redis(connection_pool=POOl) conn.set('name', 'LinWOW') print(conn.get('name'))
String-Operation
Methode
Beispiel
Beispielergebnis
get(name) | Gibt den Wert der Zeichenfolge mit dem Schlüsselnamen in der Datenbank zurück | redis.get('name') | b'Bob' |
---|---|---|---|
Weisen Sie die Zeichenfolge mit dem Schlüsselnamen im Datenbankwert zu und geben Sie den letzten Wert zurück | redis.getset('name', 'Mike') | b'Bob' | |
Gibt den Wert zurück, der mehreren Schlüsseln entspricht | redis.mget(['name', 'nickname']) | [b'Mike', b' Miker'] | |
Wert nur festlegen, wenn der Schlüssel nicht existiert | redis('newname', 'James') | True zum ersten Mal, False zum zweiten Mal | |
Setzen Sie den entsprechenden Wert auf einen String-Typ-Wert und geben Sie diesen an. Die Gültigkeitsdauer, die dem Schlüsselwert entspricht | redis.setex('name', 1, 'James' ) | True | |
Legen Sie die Teilzeichenfolge des Werts des angegebenen Schlüssels fest | redis.set('name', 'Hello') redis.setrange('name', 6, 'Welt') | 11, geänderte Zeichenfolgenlänge | |
Batch-Zuweisung | redis.mset({'name1': 'Durant', 'name2': 'James'}) | True | |
Batch-Zuweisung nur, wenn keiner der Schlüssel vorhanden ist | redis.msetnx({ 'name3': 'Smith', 'name4': 'Curry'}) | True | |
key ist die Mehrwertoperation von name. Der Standardwert ist 1. Wenn der Schlüssel nicht vorhanden ist, wird er erstellt und auf amount | redis.incr(' gesetzt. Alter', 1) | 1, das ist der geänderte Wert | |
key ist die Wertabwertungsoperation von name, Standard 1. Wenn der Schlüssel nicht vorhanden ist, wird er erstellt und auf -amount | redis.decr('age', 1) | -1 gesetzt, was der geänderte Wert ist | |
key is name Der Zeichenfolgenwert wird mit value angehängt | redis.append('nickname', 'OK') | 13, was die geänderte Zeichenfolgenlänge ist | |
return key Es ist die Teilzeichenfolge des Werts von die Zeichenfolge des Namens | redis.substr('name', 1, 4) | b'ello' | |
Erhalten Sie den Wert des Schlüssels vom Anfang der Teilzeichenfolge bis zum Ende | redis.getrange('name', 1, 4) | b'ello' |
Methode | Funktion | Beispiel | Beispielergebnis |
---|---|---|---|
exists(name) | Beurteilen, ob ein Schlüssel vorhanden ist dis.exists('name' ) | True | |
Einen Schlüssel löschen | redis.delete('name') | 1 | |
Bestimmen Sie den Schlüsseltyp | redis.type('name' ) | b'string' | |
Alle Schlüssel abrufen, die den Regeln entsprechen | redis.keys('n*') | [b'name'] | |
Holen Sie sich einen zufälligen Schlüssel | dbsize() | Ermitteln Sie die Anzahl der Schlüssel in der aktuellen Datenbank. | dbsize() |
expire(name, time) | Legen Sie die Ablaufzeit des Schlüssels in Sekunden fest. | redis. expire( 'name', 2) | |
ttl(name) | Ermitteln Sie die Ablaufzeit des Schlüssels in Sekunden. -1 bedeutet, dass er niemals abläuft | redis.ttl('name') | |
move(name, db) | Schlüssel in andere Datenbanken verschieben | move('name', 2) | |
flushdb() | Alle Schlüssel in der aktuell ausgewählten Datenbank löschen | flushdb( ) | |
flushall() | Alle Schlüssel in allen Datenbanken löschen | flushall() | |
Listenoperation | |||
Methode | Funktion | Beispiel | Beispielergebnis |
3, Listengröße | lpush(name, *values) | Fügen Sie ein Element mit Wert als Listenkopf hinzu, dessen Schlüssel name ist. Sie können mehrere | |
---|---|---|---|
Gibt die Elemente zwischen Anfang und Ende in der Liste mit dem Schlüsselnamen zurück | redis.lrange('list', 1, 3) | [b'3', b'2' , b'1'] | |
Fangen Sie die Liste ab, deren Schlüssel der Name ist, und behalten Sie den Inhalt von Anfang bis Ende mit Index bei | ltrim('list', 1, 3) | True | |
Gibt das Element an der Indexposition in der Liste mit dem Schlüsselnamen zurück | redis.lindex('list', 1) | b'2' | |
gibt den Schlüssel an als Dem Element an der Indexposition in der Namensliste wird ein Wert zugewiesen. Wenn es den Grenzwert überschreitet, wird ein Fehler gemeldet | redis.lset('list', 1 , 5) | True | |
Löschen Sie die Liste der Zählschlüssel. Das Element, dessen Medianwert value ist | redis.lrem('list', 2, 3) | 1 , also die Anzahl der gelöschten Elemente | |
Gibt das erste Element in der Liste mit dem Schlüsselnamen Element | redis.lpop('list') | b'5' | zurück und löscht es |
Das letzte Element in der Liste mit dem Schlüsselnamen zurückgeben und löschen. Wenn die Liste leer ist, wird sie immer blockiert und gewartet | redis.brpop('list') | [b'2'] | |
Gib das Endelement der Liste mit dem Namen src zurück und lösche es und füge das Element zur Liste mit dem Namen dst hinzu. Der Kopf der Liste | redis.rpoplpush('list', 'list2 ') | b'2' |
方法 | 作用 | 示例 | 示例结果 |
---|---|---|---|
sadd(name, *values) | 向key为name的set中添加元素 | redis.sadd(‘tags’, ‘Book’, ‘Tea’, ‘Coffee’) | 3,即插入的数据个数 |
srem(name, *values) | 从key为name的set中删除元素 | redis.srem(‘tags’, ‘Book’) | 1,即删除的数据个数 |
spop(name) | 随机返回并删除key为name的set中一个元素 | redis.spop(‘tags’) | b’Tea’ |
smove(src, dst, value) | 从src对应的set中移除元素并添加到dst对应的set中 | redis.smove(‘tags’, ‘tags2’, ‘Coffee’) | True |
scard(name) | 返回key为name的set的元素个数 | redis.scard(‘tags’) | 3 |
sismember(name, value) | 测试member是否是key为name的set的元素 | redis.sismember(‘tags’, ‘Book’) | True |
sinter(keys, *args) | 返回所有给定key的set的交集 | redis.sinter([‘tags’, ‘tags2’]) | {b’Coffee’} |
sinterstore(dest, keys, *args) | 求交集并将交集保存到dest的集合 | redis.sinterstore(‘inttag’, [‘tags’, ‘tags2’]) | 1 |
sunion(keys, *args) | 返回所有给定key的set的并集 | redis.sunion([‘tags’, ‘tags2’]) | {b’Coffee’, b’Book’, b’Pen’} |
sunionstore(dest, keys, *args) | 求并集并将并集保存到dest的集合 | redis.sunionstore(‘inttag’, [‘tags’, ‘tags2’]) | 3 |
sdiff(keys, *args) | 返回所有给定key的set的差集 | redis.sdiff([‘tags’, ‘tags2’]) | {b’Book’, b’Pen’} |
sdiffstore(dest, keys, *args) | 求差集并将差集保存到dest的集合 | redis.sdiffstore(‘inttag’, [‘tags’, ‘tags2’]) | 3 |
smembers(name) | 返回key为name的set的所有元素 | redis.smembers(‘tags’) | {b’Pen’, b’Book’, b’Coffee’} |
srandmember(name) | 随机返回key为name的set的一个元素,但不删除元素 | redis.srandmember(‘tags’) |
Methode | Funktion | Beispiel | Beispielergebnis |
---|---|---|---|
zadd(name, args, *kwargs) | Elemente hinzufügen zset mit Schlüsselname Mitglied, Punktzahl ist zum Sortieren verwendet. Wenn das Element vorhanden ist, aktualisieren Sie seine Reihenfolge | redis.zadd('grade', 100, 'Bob', 98, 'Mike') | 2, was die Anzahl der hinzugefügten Elemente ist |
zrem(name, * Werte) | Löschen Sie die Elemente im Zset, deren Schlüssel Name ist | redis.zrem('grade', 'Mike') | 1, also die Anzahl der gelöschten Elemente |
zincrby(name, value, Betrag = 1 ) | Wenn der Elementwert bereits im Zset mit dem Schlüsselnamen vorhanden ist, wird die Bewertung des Elements um den Betrag erhöht, andernfalls wird das Element zum Satz hinzugefügt und der Wert seiner Bewertung ist Betrag | redis. Zincrby('grade', ' Bob', -2) | 98.0, das ist der geänderte Wert |
zrank(name, value) | Gibt die Rangfolge der Elemente im Zset zurück, deren Schlüssel Name ist (sortiert nach). Bewertung von klein nach groß), d zset mit Schlüsselnamen (sortiert von groß nach klein nach Punktzahl), d Falsch) | Gibt das Zset mit Schlüsselnamen zurück (sortiert nach Punktzahl von groß nach klein) Alle Elemente mit Index von Anfang bis Ende | redis.zrevrange('grade', 0, 3) |
zrangebyscore(name, min, max, start=None, num=None, withscores=False) | Gibt die Elemente im Zset mit dem Schlüsselnamen zurück, deren Die Punktzahl liegt im angegebenen Intervall der Punktzahlen im angegebenen Intervall im Zset mit dem Schlüsselnamen | redis.zcount('grade ', 80, 95) | |
zcard(name) | Gibt die Anzahl der Elemente des Zsets zurück, deren Schlüssel ist name | redis.zcard('grade') | |
zremrangebyrank(name, min, max) | Löschen Sie die im angegebenen Intervall im Zset eingestuften Elemente mit dem Schlüssel name | redis.zremrangebyrank('grade ', 0, 0) | |
zremrangebyscore( name, min, max) | Löschen Sie die Elemente, deren Punktzahl im angegebenen Bereich im Zset liegt, mit Schlüsselname | redis.zremrangebyscore('grade', 80, 90) | |
hset(name, key, value) | Mapping zum Hash hinzufügen, dessen Schlüssel name ist | ||
1, also die Anzahl der hinzugefügten Mappings | hsetnx(name, key, value) | Mapping zum Hash mit Schlüsselnamen hinzufügen, wenn der Mapping-Schlüsselname nicht existiert | |
1, that ist die Anzahl der hinzugefügten Zuordnungen | hmget(Name, Schlüssel, *Argumente) | Gibt den Wert zurück, der jedem Schlüssel im Hash mit dem Schlüsselnamen entspricht |
redis. Birne': 6}) | True | hincrby(name, key, amount=1) | |
---|---|---|---|
6, der geänderte Wert | hexists(name, key) | key gibt an, ob es eine Zuordnung mit dem Schlüssel namens key in namehash | |
True | hdel(name, *keys) | key ist die Zuordnung zum Löschen des Schlüssels mit dem Namen key in namehash | |
True | hlen( name) | Erhalten Sie die Anzahl der Zuordnungen aus dem Hash mit dem Schlüsselnamen | |
6 | hkeys(name) | Erhalten Sie alle Zuordnungsschlüsselnamen aus dem Hash mit dem Schlüsselnamen | |
[b'cake', b'book', b'banana', b'pear'] | hvals(name) | Alle Zuordnungsschlüsselwerte abrufen aus dem Hash mit dem Schlüsselnamen | |
[b'5', b'6', b'2', b'6' ] | hgetall(name) | Holen Sie sich alle zugeordneten Schlüssel-Wert-Paare aus dem Hash mit dem Schlüsselnamen | |
{b'cake': b'5', b'book ': b'6', b'orange' : b'7', b'pear': b'6'} |
注意点: 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时,表示数据已经通过分片获取完毕 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 管道redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。 import redis pool = redis.ConnectionPool(host='10.211.55.4', port=6379) r = redis.Redis(connection_pool=pool) # pipe = r.pipeline(transaction=False) pipe = r.pipeline(transaction=True) pipe.multi() pipe.set('name', 'linwow') pipe.set('age', '18') pipe.execute() Django中使用redis方式一: utils文件夹下,建立redis_pool.py import redis POOL = redis.ConnectionPool(host='127.0.0.1', port=6379,password='1234',max_connections=1000) 视图函数中使用: import redis from django.shortcuts import render,HttpResponse from redis_pool import POOL def index(request): conn = redis.Redis(connection_pool=POOL) conn.hset('liwow','age',18) return HttpResponse('设置成功') def order(request): conn = redis.Redis(connection_pool=POOL) conn.hget('kkk','age') return HttpResponse('获取成功') 方式二: 安装django-redis模块 pip3 install django-redis setting里配置: # redis配置 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "123", } } } 视图函数: from django_redis import get_redis_connection conn = get_redis_connection('default') print(conn.hgetall('xxx')) 更多编程相关知识,请访问:编程教学!! |
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion zur Installation und Verwendung des Redis-Moduls in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!