zoukankan      html  css  js  c++  java
  • 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 SwoftRedisRedis
     */
    private $redis;

    获取到redis对象后就可以调用下面的方法操作redis

    class RedisController
    {
        /**
         * @Inject()
         * @var SwoftRedisRedis
         */
        private $redis;
        /**
         * @Inject("demoRedis")
         * @var SwoftRedisRedis
         */
        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']);
        }
  • 相关阅读:
    发布NBearV3最终测试版v3.2.5
    NBearV3教程——Web篇
    JUnit中的设计模式:命令模式
    HTTP协议 通信过程介绍
    JUnit中的设计模式:适配器模式
    《Head First设计模式》 读书笔记15 其余的模式(一) 桥接 生成器 责任链
    SQL基础:数据库规范化与三范式
    《Head First设计模式》 读书笔记13 复合模式 MVC模式
    Android Tab标签的使用基础
    Android设备上的传感器模拟工具:SensorSimulator
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/10330168.html
Copyright © 2011-2022 走看看