在电商系统中,Redis可以作为缓存层来加速商品详情页的加载。使用PHP的Predis扩展连接Redis:$redis = new Predis\Client(); $redis->setex('product:123', 3600, json_encode($product_data)); $cached = $redis->get('product:123'); if($cached) { return json_decode($cached, true); } 这段代码直接缓存热门商品信息,减少数据库查询,提高响应速度20倍以上。
用户Session管理优化
传统Session存储在文件或数据库中,访问电商高峰期容易瓶颈。切换到Redis:php.ini设置session.save_handler = redis,session.save_path = "tcp://127.0.0.1:6379"。这样每个用户登录后,Session数据如购物车ID、用户信息直接存Redis,读写速度提升到毫秒级,支持分布式部署,完美应对双11流量。
购物车实时更新
电商购物车需要支持多设备同步,利用Redis Hash结构:$redis->hset('cart:user123', 'product456', 2); $redis->hincrby('cart:user123', 'product456', 1); 获取时$cart = $redis->hgetall('cart:user123');。设置过期时间$redis->expire('cart:user123', 86400),自动清理闲置购物车,节省内存的同时保证数据一致性。
热点商品排行榜
使用Redis Sorted Set实现实时排行:$redis->zincrby('hot_products', 1, 'product789'); $top10 = $redis->zrevrange('hot_products', 0, 9, true);。PHP代码中每笔订单后更新分数,首页直接从Redis拉取Top10,避免SQL复杂排序,性能提升显著,实时性强。
库存扣减与秒杀优化
秒杀场景下,Redis Lua脚本原子扣库存:local stock = redis.call('get', KEYS[1]) if tonumber(stock) > 0 then redis.call('decr', KEYS[1]) return 1 else return 0 end,PHP调用$redis->eval($lua_script, ['stock:product123'], 1);。防止超卖,确保高并发安全,结合消息队列异步更新数据库。
地理位置推荐
电商推荐附近门店,用Redis Geo:$redis->geoadd('stores', 116.397, 39.916, 'BeijingStore1'); $nearby = $redis->georadius('stores', 116.4, 39.9, 10, 'km');。用户定位后快速获取周边店铺,提升转化率,PHP集成简单高效。
订单计数器
平台总订单数用Redis String原子递增:$redis->incr('total_orders'); 日订单$redis->incr('orders:'.date('Ymd'));。PHP中下单成功即调用,精确统计无锁竞争,支持亿级计数。
FAQ
Q: Redis和MySQL怎么结合使用?
A: Redis做读缓存和临时数据,MySQL持久化核心业务,双写策略:先Redis后MySQL,失效时回源数据库。
Q: 高并发下Redis内存不够怎么办?
A: 配置maxmemory-policy allkeys-lru,设置过期时间,数据分片用Cluster模式扩展。
Q: PHP连接Redis报错怎么解决?
A: 安装Predis或phpredis扩展,检查防火墙端口6379,确认Redis服务运行。
Q: 购物车数据丢失风险?
A: 定期持久化到MySQL,或用AOF/RDB备份,关键数据双存。