1.laravel8 redis和mysql保持数据一致性 还有很多方法,自行测试
数据一致”一般指的是:缓存中有数据,缓存的数据值=数据库中的值。但根据缓存中是有数据为依据,则“一致”可以包含两种情况:
缓存中有数据,缓存的数据值=数据库中的值
缓存中本没有数据,数据库中的值=最新值(有请求查询数据库时,会将数据写入缓存,则变为上面的“一致”状态)
“数据不一致”:缓存的数据值≠数据库中的值;缓存或者数据库中存在旧值,导致其他线程读到旧数据。
(1)先删除缓存,再更新数据库
2.先更新数据库,再删除缓存
public function create(){
$row=['shop_name'=>'气泡水','shop_img'=>'https://img0.baidu.com/it/u=1999090656,2498013167&fm=26&fmt=auto','shop_price'=>'888'];//模拟一条表单添加数据WechatShop::create($row); //先走库if (!Redis::get('key')){
//没有的话定义空数组$res=[];}else{
$result=Redis::get('key');$res=json_decode($result,true);}array_push($res,$row); //追加到定义的数组里$res=json_encode($res);Redis::set('key',$res); //存redis里//最后返回视图 跳转地址 提示信息 根据业务场景自行模拟print_r(Redis::get('key'));}
2.redis查询展示 加快数据读取,提高读取访问效率 也可以使用string类型,正好和上面的添加数据保持一致性对应上,这里用的是hash,原理都是转换为字符串在进行存取,但hash可以存数组类型,也可以存字符串类型
public function getData(){
//先判断有没有
// Redis::hdel('shop','shop_name');
// die;$res=Redis::hExists('shop','shop_name');if ($res){
//没有的话查库$ret=Redis::hGet('shop','shop_name');$data=json_decode($ret);}else{
//有的话取缓存$data=WechatShop::all()->toArray();$row=json_encode($data);Redis::hset('shop','shop_name',$row);}return $this->getJsonData(200,'成功',$data);}
参考连接:https://www.php.cn/php-weizijiaocheng-396389.html