Redis高级应用开发实战中,高性能缓存通过设置key-value对实现快速读写,比如用SET和GET命令存取用户session数据,避免数据库压力;数据结构如List用于消息队列,LPUSH和RPOP实现生产者消费者模式;Hash适合存储对象属性,HSET和HGET高效管理用户信息;Set用于唯一集合,如标签系统SADD和SINTER求交集;Sorted Set按分数排序排行榜ZADD和ZRANGE;开发时结合管道PIPELINE批量操作减少网络往返,Lua脚本原子执行复杂逻辑,确保高并发下数据一致性。先从简单缓存入手,逐步用GEO位置服务ZADD经纬度查询附近用户,实现实战高性能。
缓存穿透和雪崩解决方案
在实际项目中,缓存穿透是查询不存在数据导致直击数据库,用布隆过滤器预判或缓存空值null,设置短TTL如30秒过期;缓存雪崩是大量key同时失效,用随机过期时间分散,如base_ttl + random(0, 300)秒,避免瞬间雪崩;热点key用本地缓存如Caffeine二级缓存,双写一致性通过canal订阅binlog同步。开发实战中,监控命中率低于80%及时扩容Redis集群,用哨兵或cluster模式高可用,真实案例电商秒杀用Lua限流脚本防止缓存击穿,性能提升10倍以上。
Redis List队列实战开发
List是最简单的队列,用RPUSH添加任务到右端,LPOP从左端取出,实现任务队列如订单处理;阻塞队列用BRPOP阻塞等待,提高CPU利用率,避免空转;实战中开发消息队列系统,多个worker用BLPOP消费,支持公平队列;结合Sorted Set实现延时队列,ZADD分数为过期时间,定时扫描取出执行;真实项目日志收集用List暂存,每1万条批量持久化到文件,吞吐量达10万/s,简单可靠无单点故障。
Hash和Set在电商中的应用
Hash存储商品详情,字段如price、stock、desc,HGETALL快速全取或HMSET批量设置;Set管理用户收藏,SADD添加SREM删除,SCARD统计数量;交集SINTER找共同好友,SUNION求关注列表;实战开发用户画像系统,用BitSet位图记录行为如签到SETBIT key offset 1,BITCOUNT统计活跃度;一个电商项目用Hash存购物车,节省内存50%,Set去重浏览记录,查询速度毫秒级,用户体验大幅提升。
GEO和HyperLogLog位置与统计
GEO用ZADD添加经纬度geoadd china:city 116.481 39.921 beijing,GEORADIUS查询10km内门店;实战外卖app定位附近商家,GEOHASH编码位置;HyperLogLog统计UV,PFADD添加user_id,PFCOUNT估算独立访客,误差<1%内存只需12KB;游戏开发排行榜ZADD score user1 100,ZRANGE 0 -1 WITHSCORES取前10;真实案例打车app用GEO匹配司机,5km内排序距离,实时性强并发10万。
FAQ
Q: Redis缓存怎么设置过期时间避免内存满?
A: 用EXPIRE key seconds设置TTL,或SET key value EX 3600直接带过期,监控内存用INFO memory,超过80%用allkeys-lru策略自动淘汰。
Q: 分布式锁怎么用Redis实现?
A: SET lock_key value NX PX 30000原子获取,持有30秒,释放用Lua脚本DEL确保原子性,redlock多节点防脑裂。
Q: Redis集群怎么部署高可用?
A: 用3主3从架构,配置cluster-enabled yes,主从自动故障转移,客户端用cluster模式连接重定向,扩容加节点reshard。
Q: Lua脚本在Redis有什么优势?
A: 原子执行多命令如库存扣减IF stock>0 stock-1 RETURN 1,减少网络RTT,EVAL脚本内容 numkeys key1 key2 arg1,高并发场景必备。