📄🦌🙌🐟🏖️
日志记录
Where there is a where there is a way
随机文章
按住 Shift 横向滚动
热门文章
按住 Shift 横向滚动
Redis键值设计与BigKey问题

Redis键值设计与BigKey问题

根据文章内容,摘要如下: Redis使用需遵循最佳实践:Key结构采用`[业务名]:[数据名]:[id]`格式,value不超过44字节,避免特殊字符,以提升可读性、防冲突、便管理并节省内存。BigKey指单个value超10KB或集合元素超1000的数据,会引发网络阻塞、数据倾斜、Redis阻塞及CPU飙升。可通过`redis-cli --bigkeys`、`scan`扫描、第三方工具或网络监控发现,Redis 4.0后建议用`unlink`异步删除。此外,应根据业务场景合理选择数据类型,以优化性能与内存。

Redis通过HyperLogLog实现UV统计

Redis通过HyperLogLog实现UV统计

Redis的HyperLogLog是一种概率型数据结构,用于高效统计大规模数据的唯一元素数量(基数估算)。它固定占用12KB内存,可处理亿级数据,标准误差约0.81%。底层通过哈希分桶(16384个桶)和调和平均数修正估算基数,支持PFADD、PFCOUNT、PFMERGE命令。UV(独立访客数)统计需去重,面临海量数据、实时性和存储成本挑战。示例中向HyperLogLog添加100万用户数据后统计基数,内存占用极小,验证了其高效性。

Redis通过BitMap实现用户签到

Redis通过BitMap实现用户签到

本文介绍了Redis BitMap在用户签到场景中的应用。传统数据库存储签到信息(如每天一条记录)会因海量数据(1亿条/年)导致压力巨大。BitMap利用bit位映射日期(每月一位图),0/1表示未签到/签到,通过Redis string实现(最大512M,约2^32 bit)。核心命令包括:`SetBit`(设置指定偏移位)、`GetBit`、`BitCount`(统计1的数量)、`BitField`(批量操作位字段)、`BitOp`(位运算)、`BitPos`(查找首个0/1)。签到功能:每月为每个用户生成key(如`sign:userId:2024/07`),当天通过`setBit key dayOfMonth-1 1`记录签到。连续签到统计:使用`BitField get u[dayOfMonth] 0`获取本月截至今日的十进制数,然后从后向前逐位与1做AND运算并右移,计数连续为1的位数,直至遇到0结束。该方法高效节省存储空间,适合大规模签到场景。

Redis的GEO实现查看附件商户

Redis的GEO实现查看附件商户

本文介绍了Redis GEO数据结构及其在商户搜索中的应用。GEO(地理坐标)从Redis 3.2版本开始支持,核心命令包括:GEOADD(添加坐标)、GEODIST(计算距离)、GEOHASH(转换哈希)、GEOPOS(获取坐标)、GEORADIUS(已废弃)和GEOSEARCH(6.2新增,支持圆形/矩形范围搜索)。在附件商户搜索实践中,先将店铺按类型分组,用GEOADD批量导入经纬度数据;查询时,根据客户端坐标、类型和半径,使用GEOSEARCH按距离排序、分页返回附近商户的ID和距离,再从数据库查询完整信息。该方法有效实现了基于地理位置的附近商户搜索功能。

Redis实现共同关注和关注推送

Redis实现共同关注和关注推送

该文章介绍了关注系统的三部分功能: 1. **关注与取关**:基于`tb_follow`表实现两个接口——关注/取关(通过`isFollow`布尔值控制新增或删除记录)和判断是否关注(查询记录数)。 2. **共同关注**:改造关注/取关接口,将用户ID同步到Redis的Set中;求当前用户与目标用户关注列表的交集,实现共同关注查询。 3. **关注推送(Feed流)**:对比Timeline(时间排序)和智能排序模式,详解Timeline的三种实现方案(拉、推、推拉混合),并基于Redis的SortedSet实现推模式:博主发布笔记时推送到粉丝收件箱,使用`ZRevRangeByScore`实现滚动分页(根据时间戳和偏移量),保证消息不重复、不遗漏。

Redis实现点赞排行表

Redis实现点赞排行表

本文介绍了点赞与排行榜功能的实现。点赞功能要求同一用户只能点赞一次,再次点击取消,前端通过isLike字段高亮。实现步骤:在Blog类添加isLike字段;利用Redis的set集合存储点赞用户ID,未点赞时数据库点赞数+1并将用户加入set,已点赞则减1并移除。同时修改查询业务,判断当前用户是否点赞并赋值isLike。排行榜功能将set改为sorted set,以时间戳为分数存储点赞用户,实现按时间排序。查询点赞列表时,使用ZSet的range方法获取top5用户ID,再根据ID查询用户信息,并通过ORDER BY FIELD保持原顺序。

Redis实现优惠卷秒杀(消息队列,分布式锁,全局id生成器,lua脚本)

Redis实现优惠卷秒杀(消息队列,分布式锁,全局id生成器,lua脚本)

本文围绕分布式系统下的秒杀场景,介绍了全局唯一ID的生成策略(UUID、Redis自增、雪花算法等)及Redis实现的ID生成器;详细阐述了优惠券秒杀下单的完整流程,包括表结构设计、库存判断与订单创建。针对高并发下的超卖问题,采用乐观锁(stock>0条件)解决。为实现“一人一单”,引入分布式锁,对比了基于Redis的简单锁与Redisson可重入锁,并解决锁误删、原子性及主从一致性问题。最后通过Redis+Lua脚本+Stream消息队列实现异步秒杀,将库存扣减与订单创建分离,大幅提升性能,确保数据一致性与高可用。

Redis商户查询缓存(缓存三大问题以及解决方法)

Redis商户查询缓存(缓存三大问题以及解决方法)

本文系统介绍了缓存的核心概念与常见问题。缓存是临时存储数据的高性能缓冲区,可降低后端负载、提升读写效率,但会带来数据一致性、代码维护和运维成本。添加Redis缓存时,通常先查缓存,若命中则直接返回;未命中则查数据库并写入缓存。缓存更新策略建议:先更新数据库,再删除缓存,并设置过期时间。针对缓存穿透(缓存和数据库均无数据),可通过缓存空对象、布隆过滤或加强参数校验来防御。缓存雪崩(大量key同时失效或Redis宕机)可通过TTL随机值、Redis集群、限流和多级缓存缓解。缓存击穿(热点key失效导致高并发请求击穿数据库)可用互斥锁保证只重建一次,或用逻辑过期方案(数据过期后异步更新)以提高性能。

Redis实现短信登录(Session共享)

Redis实现短信登录(Session共享)

本文介绍了基于Session和Redis的登录功能实现。首先,通过Session存储验证码和用户信息,实现短信验证码发送、验证码登录及登录拦截器(保存用户到ThreadLocal)。但Session在集群环境下存在共享问题。为解决此问题,改用Redis:将验证码存入Redis并设置2分钟过期,登录后生成随机token,将用户信息以Hash形式存入Redis并设置30分钟有效期,拦截器从请求头获取token并校验,同时刷新有效期。Redis方案实现了分布式环境下的登录状态共享,提升了系统的可扩展性。

Redis的Java客户端

Redis的Java客户端

本文介绍了Redis的Java客户端,包括Jedis和SpringDataRedis。Jedis部分涵盖快速入门(引入依赖、建立连接、操作String、释放资源)及连接池的使用,以提升性能和安全性。SpringDataRedis是Spring整合Redis的模块,提供RedisTemplate统一API,支持Lettuce和Jedis,并支持多种序列化方式。文章详述了SpringDataRedis的快速入门步骤(依赖、配置、注入、测试),以及自定义序列化(设置Key为StringRedisSerializer,Value为GenericJackson2JsonRedisSerializer)和手动序列化(使用StringRedisTemplate配合ObjectMapper)。最后展示了操作Hash类型的方法,如put、putAll、get、keys、values、entries。

© 2026 日志记录