Redis: 拡張性の高いシステムを構築するための強力なツール。特定のコード例が必要です。
Redis は、オープンソースのインメモリ データ構造ストレージ システムです。メッセージキューやキャッシュデータベースなどとして使用されます。これは、拡張性の高いシステムの構築に役立つ強力なツールです。この記事では、Redis のいくつかの一般的な機能とその実装コードを紹介します。
Redis のセンチネル モードは、高可用性の実現に役立ちます。マスター ノードがダウンすると、Sentinel は新しいマスター ノードを自動的に選択できます。以下は、単純なセンチネル モードの実装例です。
設定ファイル:
sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000
コード:
# 使用redis-py实现哨兵模式 import redis sentinel = redis.RedisSentinel( [('127.0.0.1', 26379)], socket_timeout=0.1, ) redis_master = sentinel.master_for('mymaster', socket_timeout=0.1) redis_slave = sentinel.slave_for('mymaster', socket_timeout=0.1) redis_master.set('key', 'value') print(redis_slave.get('key'))
分散システムでは、同時実行の問題を回避するために、分散ロックを使用して共有リソースへのアクセスを制御する必要があります。 Redis は、SETNX および GETSET コマンドを通じて分散ロックを実装できます。以下は、単純な Redis 分散ロックの実装例です。
コード:
import redis class RedisLock(object): def __init__(self, name, acquire_timeout=10, expire_time=60): self.redis = redis.Redis() self.name = 'redis_lock_key_{}'.format(name) self.acquire_timeout = acquire_timeout self.expire_time = expire_time def acquire_lock(self): start_time = time.time() while True: end_time = time.time() if self.redis.setnx(self.name, 1): self.redis.expire(self.name, self.expire_time) return True elif end_time - start_time > self.acquire_timeout: return False time.sleep(0.1) def release_lock(self): self.redis.delete(self.name) redis_lock = RedisLock('test') if redis_lock.acquire_lock(): try: # 操作共享资源 pass finally: redis_lock.release_lock()
Redis のパブリッシュ/サブスクライブ モードでは、さまざまなクライアントが使用できます。チャネルを通じてリアルタイムで通信します。以下は、単純なパブリッシュ/サブスクライブ モードの実装例です。
コード:
import redis import threading def subscribe_channel(redis, channel): pub_sub = redis.pubsub() pub_sub.subscribe(channel) for message in pub_sub.listen(): print(message) redis_sub = redis.StrictRedis(decode_responses=True) redis_pub = redis.StrictRedis(decode_responses=True) redis_thread = threading.Thread(target=subscribe_channel, args=(redis_sub, 'test_channel')) redis_thread.start() redis_pub.publish('test_channel', 'Hello, Redis!')
Redis は、Lua スクリプトを実行することで複雑な実装をサポートします。これらはアトミックであり、Redis で効率的に実行できます。以下は、簡単な Lua スクリプトの実装例です。
コード:
import redis redis_client = redis.Redis() add_script = redis_client.register_script(""" local current_value = redis.call('get', KEYS[1]) current_value = tonumber(current_value) or 0 current_value = current_value + tonumber(ARGV[1]) redis.call('set', KEYS[1], current_value) return current_value """) add_script(keys=['test_lua_key'], args=[1])
概要
この記事では、Redis の 4 つの一般的な機能を紹介し、対応するコード例を示します。 Sentinel モードと分散ロックは高可用性と同時実行制御の実現に役立ち、パブリッシュ/サブスクライブ モードはリアルタイム通信の実現に役立ち、Lua スクリプトは複雑な操作の実装に役立ちます。 Redis のこれらの機能を学ぶことで、拡張性の高いシステムをより適切に構築できるようになります。
以上がRedis: 拡張性の高いシステムを構築するための強力なツールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。