一 性能优化:让Redis跑得更快、更稳
内存淘汰策略:Redis内存满了怎么删数据?推荐用volatile-lru(优先删最近最少用、且设了过期时间的key),避免内存溢出。
系统内核优化:
vm.swappiness=1:让系统尽量用物理内存,少用硬盘swap(swap慢,会拖垮Redis)。
vm.overcommit_memory=1:允许Redis在内存不足时也能创建进程(比如备份数据时的fork操作)。
监控慢查询:开启Redis慢查询日志,找出执行慢的命令(比如大key操作),及时优化。
总之
缓存的核心是“用空间换时间”,但用不好会适得其反。记住:避免缓存穿透、击穿、雪崩,管好key和value,合理配置连接池,提前做好监控和预案,就能让缓存成为系统的“加速器”而不是“绊脚石”。
二 Redis高级功能
1)、Redis产品有哪些?
Redis官网提供多个产品和版本,核心分为:
Redis Cloud:Redis的云服务,可申请免费实例体验Redis Stack功能(空间有限,付费版5美元/月起)。
Redis Insight:官方图形化客户端,解决客户端混乱问题。
版本划分:
Redis OSS:传统Redis版本(基础功能)。
Redis Stack:在Redis OSS基础上增加多个扩展模块(核心介绍对象)。
Redis Enterprise:企业版(功能更全,适合生产环境)。
2)、Redis Stack核心扩展功能体验
Redis Stack的扩展模块可通过Redis Cloud免费实例快速体验,主要包括以下实用功能:
1. Redis JSON:原生支持JSON数据
是什么:Redis的扩展模块,能直接存储、查询和修改JSON数据,底层用二进制格式存储,比字符串存JSON更高效。
有什么用:支持丰富的JSON操作,比如设置JSON数据(JSON.SET)、查询属性(JSON.GET user $.name)、修改数值(JSON.NUMINCRBY)、删除字段(JSON.DEL)等。
优势:
性能更高:二进制存储比文本格式读写更快、更省内存。
树状结构:可快速访问子元素,查询效率优于传统文本存储。
生态集成:支持Redis的TTL、事务、发布/订阅等功能。
2. Search And Query:复杂数据搜索
解决问题:传统Redis用keys *或SCAN指令搜索key时,要么阻塞线程,要么只能简单过滤,无法满足复杂条件(如多字段筛选)。
传统Scan搜索:通过游标迭代返回部分结果(SCAN cursor MATCH pattern),适合简单key过滤,但不支持复杂条件。
Search And Query模块:类似ElasticSearch,支持基于HASH或JSON数据建索引,实现多条件搜索。
示例:创建产品索引(FT.CREATE),搜索“name含HUAWEI且price在1000-5000”的商品(FT.SEARCH),无需迁移数据到其他数据库。
3. Bloom Filter:海量数据快速判重
是什么:一种算法,用二进制数组和多个哈希函数快速判断“元素是否在集合中”,适合海量数据场景(如用户签到去重、缓存穿透过滤)。
特点:
优点:极省空间、查询快(O(1))。
缺点:有“误判率”(可能把不存在的元素判为存在),且无法删除元素。
Redis使用:通过BF.RESERVE创建过滤器,BF.ADD添加元素,BF.EXISTS判断是否存在(返回1表示可能存在,0表示一定不存在)。
4. Cuckoo Filter:支持删除的布隆过滤器改进版
是什么:布隆过滤器的升级版,解决了“无法删除元素”的问题,空间利用率更高,但算法更复杂。
特点:
用“桶(Bucket)”存储数据指纹(压缩后的数据),支持CF.DEL删除元素。
误判率受桶大小(默认2)和指纹影响,桶越大空间利用率越高,但误判率也越高。
3)、Redis Stack补充:手动安装与调用
手动安装扩展模块:下载扩展模块(如redisbloom.so),在Redis配置文件中用loadmodule加载,重启Redis即可使用(需注意文件权限)。
Java客户端调用:由于扩展模块较新,Java客户端需通过Lua脚本调用(如布隆过滤器的BF.RESERVE、BF.ADD指令),需处理服务端未安装模块的异常。
总结
Redis Stack通过多个扩展模块(JSON、Search And Query、Bloom Filter、Cuckoo Filter等),让Redis从“简单缓存”升级为支持复杂数据存储、搜索和高效判重的工具,适合需要处理JSON数据、复杂搜索或海量数据去重的场景。可通过Redis Cloud免费实例快速体验,也可手动安装模块集成到自有Redis服务中。