Heim > PHP-Framework > Laravel > So lösen Sie das Problem der Cache-Penetration mithilfe der Redis-Sperre in Laravel

So lösen Sie das Problem der Cache-Penetration mithilfe der Redis-Sperre in Laravel

藏色散人
Freigeben: 2020-09-14 09:37:10
nach vorne
3789 Leute haben es durchsucht

vorgestellt, um die Verwendung von Redis-Sperren in Laravel zur Lösung des Problems des Cache-Ausfalls vorzustellen. Ich hoffe, es wird Freunden in Not hilfreich sein!

Cache-Aufschlüsselung ist ein Problem, das während der Entwicklung auftreten kann:

So lösen Sie das Problem der Cache-Penetration mithilfe der Redis-Sperre in Laravel

Cache-Aufschlüsselung bezieht sich auf Daten, die sich nicht im Cache, sondern in der Datenbank befinden (normalerweise ist die Cache-Zeit zu diesem Zeitpunkt abgelaufen). aufgrund gleichzeitiger Benutzer Es gibt so viele, dass die Daten nicht gleichzeitig im Cache gelesen werden und die Daten gleichzeitig aus der Datenbank abgerufen werden, was dazu führt, dass der Druck auf die Datenbank sofort zunimmt und übermäßigen Druck verursacht.

Redis-Sperre ist eine gute Möglichkeit, das Problem der Cache-Aufschlüsselung zu lösen.

Laravel 7 wird mit der Redis-Sperrklasse IlluminateCacheRedisLock geliefert, die direkt verwendet werden kann und sehr bequem zu verwenden ist. Der Konstruktor von

RedisLock lautet wie folgt:

/**
 * @param \Illuminate\Redis\Connections\Connection $redis redis实例
 * @param string $name redis锁的键名
 * @param int $seconds redis锁的失效时间
 * @param string|null $owner redis锁的值,如果不设置或者为null,基类会将其设置为随机字符串
 */public function __construct($redis, $name, $seconds, $owner = null){
    parent::__construct($name, $seconds, $owner);
    $this->redis = $redis;}
Nach dem Login kopieren

Verwenden Sie in dieser Klasse die Methode acquire(), um eine sich gegenseitig ausschließende Redis-Sperre zu erhalten, und verwenden Sie Die Methode release()< /code> gibt die Sperre frei. <code>IlluminateCacheRedisLock Redis锁类,直接使用就行,用起来也很方便。

RedisLock 的构造函数如下:

use Illuminate\Support\Facades\Redis;use Illuminate\Cache\RedisLock;
Nach dem Login kopieren

在这个类中,使用 acquire() 方法获得互斥的Redis锁,使用 release()

Anwendungsbeispiel:

function RedisLockTest(){
    //获取redis实例
    $redis = Redis::connection();
    $key = &#39;redis_test_key&#39;;
    //获取redis锁实例
    $redisLock = new RedisLock($redis, $key . &#39;_lock&#39;, 30);
    $res = $redis->get($key);
    if (empty($res)) {
        //拿到互斥锁
        if ($redisLock->acquire()) {
            //模拟从数据库中获取数据的过程
            sleep(5);
            $value = date(&#39;Y-m-d H:i:s&#39;);
            //更新缓存,过期时间可以根据实际情况调整
            $redis->setex($key, 60, $value);
            //释放锁
            $redisLock->release();
            return $value;
        } else {
            //等待2秒,然后重新获取缓存值,让其他获取到锁的进程取得数据并设置缓存,等待时间可以根据实际情况调整
            sleep(2);
            return $this->RedisLockTest();
        }
    } else {
        return $res;
    }}
Nach dem Login kopieren
rrree

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem der Cache-Penetration mithilfe der Redis-Sperre in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage