Swoft 緩存及Redis使用


配置

修改 /config/properties/cache.php 文件

return [ 'redis'     => [ 'name'        => 'redis',
        'uri'         => [ '127.0.0.1:6379' ],
        'minActive'   => 8,
        'maxActive'   => 8,
        'maxWait'     => 8,
        'maxWaitTime' => 3,
        'maxIdleTime' => 60,
        'timeout'     => 8,
        'db'          => 0,
        'prefix'      => '',
        'serialize'   => 0, ],
    'demoRedis' => [ 'db'     => 2,
        'prefix' => 'demo_redis_', ] ];

redis可以配置多個實例,相同的配置僅需要在第一個實例配置一次即可

基本用法

獲取redis對象:

  • 通過cache()函數
cache()->get('google');
  • 通過注入的方法:Inject(“實例名”),不填則使用默認
/** * @Inject() * @var \Swoft\Redis\Redis */
private $redis;

獲取到redis對象后就可以調用下面的方法操作redis

class RedisController { /** * @Inject() * @var \Swoft\Redis\Redis */
    private $redis; /** * @Inject("demoRedis") * @var \Swoft\Redis\Redis */
    private $demoRedis; public function set(){ return $this->redis->set('apple','www.apple.com'); } public function get(){ return cache()->get('google'); } public function set2(){ return $this->demoRedis->set('google','www.google.com'); } public function get2(){ return $this->demoRedis->get('google'); } public function hSet(){ return $this->redis->hSet('website','google','www.google.com'); } public function hGet(){ return $this->redis->hGet('website','google'); } public function hMset(){ $websites = [ 'sina' => 'www.sina.com.cn',
            'baidu' => 'www.baidu.com' ]; return cache()->hMset('website',$websites); } public function hMget(){ return cache()->hMget('website',['baidu','google']); } }

實際應用

1. 隊列操作,隊列存放10條商品記錄,每次插入一條新記錄就會刪除掉一條最老的記錄

    /** * @return array */
    public function queuein(){ //$data 模擬從數據庫中查詢出的數據
        $data = [ 'id' => rand(1,9999),
            'goods_name' => '商品'.rand(0,99999),
            'create_time' => date('Y-m-d') ]; $this->redis->lPush('goods',json_encode($data)); $this->redis->lTrim('goods',0,10); $goods = array(); foreach($this->redis->lRange('goods',0,10) as $item){ $goods[] = json_decode($item); } return $goods; }

2. 圖片點贊,如果redis中存在該圖片記錄,則對應的贊 +1,如不存在則從數據庫中查出然后存入redis

    /** * @RequestMapping(route="thumb/{id}") */
    public function thumb($id){ if($this->redis->exists('img_'.$id)){ $this->redis->hIncrBy('img_'.$id,'img_prise',1); }else{ //$data 模擬從數據庫中查詢出的數據
            $data = [ 'img_id' => $id,
                'img_prise' => rand(1,999),
                'img_url' => md5(rand(999,99999)) ]; $this->redis->hMset('img_'.$id,$data); } return $this->redis->hMget('img_'.$id, ['img_id','img_prise','img_url']); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM