传统的购物车实现有很多种方式,如session,cookie,数据库等,这几种方式实现各有优缺点,网上的文章太多了,这里就不一一阐述。 今天给大家分享的是Redis实现购物车功能,众所周知Redis相当于一个内存数据库,可以用来做缓存,存储数据等。写到这里学计算机都知道,内存(RAM)当出现断电数据就会丢失。这可能是Redis做购物车的最大缺点吧,不过这里可以通过配置RDB/AOF使Redis实现持久化,关于他们两个的区别,可以参照这篇文章
配置AOF使数据持久化
修改redis配置文件redis.conf
cd /usr/local/redis
vim redis.conf
将appendonly no
改成appendonly yes
确认 appendfsync everysec(每秒同步数据)
这里我们只简单修改了两项配置,更多配置参照这篇文章
接下来验证数据持久化是否配置成功
1.重启redis服务器
pkill -9 redis
cd /usr/local/redis/bin
./redis-server ../redis.conf
在bin目录下查看是否生成appendonly.aof
文件
2.连接一个redis客户端
cd /usr/local/redis/bin
./redis-cli
写入几条数据并清除
3.redis服务器查看 appendonly.aof
生成如下内容
这个文件是用于数据恢复的 我们将最后一行代码 flushall删掉接下来重启redis看看数据能否恢复
pkill -9 redis
cd /usr/lcoal/redis/bin
./redis-server ../redis.conf
连接一个客户端尝试获取先前设置的值
可见数据恢复成功
实现购物车功能
代码语言:javascript复制//购物车添加
public function store(Request $request){
$hashKey = "user_".Auth::id();
$key = "goodd_".$request->gid;
$goods = ["gid"=>$key,"gtitle"=>$request->gtitle,"gprice"=>$request->gprice,"gcover"=>$request->gcover,"gnum"=>$request->gnum];
$res = Redis::hSet($hashKey,$key,json_encode($goods));
}
这里我用到是redis hash数据类型 将 user 登录用户id作为hashkey,goodd 商品id作为key,key对应的值则是关于商品的一些信息
代码语言:javascript复制//购物车读取
public function index(){
return response()->json(["cars"=>json_encode(Redis::hGetAll('user_'.Auth::id()))]);
}
购物车读取功能比较简单,直接查询该用户的id对应的hashkey即可得到商品信息
购物车删除 购物车修改 待添加