Rumah  >  Artikel  >  pangkalan data  >  Redis: alat yang berkuasa untuk membina sistem yang sangat berskala

Redis: alat yang berkuasa untuk membina sistem yang sangat berskala

王林
王林asal
2023-11-07 10:45:20705semak imbas

Redis: alat yang berkuasa untuk membina sistem yang sangat berskala

Redis: Alat berkuasa untuk membina sistem berskala tinggi, contoh kod khusus diperlukan

Redis ialah sistem storan struktur data dalam memori sumber terbuka yang juga boleh digunakan sebagai baris gilir mesej dan pangkalan data cache. Ia adalah alat berkuasa yang membantu kami membina sistem yang sangat berskala. Artikel ini akan memperkenalkan anda kepada beberapa ciri umum Redis dan kod pelaksanaannya.

  1. Mod Sentinel

Mod Sentinel Redis boleh membantu kami mencapai ketersediaan tinggi. Apabila nod induk turun, Sentinel boleh memilih nod induk baharu secara automatik. Berikut ialah contoh pelaksanaan mod sentri yang mudah:

Fail konfigurasi:

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000

Kod:

# 使用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'))
  1. Kunci teragih

Dalam sistem teragih, untuk mengelakkan masalah konkurensi, kita perlu menggunakan kunci perkongsian yang diedarkan Akses kepada sumber. Redis boleh melaksanakan kunci teragih melalui arahan SETNX dan GETSET. Berikut ialah contoh mudah pelaksanaan kunci yang diedarkan Redis:

Kod:

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()
  1. Mod Terbit/Langgan

Mod terbitan/langgan Redis membolehkan pelanggan berbeza berkomunikasi dalam masa nyata melalui saluran. Berikut ialah contoh pelaksanaan mudah bagi corak terbitkan/langgan:

Kod:

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!')
  1. Skrip Lua

Redis menyokong operasi kompleks dengan melaksanakan skrip Lua, yang bersifat atom dan boleh dilaksanakan dengan cekap dalam Redis. Berikut ialah contoh pelaksanaan skrip Lua yang mudah:

Kod:

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])

Ringkasan

Artikel ini memperkenalkan empat ciri biasa Redis dan menyediakan contoh kod yang sepadan. Mod Sentinel dan kunci yang diedarkan boleh membantu kami mencapai ketersediaan tinggi dan kawalan serentak dengan mod penerbitan/langganan boleh membantu kami mencapai komunikasi masa nyata dan skrip Lua boleh membantu kami melaksanakan operasi yang kompleks; Dengan mempelajari ciri Redis ini, kami boleh membina sistem yang sangat berskala dengan lebih baik.

Atas ialah kandungan terperinci Redis: alat yang berkuasa untuk membina sistem yang sangat berskala. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn