Yii2 redis同步数据到mysql

Yii2 redis同步数据到mysql

大家好,又见面了,我是你们的朋友全栈君。

将redis数据写入mysql中:

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

一、安装redis插件|配置redis

composer require yiisoft/yii2-redis

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

 'redis' => [
            'class' => 'yii\redis\Connection',
            'hostname' => 'localhost',
            'port' => 6379,
            'database' => 0,
        ],

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

 //将商品访问写入到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数据删除

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

转载于:https://my.oschina.net/botkenni/blog/1806112

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107549.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月2日 下午4:35
下一篇 2022年4月2日 下午5:00


相关推荐

  • goland 激活码 2021 3月最新注册码[通俗易懂]

    goland 激活码 2021 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    162
  • 京东商城2020年销售额_天猫精灵怎么激活互联网

    京东商城2020年销售额_天猫精灵怎么激活互联网今日看点✦2020天猫双11全球狂欢季总成交额4982亿,超450个品牌成交额过亿✦京东11.11全球热爱季累计下单金额超2715亿,再创纪录✦百度整合好看视频和全民小视频,升级为…

    2025年7月29日
    4
  • 单链表的头插法与尾插法详解及实现(C语言)[通俗易懂]

    单链表的头插法与尾插法详解及实现(C语言)[通俗易懂]单链表的建立有头插法和尾插法首先是定义一个结构体#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#defineElemTypeinttypedefstructLNode{ ElemTypeData;//数据域 structLNode*Ne…

    2022年5月19日
    88
  • MyBase7定期激活成功教程

    MyBase7定期激活成功教程首先 保证 myBase7 是关闭状态 然后执行以下步骤 1 找到 myBase7 的安装目录 右击 mybase 的启动图标 打开文件所在位置 2 用编辑软件打开文件 myBase ini 3 找到 App UserLic FirstUseOn 将这一行删除掉 不放心的话可以用英文分号 注释掉 效果都一样 4 再打开 myBase 的时候 就没有使用到期提醒了 注 App UserLic FirstUseOn 这一行是记录程序的首次使用时间的 就算这次删除了 下次打开软件之后还是会自动生成这一行信息 只不

    2026年3月17日
    2
  • 协议和协定有什么区别_协议和合同是一回事吗

    协议和协定有什么区别_协议和合同是一回事吗1、https协议需要到CA(CertificateAuthority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(原来网易官网是http,而网易邮箱是https。)2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http.

    2022年10月11日
    6
  • pushd popd命令「建议收藏」

    pushd popd命令「建议收藏」在本系列的第一部分中,我们通过讨论 cd- 命令的用法,重点介绍了Linux中的命令行导航。还讨论了一些其他相关要点/概念。现在进一步讨论,在本文中,我们将讨论如何使用 pushd 和 popd 命令在Linux命令行上获得更快的导航体验。在我们开始之前,值得说明的一点是,此后提到的所有指导和命令已经在Ubuntu14.04和Bashshell(4.3.11)上

    2022年6月28日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号