Rumah pembangunan bahagian belakang tutorial php Redis常见的使用场景分享

Redis常见的使用场景分享

May 31, 2018 am 09:31 AM
redis kongsi tempat kejadian

本文主要和大家分享Redis常见的使用场景,简单字符串缓存实战,希望能帮助到大家。

$redis->connect('127.0.0.1', 6379);
$strCacheKey  = 'Test_bihu';//SET 应用$arrCacheData = [    'name' => 'job',    'sex'  => '男',    'age'  => '30'];
$redis->set($strCacheKey, json_encode($arrCacheData));
$redis->expire($strCacheKey, 30);  # 设置30秒后过期$json_data = $redis->get($strCacheKey);
$data = json_decode($json_data);
print_r($data->age); //输出数据//HSET 应用$arrWebSite = [    'google' => [        'google.com',        'google.com.hk'
    ],
];
$redis->hSet($strCacheKey, 'google', json_encode($arrWebSite['google']));
$json_data = $redis->hGet($strCacheKey, 'google');
$data = json_decode($json_data);
print_r($data); //输出数据

简单队列实战

$redis->connect('127.0.0.1', 6379);
$strQueueName  = 'Test_bihu_queue';//进队列$redis->rpush($strQueueName, json_encode(['uid' => 1,'name' => 'Job']));
$redis->rpush($strQueueName, json_encode(['uid' => 2,'name' => 'Tom']));
$redis->rpush($strQueueName, json_encode([&#39;uid&#39; => 3,&#39;name&#39; => &#39;John&#39;]));echo "---- 进队列成功 ---- <br /><br />";//查看队列$strCount = $redis->lrange($strQueueName, 0, -1);echo "当前队列数据为: <br />";
print_r($strCount);//出队列$redis->lpop($strQueueName);echo "<br /><br /> ---- 出队列成功 ---- <br /><br />";//查看队列$strCount = $redis->lrange($strQueueName, 0, -1);echo "当前队列数据为: <br />";
print_r($strCount);

简单发布订阅实战

//以下是 pub.php 文件的内容 cli下运行ini_set(&#39;default_socket_timeout&#39;, -1);
$redis->connect(&#39;127.0.0.1&#39;, 6379);
$strChannel = &#39;Test_bihu_channel&#39;;//发布$redis->publish($strChannel, "来自{$strChannel}频道的推送");echo "---- {$strChannel} ---- 频道消息推送成功~ <br/>";
$redis->close();

简单计数器实战

//以下是 sub.php 文件内容 cli下运行ini_set(&#39;default_socket_timeout&#39;, -1);
$redis->connect(&#39;127.0.0.1&#39;, 6379);
$strChannel = &#39;Test_bihu_channel&#39;;//订阅echo "---- 订阅{$strChannel}这个频道,等待消息推送...----  <br/><br/>";
$redis->subscribe([$strChannel], &#39;callBackFun&#39;);function callBackFun($redis, $channel, $msg){
    print_r([        &#39;redis&#39;   => $redis,        &#39;channel&#39; => $channel,        &#39;msg&#39;     => $msg
    ]);
}

排行榜实战

$redis->connect(&#39;127.0.0.1&#39;, 6379);
$strKey = &#39;Test_bihu_comments&#39;;//设置初始值$redis->set($strKey, 0);

$redis->INCR($strKey);  //+1$redis->INCR($strKey);  //+1$redis->INCR($strKey);  //+1$strNowCount = $redis->get($strKey);echo "---- 当前数量为{$strNowCount}。 ---- ";
$redis->connect(&#39;127.0.0.1&#39;, 6379);
$strKey = &#39;Test_bihu_score&#39;;//存储数据$redis->zadd($strKey, &#39;50&#39;, json_encode([&#39;name&#39; => &#39;Tom&#39;]));
$redis->zadd($strKey, &#39;70&#39;, json_encode([&#39;name&#39; => &#39;John&#39;]));
$redis->zadd($strKey, &#39;90&#39;, json_encode([&#39;name&#39; => &#39;Jerry&#39;]));
$redis->zadd($strKey, &#39;30&#39;, json_encode([&#39;name&#39; => &#39;Job&#39;]));
$redis->zadd($strKey, &#39;100&#39;, json_encode([&#39;name&#39; => &#39;LiMing&#39;]));

$dataOne = $redis->ZREVRANGE($strKey, 0, -1, true);echo "---- {$strKey}由大到小的排序 ---- <br /><br />";
print_r($dataOne);

$dataTwo = $redis->ZRANGE($strKey, 0, -1, true);echo "<br /><br />---- {$strKey}由小到大的排序 ---- <br /><br />";
print_r($dataTwo);

解释:悲观锁(Pessimistic Lock), 顾名思义,就是很悲观。

每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。

场景:如果项目中使用了缓存且对缓存设置了超时时间。

当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,

大量并发请求会穿透缓存直接查询数据库,造成雪崩效应。

/**
 * 获取锁
 * @param  String  $key    锁标识
 * @param  Int     $expire 锁过期时间
 * @return Boolean
 */public function lock($key = &#39;&#39;, $expire = 5) {
    $is_lock = $this->_redis->setnx($key, time()+$expire);    //不能获取锁
    if(!$is_lock){        //判断锁是否过期
        $lock_time = $this->_redis->get($key);        //锁已过期,删除锁,重新获取
        if (time() > $lock_time) {
            unlock($key);
            $is_lock = $this->_redis->setnx($key, time() + $expire);
        }
    }    return $is_lock? true : false;
}/**
 * 释放锁
 * @param  String  $key 锁标识
 * @return Boolean
 */public function unlock($key = &#39;&#39;){    return $this->_redis->del($key);
}// 定义锁标识$key = &#39;Test_bihu_lock&#39;;// 获取锁$is_lock = lock($key, 10);if ($is_lock) {    echo &#39;get lock success<br>&#39;;    echo &#39;do sth..<br>&#39;;
    sleep(5);    echo &#39;success<br>&#39;;
    unlock($key);
} else { //获取锁失败
    echo &#39;request too frequently<br>&#39;;
}

简单事务的乐观锁实战

解释:乐观锁(Optimistic Lock), 顾名思义,就是很乐观。

每次去拿数据的时候都认为别人不会修改,所以不会上锁。

watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败。

也可以调用watch多次监视多个key。这样就可以对指定的key加乐观锁了。

注意watch的key是对整个连接有效的,事务也一样。

如果连接断开,监视和事务都会被自动清除。

当然了exec,discard,unwatch命令都会清除连接中的所有监视。

$strKey = &#39;Test_bihu_age&#39;;

$redis->set($strKey,10);

$age = $redis->get($strKey);echo "---- Current Age:{$age} ---- <br/><br/>";

$redis->watch($strKey);// 开启事务$redis->multi();//在这个时候新开了一个新会话执行$redis->set($strKey,30);  //新会话echo "---- Current Age:{$age} ---- <br/><br/>"; //30$redis->set($strKey,20);

$redis->exec();

$age = $redis->get($strKey);echo "---- Current Age:{$age} ---- <br/><br/>"; //30//当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败

相关推荐:

PHP链接redis的方法代码
一个php+redis的简单实例分享

Redis在PHP的一些使用方法

Atas ialah kandungan terperinci Redis常见的使用场景分享. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pek pengembangan terbaik Laravel yang disyorkan: 2024 Alat penting Pek pengembangan terbaik Laravel yang disyorkan: 2024 Alat penting Apr 30, 2025 pm 02:18 PM

Pakej lanjutan Laravel yang penting untuk 2024 termasuk: 1 Laraveldebrugbar, yang digunakan untuk memantau dan debug kod; 2. Laraveltelescope, menyediakan pemantauan aplikasi terperinci; 3. Laravelhorizon, menguruskan tugas -tugas redis. Pek pengembangan ini dapat meningkatkan kecekapan pembangunan dan prestasi aplikasi.

Pembinaan Persekitaran Laravel dan Konfigurasi Asas (Windows/Mac/Linux) Pembinaan Persekitaran Laravel dan Konfigurasi Asas (Windows/Mac/Linux) Apr 30, 2025 pm 02:27 PM

Langkah -langkah untuk membina persekitaran Laravel pada sistem operasi yang berbeza adalah seperti berikut: 1.Windows: Gunakan XAMPP untuk memasang PHP dan komposer, konfigurasikan pembolehubah persekitaran, dan pasang Laravel. 2.MAC: Gunakan homebrew untuk memasang PHP dan komposer dan pasang Laravel. 3.Linux: Gunakan Ubuntu untuk mengemas kini sistem, pasang PHP dan komposer, dan pasang Laravel. Perintah dan laluan khusus setiap sistem adalah berbeza, tetapi langkah -langkah teras adalah konsisten untuk memastikan pembinaan lancar persekitaran pembangunan Laravel.

Redis: perbandingan dengan pelayan pangkalan data tradisional Redis: perbandingan dengan pelayan pangkalan data tradisional May 07, 2025 am 12:09 AM

Redis lebih tinggi daripada pangkalan data tradisional dalam senario latency yang tinggi dan rendah, tetapi tidak sesuai untuk pertanyaan kompleks dan pemprosesan transaksi. 1.Redis menggunakan penyimpanan memori, bacaan cepat dan tulis kelajuan, sesuai untuk kesesuaian tinggi dan keperluan latensi yang rendah. 2. Pangkalan data tradisional didasarkan pada cakera, sokongan pertanyaan kompleks dan pemprosesan transaksi, dan mempunyai konsistensi dan ketekunan data yang kuat. 3. Redis sesuai sebagai suplemen atau pengganti pangkalan data tradisional, tetapi ia perlu dipilih mengikut keperluan perniagaan tertentu.

Bagaimana untuk mengehadkan sumber pengguna di Linux? Bagaimana cara mengkonfigurasi ULIMIT? Bagaimana untuk mengehadkan sumber pengguna di Linux? Bagaimana cara mengkonfigurasi ULIMIT? May 29, 2025 pm 11:09 PM

Sistem Linux mengehadkan sumber pengguna melalui perintah ULIMIT untuk mengelakkan penggunaan sumber yang berlebihan. 1.Ulimit adalah arahan shell terbina dalam yang boleh mengehadkan bilangan deskriptor fail (-N), saiz memori (-V), kiraan thread (-u), dan lain-lain, yang dibahagikan kepada had lembut (nilai berkesan semasa) dan had keras (had atas maksimum). 2. Gunakan perintah ULIMIT secara langsung untuk pengubahsuaian sementara, seperti ULIMIT-N2048, tetapi hanya sah untuk sesi semasa. 3. Untuk kesan tetap, anda perlu mengubah suai /etc/security/limits.conf dan fail konfigurasi PAM, dan tambah sessionrequiredpam_limits.so. 4. Perkhidmatan SystemD perlu menetapkan LIM dalam fail unit

Adakah Redis terutamanya pangkalan data? Adakah Redis terutamanya pangkalan data? May 05, 2025 am 12:07 AM

Redis terutamanya pangkalan data, tetapi ia lebih daripada sekadar pangkalan data. 1. Sebagai pangkalan data, Redis menyokong kegigihan dan sesuai untuk keperluan berprestasi tinggi. 2. Sebagai cache, Redis meningkatkan kelajuan tindak balas aplikasi. 3. Sebagai broker mesej, REDIS menyokong mod penerbitan-langganan, sesuai untuk komunikasi masa nyata.

Redis: Beyond SQL - Perspektif NoSQL Redis: Beyond SQL - Perspektif NoSQL May 08, 2025 am 12:25 AM

Redis melampaui pangkalan data SQL kerana prestasi dan fleksibiliti yang tinggi. 1) Redis mencapai bacaan dan tulis kelajuan yang sangat cepat melalui penyimpanan memori. 2) Ia menyokong pelbagai struktur data, seperti senarai dan koleksi, sesuai untuk pemprosesan data yang kompleks. 3) Model tunggal-threaded memudahkan pembangunan, tetapi konkurensi tinggi mungkin menjadi kesesakan.

Langkah dan Contoh untuk Membangun Laman Web PHP Dinamik Dengan PHPStudy Langkah dan Contoh untuk Membangun Laman Web PHP Dinamik Dengan PHPStudy May 16, 2025 pm 07:54 PM

Langkah -langkah untuk membina laman web PHP yang dinamik menggunakan PHPStudy termasuk: 1. Pasang PHPStudy dan mulakan perkhidmatan; 2. Konfigurasi Direktori Root Laman Web dan Sambungan Pangkalan Data; 3. Tulis skrip PHP untuk menghasilkan kandungan dinamik; 4. Debug dan mengoptimumkan prestasi laman web. Melalui langkah -langkah ini, anda boleh membina laman web PHP dinamik yang berfungsi sepenuhnya dari awal.

Redis: Membentangkan tujuan dan aplikasi utama Redis: Membentangkan tujuan dan aplikasi utama May 03, 2025 am 12:11 AM

Redisisanopen-Source, In-MenoryDataStructureStoreusedasadatabase, Cache, andMessageBroker, ExcellingInspeedandversatility.Iswidelyededforcaching, Real-Timeanalytics, sessionManagement, danSleaderboardsDuetoitssupportorvariousdatastructures

See all articles