-
<p>Redis7.2优化内存淘汰池,将evictionPoolEntry.key由sds改为非持有型char*指针,避免memcpy和重复内存分配,显著降低高采样数下的CPU开销,不改变淘汰逻辑。</p>165 收藏 -
不能直接用@Primary切换Redis数据源,因其仅指定启动时默认Bean,无法运行时动态路由;需用ThreadLocal持有当前线程的ConnectionFactory,并配合AOP在方法级按需绑定与清理。164 收藏 -
如何在MySQL中创建数据库并设置不同的字符集编码?使用CREATEDATABASE命令并指定CHARACTERSET和COLLATE选项即可。1)创建命令示例:CREATEDATABASEmydbCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci。2)选择utf8mb4支持扩展字符。3)对于日文数据,可用utf8和utf8_bin排序规则:CREATEDATABASEjpdbCHARACTERSETutf8COLLATEutf8_bin。159 收藏 -
分片后每个Redis节点必须独立配置持久化,RDB需统一save规则且隔离磁盘路径,AOF应全节点开启并设appendfsynceverysec,避免部分节点未持久化导致数据丢失。158 收藏 -
缓存空值、布隆过滤器和业务层校验是防御缓存穿透的三层策略:空值需设短过期并避免null值;布隆过滤器须预估容量、全局单例且配合写库更新;业务层应优先校验参数合法性。158 收藏 -
Redis集群连接失败需先确认服务端启用cluster-enabledyes且至少3个主节点;客户端必须用redis-cli-c或集群驱动,否则报MOVED错误;KEYS*等跨slot命令不支持,SCAN需遍历各节点执行。155 收藏 -
redis.call()比redis.pcall()更易触发OOM,因其失败即终止,而pcall()返回的错误表常驻Lua栈且累积不释放,RedisLua引擎仅在脚本退出时批量GC。153 收藏 -
GEORADIUS返回空结果最常见原因是经纬度顺序写反,必须经度在前、纬度在后;而高德/百度等地图API默认是纬度在前、经度在后,导致坐标存入错误位置。152 收藏 -
RedisPub/Sub无法缓冲积压消息,因其纯内存广播机制不重试、不排队,消息直接丢弃;应改用List+BRPOP实现带缓冲队列,并由业务明确管理消息生命周期。152 收藏 -
是的。shutdown默认执行同步RDB保存,前提是redis.conf中存在未注释的有效save规则(如save6010000),且磁盘空间充足、无阻塞命令;它会先落盘再断连最后退出。139 收藏 -
Redis主从同步中大Key会导致复制中断或延迟飙升,因其单次序列化传输阻塞复制流、触发超时断连及缓冲区溢出;需用渐进式扫描分批拆分并双写保障一致性。137 收藏 -
appendfsynceverysec仍可能阻塞主线程,是因为当后台fsync未完成而缓冲区有新数据时,主线程会同步等待;根本原因是磁盘慢导致单次fsync超1秒,触发安全兜底机制。135 收藏 -
不能直接用HGET+EXPIRE组合刷新TTL,因存在竞态条件:HGET后key可能立即过期导致EXPIRE失败,且并发时多个客户端执行EXPIRE仅首个成功;Lua脚本能原子执行“查+刷”,用HEXISTS和EXPIREAT确保安全续命。130 收藏 -
Redis的WATCH+Lua无法实现可靠乐观锁,因WATCH不监控Lua脚本执行,脚本内读-改-写仍存在竞态;真正可靠的是将“读-校验-写”全部封装进单个原子Lua脚本中完成。124 收藏 -
布隆过滤器是解决缓存穿透最可控的手段,需部署在Redis之前拦截非法key;它不支持删除、存在误判率,须按真实数据量预估容量,并配合参数校验与限流使用。122 收藏