前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Yii2 redis同步数据到mysql

Yii2 redis同步数据到mysql

作者头像
botkenni
发布2019-09-02 16:31:26
2.5K0
发布2019-09-02 16:31:26
举报
文章被收录于专栏:IT码农IT码农

将redis数据写入mysql中:

本次案例讲解将如何将商城中商品浏览次数通过缓存记录并写入mysql中 具体的redis安装过程暂且就省略了.....

一、安装redis插件|配置redis

composer require yiisoft/yii2-redis

找到common的config文件,在components下加入redis配置参数

代码语言:javascript
复制
 'redis' => [
            'class' => 'yii\redis\Connection',
            'hostname' => 'localhost',
            'port' => 6379,
            'database' => 0,
        ],

二、建立redis 在显示商品详情页面之前建立redis记录,每当用户访问该页面,就对redis进行一个判断,如果没有redis则建立并赋值为1,如果已存在则在原数据的基础上+1

代码语言:javascript
复制
 //将商品访问写入到redis中
        $redisObj = Yii::$app->redis;
        $visitsData = $redisObj->get('goods_visits');

        //反序列化访问数据
        $visitsData = empty($visitsData)?[]:unserialize($visitsData);

        if (isset($visitsData[$id])) {
            $visitsData[$id] += 1;
        }else{
            $visitsData[$id] = 1;
        }

        //序列化后的数据格式为{商品id:浏览次数}
        $visitsData = serialize($visitsData);
        $redisObj->set('goods_visits',$visitsData);

三、将redis写入数据库中 创建一个新的控制器,通过redistomysql方法获取存在的redis进行判断,如果为空则返回true,否则同步到Mysql当中,并在同步完成之后将redis数据删除

代码语言:javascript
复制
public function actionRedistomysql()
    {
        //从redis中查询所有商品信息
        $redisObj = Yii::$app->redis;
        $visits = $redisObj->get("goods_visits");

        //三元表示判断redis是否为空
        $visitsArr = empty($visits)?[]:unserialize($visits);

        if (empty($visitsArr)) {
            return true;
        }

        //将浏览数据写入数据库
        foreach ($visitsArr as $k=>$v)
        {
            $goodsModle = Goods::findOne($k);
            $goodsModle->visites += $v;
            //如果数据存储成功则删除对应的数据
            if ($goodsModle->save() !== false) {
                unset($visitsArr[$k]);
            }
            //延迟2秒防止高频率读取数据库
            sleep(2);
        }

        //删除redis中商品浏览数据
        $redisObj->del("goods_visits");

        if (empty($visitsArr)) {
            return true;
        }

        $redisObj->set('goods_visits',serialize($visitsArr));
}

四、检测redis是否建立成功 首先访问商品详情页面,然后进入Linux服务器,(redis安装成功后)执行redis-cli,进入redis控制台,执行get goods_visits(创建的redis名),如果情况如下则刷新商品详情页面

redis1.jpg

成功页面如下:

redis2.png

到这里就完成了redis同步数据到Mysql的基本步骤,但是每一次的执行需要手动进行访问,所以这里就需要一个能让它自动执行的方法,因为本项目是在linux下运行,所以使用了crontab定时执行任务,如果是windows下则使用任务计划.....

首先执行crontab -e命令进入linux定时任务设置 基本格式 : * * * * * command(执行的方法地址,如:http://www.xxxx.com/cront/redistomysql) 分 时 日 月 周 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令

访问商品详情页面,然后等到设定的时间之后查看数据库中是否数据存在,存在数据那么标识你的redis就已经设置成功了,没有数据那么就需要检查你的代码,或者设置是否正确了,本次redis的使用介绍就到此为止了。

作者:meteorites 链接:https://www.jianshu.com/p/7b58bd6c8f97 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

G

M

T

Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

Text-to-speech function is limited to 200 characters

Options : History : Feedback : Donate

Close

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 将redis数据写入mysql中:
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档