Python Redis データ処理メソッド
1. はじめに
Redis: Remote Dictionary Server、つまりリモート辞書サービス Redis の最下層は C 言語で書かれており、オープンソースのメモリベースの NoSql データベースです
Redis のおかげで他のデータベースをはるかに上回るパフォーマンスを実現し、クラスタリング、分散、マスターとスレーブの同期などの利点をサポートしているため、データのキャッシュ、高速な読み書きなどのシナリオでよく使用されます
2. 準備
##クラウド サーバー Centos 7.8 の Redis-Server のインストールを例として使用しますまず、クラウド サーバーに Redis データベースをインストールします# 下载epel仓库 yum install epel-release # 安装redis yum install redis
- #bind が 0.0.0.0 に変更され、外部ネットワーク アクセスが許可されます
- ##requirepass アクセス パスワードを設定します
- クラウド サーバー データのセキュリティを確保するために、Redis がリモート アクセスを開くときにパスワードを強化する必要があります
# vim /etc/redis.conf # 1、bing从127.0.0.1修改为:0.0.0.0,开放远程连接 bind 0.0.0.0 # 2、设置密码 requirepass 123456
ログイン後にコピー#次に、Redis サービスを開始し、ファイアウォールとポートを開き、クラウド サーバー セキュリティ グループを構成します
デフォルトでは、Redis サービスで使用されるポート番号は 6379
さらに、Redis データベースが正常に接続できるようにするために、クラウド サーバー セキュリティ グループで構成する必要があります
# 启动Redis服务,默认redis端口号是6379 systemctl start redis # 打开防火墙 systemctl start firewalld.service # 开放6379端口 firewall-cmd --zone=public --add-port=6379/tcp --permanent # 配置立即生效 firewall-cmd --reload
上記の操作を完了すると、Redis-CLI または Redis クライアント ツールを介して接続できるようになります。
最後に、Python を使用して Redis を操作するには、pip を使用して依存関係
# 安装依赖,便于操作redis pip3 install redis
3 をインストールする必要があります。実践的な戦闘
Redis でデータを操作する前に、ホスト、ポート番号、およびパスワードを使用して Redis 接続オブジェクトをインスタンス化する必要があります
from redis import Redis class RedisF(object): def __init__(self): # 实例化Redis对象 # decode_responses=True,如果不加则写入的为字节类型 # host:远程连接地址 # port:Redis端口号 # password:Redis授权密码 self.redis_obj = Redis(host='139.199.**.**',port=6379,password='123456',decode_responses=True,charset='UTF-8', encoding='UTF-8')
次に使用するのは、文字列、リストの操作です。 、set コレクション、zset コレクション、ハッシュ テーブル、トランザクションを例として、Python でこれらのデータを操作する方法について説明します
1. 文字列操作
文字列を操作するには 2 つの方法があります。ちなみに、操作メソッドは次のとおりです: set() と mset()
その中で: set() は一度に 1 つの値しか保存できません。パラメータの意味は次のとおりです。
name: key、キーを表します
value: value、保存する値
ex: 有効期限、秒単位、設定されていない場合は期限切れになりません。設定されていない場合は、期限切れになると削除されます。
#px: 有効期限 (ミリ秒単位)
nx/xx: 集合演算かどうか 実行は、name キーが存在するかどうかに関係します。
# set():单字符串操作 # 添加一个值,并设置超时时间为120s self.redis_obj.set('name', 'airpython', ex=120) # get():获取这个值 print(self.redis_obj.get('name')) # delete():删除一个值或多个值 self.redis_obj.delete('name') print(self.redis_obj.get('name'))

同様に、Redis が提供する mget() メソッドは、一度に複数のキーの値を取得できます。
# mset():设置多个值 self.redis_obj.mset({"foo": "foo1", "zoo": "zoo1"}) # mget():获取多个值 result = self.redis_obj.mget("foo", "zoo") print(result)
2 . リスト操作
Redis にはリストを操作するための多くのメソッドが用意されており、その中でより一般的なものは次のとおりです:
lpush/rpush: 1 つ以上の値を挿入します。リストの先頭または末尾に挿入します。ここで、lpush は先頭の挿入を表し、rpush はデータの末尾の挿入を表します
- ##lset: インデックスを介してリスト内の対応する位置に値を挿入します。
- linsert: リスト要素の前後にデータを挿入します。
- #lindex : インデックスを介してリスト内の要素を取得します。ここで、0 は最初の要素を表します; -1 は最後の要素を表します ##lrange: 開始位置と終了位置を指定して、リスト内の指定した領域の値を取得します
- llen: リストの長さを取得します。キーに対応するリストが存在しない場合は、0
- lpop: リストの最初の要素を削除して返します
- #rpop: リストの最後の要素を削除して返します
##コード例は次のとおりです。 :
def manage_list(self): """ 操作列表 :return: """ # 1、新增一个列表,并左边插入一个数据 # 注意:可以一次加入多个元素,也可以一个个元素的加入 self.redis_obj.lpush('company', '阿里', '腾讯', '百度') # 2、移除第一个元素 self.redis_obj.lpop("company") # 3、右边插入数据 self.redis_obj.rpush('company', '字节跳动', '小米') # 4、移除最后一个元素 self.redis_obj.rpop("company") # 5、获取列表的长度 self.redis_obj.llen("company") # 6、通过索引,获取列表中的某一个元素(第二个元素) print('列表中第二个元素是:', self.redis_obj.lindex("company", 1)) # 7、根据范围,查看列表中所有的值 print(self.redis_obj.lrange('company', 0, -1))
ログイン後にコピー3. Set コレクションの操作- #Set は順序のない要素のコレクションです。コレクション内の要素は繰り返すことはできません。Redis には、Set コレクションの操作を容易にするメソッドも多数提供されていますその中で、より一般的なのは、使用されるメソッドは次のとおりです:
- #smembers: コレクション内のすべての要素を返します # #srem : セットから 1 つ以上の要素を削除します。要素が存在しない場合は無視します。
- sinter: 2 つのセットの共通部分を返します。結果はセットのままです
- sunion: 2 つのセットの和集合を返します
- sdiff: 最初のセットのパラメーターを標準として使用し、2 つのセットの差を返します
- sismember: 要素がセットに存在するかどうかを判断します
- spop: セット内の要素をランダムに削除し、
- #具体的なコード例は次のとおりです:
- 4. オペレーション zset コレクションZset コレクションは、通常の set コレクションと比較して順序付けされています。zset コレクションの要素には、値とスコアが含まれます。スコアは並べ替えに使用されます
zadd:往集合中新增元素,如果集合不存在,则新建一个集合,然后再插入数据
zrange:通过起始点和结束点,返回集合中的元素值(不包含分数);如果设置withscores=True,则返回结果会带上分数
zscore:获取某一个元素对应的分数
zcard:获取集合中元素个数
zrank:获取元素在集合中的索引
zrem:删除集合中的元素
zcount:通过最小值和最大值,判断分数在这个范围内的元素个数
hset:往哈希表中添加一个键值对值
hmset:往哈希表中添加多个键值对值
hget:获取哈希表中单个键的值
hmget:获取哈希表中多个键的值列表
hgetall:获取哈希表中种所有的键值对
hkeys:获取哈希表中所有的键列表
hvals:获取哈表表中所有的值列表
hexists:判断哈希表中,某个键是否存在
hdel:删除哈希表中某一个键值对
hlen:返回哈希表中键值对个数
首先,定义一个事务管道
然后通过事务对象去执行一系列操作
提交事务操作,结束事务操作
def manage_set(self): """ 操作set集合 :return: """ self.redis_obj.delete("fruit") # 1、sadd:新增元素到集合中 # 添加一个元素:香蕉 self.redis_obj.sadd('fruit', '香蕉') # 再添加两个元素 self.redis_obj.sadd('fruit', '苹果', '桔子') # 2、集合元素的数量 print('集合元素数量:', self.redis_obj.scard('fruit')) # 3、移除一个元素 self.redis_obj.srem("fruit", "桔子") # 再定义一个集合 self.redis_obj.sadd("fruit_other", "香蕉", "葡萄", "柚子") # 4、获取两个集合的交集 result = self.redis_obj.sinter("fruit", "fruit_other") print(type(result)) print('交集为:', result) # 5、获取两个集合的并集 result = self.redis_obj.sunion("fruit", "fruit_other") print(type(result)) print('并集为:', result) # 6、差集,以第一个集合为标准 result = self.redis_obj.sdiff("fruit", "fruit_other") print(type(result)) print('差集为:', result) # 7、合并保存到新的集合中 self.redis_obj.sunionstore("fruit_new", "fruit", "fruit_other") print('新的集合为:', self.redis_obj.smembers('fruit_new')) # 8、判断元素是否存在集合中 result = self.redis_obj.sismember("fruit", "苹果") print('苹果是否存在于集合中', result) # 9、随机从集合中删除一个元素,然后返回 result = self.redis_obj.spop("fruit") print('删除的元素是:', result) # 3、集合中所有元素 result = self.redis_obj.smembers('fruit') print("最后fruit集合包含的元素是:", result)
其中,比较常用的方法如下:
实践代码如下:
def manage_zset(self): """ 操作zset集合 :return: """ self.redis_obj.delete("fruit") # 往集合中新增元素:zadd() # 三个元素分别是:"banana", 1/"apple", 2/"pear", 3 self.redis_obj.zadd("fruit", "banana", 1, "apple", 2, "pear", 3) # 查看集合中所有元素(不带分数) result = self.redis_obj.zrange("fruit", 0, -1) # ['banana', 'apple', 'pear'] print('集合中的元素(不带分数)有:', result) # 查看集合中所有元素(带分数) result = self.redis_obj.zrange("fruit", 0, -1, withscores=True) # [('banana', 1.0), ('apple', 2.0), ('pear', 3.0)] print('集合中的元素(带分数)有:', result) # 获取集合中某一个元素的分数 result = self.redis_obj.zscore("fruit", "apple") print("apple对应的分数为:", result) # 通过最小值和最大值,判断分数在这个范围内的元素个数 result = self.redis_obj.zcount("fruit", 1, 2) print("集合中分数大于1,小于2的元素个数有:", result) # 获取集合中元素个数 count = self.redis_obj.zcard("fruit") print('集合元素格式:', count) # 获取元素的值获取索引号 index = self.redis_obj.zrank("fruit", "apple") print('apple元素的索引为:', index) # 删除集合中的元素:zrem self.redis_obj.zrem("fruit", "apple") print('删除apple元素后,剩余元素为:', self.redis_obj.zrange("fruit", 0, -1))
4、操作哈希
哈希表中包含很多键值对,并且每一个键都是唯一的
Redis 操作哈希表,下面这些方法比较常用:
对应的操作代码如下:
def manage_hash(self): """ 操作哈希表 哈希:一个键对应一个值,并且键不容许重复 :return: """ self.redis_obj.delete("website") # 1、新建一个key为website的哈希表 # 往里面加入数据:baidu(field),www.baidu.com(value) self.redis_obj.hset('website', 'baidu', 'www.alibababaidu.com') self.redis_obj.hset('website', 'google', 'www.google.com') # 2、往哈希表中添加多个键值对 self.redis_obj.hmset("website", {"tencent": "www.qq.com", "alibaba": "www.taobao.com"}) # 3、获取某一个键的值 result = self.redis_obj.hget("website", 'baidu') print("键为baidu的值为:", result) # 4、获取多个键的值 result = self.redis_obj.hmget("website", "baidu", "alibaba") print("多个键的值为:", result) # 5、查看hash表中的所有值 result = self.redis_obj.hgetall('website') print("哈希表中所有的键值对为:", result) # 6、哈希表中所有键列表 # ['baidu', 'google', 'tencent', 'alibaba'] result = self.redis_obj.hkeys("website") print("哈希表,所有的键(列表)为:", result) # 7、哈希表中所有的值列表 # ['www.alibababaidu.com', 'www.google.com', 'www.qq.com', 'www.taobao.com'] result = self.redis_obj.hvals("website") print("哈希表,所有的值(列表)为:", result) # 8、判断某一个键是否存在 result = self.redis_obj.hexists("website", "alibaba") print('alibaba这个键是否存在:', result) # 9、删除某一个键值对 self.redis_obj.hdel("website", 'baidu') print('删除baidu键值对后,哈希表的数据包含:', self.redis_obj.hgetall('website')) # 10、哈希表中键值对个数 count = self.redis_obj.hlen("website") print('哈希表键值对一共有:', count)
5、操作事务管道
Redis 支持事务管道操作,能够将几个操作统一提交执行
操作步骤是:
下面通过一个简单的例子来说明:
def manage_steps(self): """ 执行事务操作 :return: """ # 1、定义一个事务管道 self.pip = self.redis_obj.pipeline() # 定义一系列操作 self.pip.set('age', 18) # 增加一岁 self.pip.incr('age') # 减少一岁 self.pip.decr('age') # 执行上面定义3个步骤的事务操作 self.pip.execute() # 判断 print('通过上面一些列操作,年龄变成:', self.redis_obj.get('age'))
以上がPython Redis データ処理メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Redisはハッシュテーブルを使用してデータを保存し、文字列、リスト、ハッシュテーブル、コレクション、注文コレクションなどのデータ構造をサポートします。 Redisは、スナップショット(RDB)を介してデータを維持し、書き込み専用(AOF)メカニズムを追加します。 Redisは、マスタースレーブレプリケーションを使用して、データの可用性を向上させます。 Redisは、シングルスレッドイベントループを使用して接続とコマンドを処理して、データの原子性と一貫性を確保します。 Redisは、キーの有効期限を設定し、怠zyな削除メカニズムを使用して有効期限キーを削除します。

Redisバージョン番号を表示するには、次の3つの方法を使用できます。(1)情報コマンドを入力し、(2) - versionオプションでサーバーを起動し、(3)構成ファイルを表示します。

Redisのすべてのキーを表示するには、3つの方法があります。キーコマンドを使用して、指定されたパターンに一致するすべてのキーを返します。スキャンコマンドを使用してキーを繰り返し、キーのセットを返します。情報コマンドを使用して、キーの総数を取得します。

Redis-Serverが見つからない問題を解決するための手順:インストールを確認して、Redisが正しくインストールされていることを確認します。環境変数Redis_hostとredis_portを設定します。 Redis Server Redis-Serverを起動します。サーバーがRedis-Cli pingを実行しているかどうかを確認します。

Redis Orderedセット(ZSET)は、並べ替えられた要素を保存し、関連するスコアでソートするために使用されます。 zsetを使用する手順には次のものがあります。1。zsetを作成します。 2。メンバーを追加します。 3.メンバースコアを取得します。 4。ランキングを取得します。 5.ランキング範囲のメンバーを取得します。 6.メンバーを削除します。 7.要素の数を取得します。 8。スコア範囲のメンバーの数を取得します。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Redisは、キーの一意性を確保するために5つの戦略を使用します。1。名前空間分離。 2。ハッシュデータ構造。 3.データ構造を設定します。 4。文字列キーの特殊文字。 5。LUAスクリプト検証。特定の戦略の選択は、データ組織、パフォーマンス、およびスケーラビリティ要件に依存します。
