Rumah pembangunan bahagian belakang tutorial php php操作redies打包的类

php操作redies打包的类

Jun 13, 2016 pm 12:19 PM
gt key return this

php操作redies封装的类


<?php /** * Redis 操作,支持 Master/Slave 的负载集群 * * @author jackluo */class RedisCluster{           // 是否使用 M/S 的读写集群方案    private $_isUseCluster = false;           // Slave 句柄标记    private $_sn = 0;           // 服务器连接句柄    private $_linkHandle = array(        &#39;master&#39;=>null,// 只支持一台 Master        'slave'=>array(),// 可以有多台 Slave    );           /**     * 构造函数     *     * @param boolean $isUseCluster 是否采用 M/S 方案     */    public function __construct($isUseCluster=false){        $this->_isUseCluster = $isUseCluster;    }           /**     * 连接服务器,注意:这里使用长连接,提高效率,但不会自动关闭     *     * @param array $config Redis服务器配置     * @param boolean $isMaster 当前添加的服务器是否为 Master 服务器     * @return boolean     */    public function connect($config=array('host'=>'127.0.0.1','port'=>6379), $isMaster=true){        // default port        if(!isset($config['port'])){            $config['port'] = 6379;        }        // 设置 Master 连接        if($isMaster){            $this->_linkHandle['master'] = new Redis();            $ret = $this->_linkHandle['master']->pconnect($config['host'],$config['port']);        }else{            // 多个 Slave 连接            $this->_linkHandle['slave'][$this->_sn] = new Redis();            $ret = $this->_linkHandle['slave'][$this->_sn]->pconnect($config['host'],$config['port']);            ++$this->_sn;        }        return $ret;    }           /**     * 关闭连接     *     * @param int $flag 关闭选择 0:关闭 Master 1:关闭 Slave 2:关闭所有     * @return boolean     */    public function close($flag=2){        switch($flag){            // 关闭 Master            case 0:                $this->getRedis()->close();            break;            // 关闭 Slave            case 1:                for($i=0; $i_sn; ++$i){                    $this->_linkHandle['slave'][$i]->close();                }            break;            // 关闭所有            case 1:                $this->getRedis()->close();                for($i=0; $i_sn; ++$i){                    $this->_linkHandle['slave'][$i]->close();                }            break;        }        return true;    }           /**     * 得到 Redis 原始对象可以有更多的操作     *     * @param boolean $isMaster 返回服务器的类型 true:返回Master false:返回Slave     * @param boolean $slaveOne 返回的Slave选择 true:负载均衡随机返回一个Slave选择 false:返回所有的Slave选择     * @return redis object     */    public function getRedis($isMaster=true,$slaveOne=true){        // 只返回 Master        if($isMaster){            return $this->_linkHandle['master'];        }else{            return $slaveOne ? $this->_getSlaveRedis() : $this->_linkHandle['slave'];        }    }           /**     * 写缓存     *     * @param string $key 组存KEY     * @param string $value 缓存值     * @param int $expire 过期时间, 0:表示无过期时间     */    public function set($key, $value, $expire=0){        // 永不超时        if($expire == 0){            $ret = $this->getRedis()->set($key, $value);        }else{            $ret = $this->getRedis()->setex($key, $expire, $value);        }        return $ret;    }           /**     * 读缓存     *     * @param string $key 缓存KEY,支持一次取多个 $key = array('key1','key2')     * @return string || boolean  失败返回 false, 成功返回字符串     */    public function get($key){        // 是否一次取多个值        $func = is_array($key) ? 'mGet' : 'get';        // 没有使用M/S        if(! $this->_isUseCluster){            return $this->getRedis()->{$func}($key);        }        // 使用了 M/S        return $this->_getSlaveRedis()->{$func}($key);    }     /*    // magic function    public function __call($name,$arguments){        return call_user_func($name,$arguments);        }*/    /**     * 条件形式设置缓存,如果 key 不存时就设置,存在时设置失败     *     * @param string $key 缓存KEY     * @param string $value 缓存值     * @return boolean     */    public function setnx($key, $value){        return $this->getRedis()->setnx($key, $value);    }           /**     * 删除缓存     *     * @param string || array $key 缓存KEY,支持单个健:"key1" 或多个健:array('key1','key2')     * @return int 删除的健的数量     */    public function remove($key){        // $key => "key1" || array('key1','key2')        return $this->getRedis()->delete($key);    }           /**     * 值加加操作,类似 ++$i ,如果 key 不存在时自动设置为 0 后进行加加操作     *     * @param string $key 缓存KEY     * @param int $default 操作时的默认值     * @return int 操作后的值     */    public function incr($key,$default=1){        if($default == 1){            return $this->getRedis()->incr($key);        }else{            return $this->getRedis()->incrBy($key, $default);        }    }           /**     * 值减减操作,类似 --$i ,如果 key 不存在时自动设置为 0 后进行减减操作     *     * @param string $key 缓存KEY     * @param int $default 操作时的默认值     * @return int 操作后的值     */    public function decr($key,$default=1){        if($default == 1){            return $this->getRedis()->decr($key);        }else{            return $this->getRedis()->decrBy($key, $default);        }    }           /**     * 添空当前数据库     *     * @return boolean     */    public function clear(){        return $this->getRedis()->flushDB();    }           /* =================== 以下私有方法 =================== */           /**     * 随机 HASH 得到 Redis Slave 服务器句柄     *     * @return redis object     */    private function _getSlaveRedis(){        // 就一台 Slave 机直接返回        if($this->_sn _linkHandle['slave'][0];        }        // 随机 Hash 得到 Slave 的句柄        $hash = $this->_hashId(mt_rand(), $this->_sn);        return $this->_linkHandle['slave'][$hash];    }           /**     * 根据ID得到 hash 后 0~m-1 之间的值     *     * @param string $id     * @param int $m     * @return int     */    private function _hashId($id,$m=10)    {        //把字符串K转换为 0~m-1 之间的一个值作为对应记录的散列地址        $k = md5($id);        $l = strlen($k);        $b = bin2hex($k);        $h = 0;        for($i=0;$igetRedis()->lpush($key,$value);    }    /**     *    add lpop     */    public function lpop($key){        return $this->getRedis()->lpop($key);    }    /**     * lrange     */    public function lrange($key,$start,$end){        return $this->getRedis()->lrange($key,$start,$end);        }    /**     *    set hash opeation     */    public function hset($name,$key,$value){        if(is_array($value)){            return $this->getRedis()->hset($name,$key,serialize($value));            }        return $this->getRedis()->hset($name,$key,$value);    }    /**     *    get hash opeation     */    public function hget($name,$key = null,$serialize=true){        if($key){            $row = $this->getRedis()->hget($name,$key);            if($row && $serialize){                unserialize($row);            }            return $row;        }        return $this->getRedis()->hgetAll($name);    }    /**     *    delete hash opeation     */    public function hdel($name,$key = null){        if($key){            return $this->getRedis()->hdel($name,$key);        }        return $this->getRedis()->hdel($name);    }    /**     * Transaction start     */    public function multi(){        return $this->getRedis()->multi();        }    /**     * Transaction send     */    public function exec(){        return $this->getRedis()->exec();        }       }// End Class       // ================= TEST DEMO =================       // 只有一台 Redis 的应用$redis = new RedisCluster();$redis->connect(array('host'=>'127.0.0.1','port'=>6379));//*$cron_id = 10001;$CRON_KEY = 'CRON_LIST'; //$PHONE_KEY = 'PHONE_LIST:'.$cron_id;////cron info$cron = $redis->hget($CRON_KEY,$cron_id);if(empty($cron)){        $cron = array('id'=>10,'name'=>'jackluo');//mysql data    $redis->hset($CRON_KEY,$cron_id,$cron); // set redis    }//phone list$phone_list = $redis->lrange($PHONE_KEY,0,-1);print_r($phone_list);if(empty($phone_list)){    $phone_list =explode(',','13228191831,18608041585');    //mysql data    //join  list    if($phone_list){        $redis->multi();        foreach ($phone_list as $phone) {            $redis->lpush($PHONE_KEY,$phone);                    }        $redis->exec();    }}print_r($phone_list);/*$list = $redis->hget($cron_list,);var_dump($list);*///*///$redis->set('id',35);/*    $redis->lpush('test','1111');    $redis->lpush('test','2222');    $redis->lpush('test','3333');    $list = $redis->lrange('test',0,-1);    print_r($list);    $lpop = $redis->lpop('test');    print_r($lpop);    $lpop = $redis->lpop('test');    print_r($lpop);    $lpop = $redis->lpop('test');    print_r($lpop);*///    var_dump($redis->get('id'));
Salin selepas log masuk


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

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.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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)

Apakah perbezaan antara Huawei GT3 Pro dan GT4? Apakah perbezaan antara Huawei GT3 Pro dan GT4? Dec 29, 2023 pm 02:27 PM

Ramai pengguna akan memilih jenama Huawei apabila memilih jam tangan pintar Antaranya, Huawei GT3pro dan GT4 adalah pilihan yang sangat popular. Apakah perbezaan antara Huawei GT3pro dan GT4? 1. Rupa GT4: 46mm dan 41mm, bahan cermin kaca + badan keluli tahan karat + cangkang belakang gentian resolusi tinggi. GT3pro: 46.6mm dan 42.9mm, bahannya ialah kaca nilam + badan titanium/badan seramik + cangkerang belakang seramik 2. GT4 yang sihat: Menggunakan algoritma Huawei Truseen5.5+ terkini, hasilnya akan lebih tepat. GT3pro: Penambahan elektrokardiogram ECG dan saluran darah serta keselamatan

Penjelasan terperinci tentang penggunaan pulangan dalam bahasa C Penjelasan terperinci tentang penggunaan pulangan dalam bahasa C Oct 07, 2023 am 10:58 AM

Penggunaan pulangan dalam bahasa C ialah: 1. Untuk fungsi yang jenis nilai pulangannya adalah batal, anda boleh menggunakan pernyataan pulangan untuk menamatkan pelaksanaan fungsi lebih awal 2. Untuk fungsi yang jenis nilai pulangannya tidak batal, fungsi bagi penyataan pulangan adalah untuk menamatkan pelaksanaan fungsi Hasilnya dikembalikan kepada pemanggil 3. Menamatkan pelaksanaan fungsi lebih awal, kita boleh menggunakan penyataan pulangan untuk menamatkan pelaksanaan fungsi lebih awal jika fungsi tidak mengembalikan nilai.

Apakah yang dimaksudkan dengan atribut identiti dalam SQL? Apakah yang dimaksudkan dengan atribut identiti dalam SQL? Feb 19, 2024 am 11:24 AM

Apakah Identity dalam SQL? Contoh kod khusus diperlukan Dalam SQL, Identity ialah jenis data khas yang digunakan untuk menjana nombor penambahan automatik. Ia sering digunakan untuk mengenal pasti setiap baris data dalam jadual. Lajur Identiti sering digunakan bersama dengan lajur kunci utama untuk memastikan setiap rekod mempunyai pengecam unik. Artikel ini akan memperincikan cara menggunakan Identiti dan beberapa contoh kod praktikal. Cara asas untuk menggunakan Identity ialah menggunakan Identit semasa membuat jadual.

Bagaimana SpringBoot memantau peristiwa perubahan kunci redis Bagaimana SpringBoot memantau peristiwa perubahan kunci redis May 26, 2023 pm 01:55 PM

1. Gambaran Keseluruhan Fungsi Pemberitahuan ruang kekunci membolehkan pelanggan menerima acara yang mengubah suai perubahan Rediskey dalam beberapa cara dengan melanggan saluran atau corak. Semua arahan yang mengubah suai kunci kekunci. Semua kunci yang menerima perintah LPUSHkeyvalue[value…]. Semua kunci tamat tempoh dalam pangkalan data db. Acara diedarkan melalui fungsi langganan dan penerbitan Redis (pub/sub), jadi semua pelanggan yang menyokong fungsi langganan dan penerbitan boleh terus menggunakan fungsi pemberitahuan ruang kekunci tanpa membuat sebarang pengubahsuaian. Kerana fungsi langganan dan penerbitan semasa Redis menggunakan strategi fireandforget, jika program anda

Betulkan: Alat snipping tidak berfungsi dalam Windows 11 Betulkan: Alat snipping tidak berfungsi dalam Windows 11 Aug 24, 2023 am 09:48 AM

Mengapa Alat Snipping Tidak Berfungsi pada Windows 11 Memahami punca masalah boleh membantu mencari penyelesaian yang betul. Berikut ialah sebab utama Alat Snipping mungkin tidak berfungsi dengan betul: Focus Assistant dihidupkan: Ini menghalang Snipping Tool daripada dibuka. Aplikasi rosak: Jika alat snipping ranap semasa pelancaran, ia mungkin rosak. Pemacu grafik lapuk: Pemacu yang tidak serasi mungkin mengganggu alat snipping. Gangguan daripada aplikasi lain: Aplikasi lain yang sedang berjalan mungkin bercanggah dengan Alat Snipping. Sijil telah tamat tempoh: Ralat semasa proses naik taraf boleh menyebabkan penyelesaian mudah ini sesuai untuk kebanyakan pengguna dan tidak memerlukan sebarang pengetahuan teknikal khusus. 1. Kemas kini apl Windows dan Microsoft Store

Apakah perintah pelaksanaan pemulangan dan akhirnya pernyataan di Jawa? Apakah perintah pelaksanaan pemulangan dan akhirnya pernyataan di Jawa? Apr 25, 2023 pm 07:55 PM

Kod sumber: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}akhirnya{x=3;}}}# Output Output kod di atas hanya boleh membuat kesimpulan: return dilaksanakan sebelum akhirnya. Mari kita lihat apa yang berlaku pada tahap bytecode. Yang berikut memintas sebahagian kod bait kaedah case1 dan membandingkan kod sumber untuk menganotasi maksud setiap arahan dalam

Kerentanan kunci pengesahan dua faktor Yubico yang tidak dapat ditambal memecah keselamatan kebanyakan peranti Yubikey 5, Kunci Keselamatan dan YubiHSM 2FA Kerentanan kunci pengesahan dua faktor Yubico yang tidak dapat ditambal memecah keselamatan kebanyakan peranti Yubikey 5, Kunci Keselamatan dan YubiHSM 2FA Sep 04, 2024 pm 06:32 PM

Kerentanan kunci pengesahan dua faktor Yubico yang tidak dapat ditambal telah memecahkan keselamatan kebanyakan peranti Yubikey 5, Kunci Keselamatan dan YubiHSM 2FA. JavaCard A22 Feitian dan peranti lain yang menggunakan TPM siri Infineon SLB96xx juga terdedah. Semua

Bagaimana untuk menyelesaikan masalah penghapusan kelompok nilai utama dalam redis Bagaimana untuk menyelesaikan masalah penghapusan kelompok nilai utama dalam redis May 31, 2023 am 08:59 AM

Masalah yang dihadapi: Semasa proses pembangunan, anda akan menemui kunci yang perlu dipadamkan secara berkelompok mengikut peraturan tertentu, seperti login_logID (ID ialah pembolehubah Sekarang anda perlu memadamkan data seperti "login_log*", tetapi redis sendiri hanya mempunyai pertanyaan kelompok. Penyelesaian: Tanya dahulu, kemudian padam, gunakan xargs untuk menghantar parameter (xargs boleh menukar paip atau data input standard (stdin) kepada parameter baris arahan), laksanakan pernyataan pertanyaan dahulu, dan kemudian alih keluar nilai kunci yang ditanya dan parameter del asal. padam. redis-cliKEYSkey* (keadaan carian)|xargsr

See all articles