原创 程序猿羊 程序猿小杨 2023-09-07 07:54 发表于湖北
收录于合集#Redis16个
程序猿小杨
分享Java相关技术、数据库、Python、职场、感悟、视频资源等干货和学习心得。 如:kettle、ES、redis\mongoDB、springboot、Zookeeper、高并发多线程、中间件、JVM、程序员攻略等。
73篇原创内容
公众号
近期热推文章:
1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表;
2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据;
4、基于Redis实现关注、取关、共同关注及消息推送(含源码)
5、SpringBoot整合多数据源,并支持动态新增与切换(详细教程)
一、优雅的Key设计
二、BigKey问题--value
2.1、什么是BIgKey?
BigKey通常以Key的大小和Key中成员的数量来综合判定,例如:
Key本身的数据量过大:一个String类型的Key,它的值为5MB。
Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。
Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100MB。
推荐值:
1、单个key的value小于10kb;2、对于集合类型的key,建议元素数量小于1000。
2.2、BigKey的危害?
2.3、如何发现BigKey?
2.4、如何删除BigKey?
三、恰当的数据类型
3.1、存储对象的三种方式
3.2、对于Hash类型的大key,如何优化?
方案1:调整hash-max-ziplist-entries的上限
命令如下:
redis(6.2):0>config get hash-max-ziplist-entries
1) "hash-max-ziplist-entries"
2) "512" --默认原来是512
redis(6.2):0>config set hash-max-ziplist-entries 1000
"OK"
redis(6.2):0>config get hash-max-ziplist-entries
1) "hash-max-ziplist-entries"
2) "1000" --调整为1000,但是不建议调整超过1000
方案2:拆分为String类型
方案3:拆分为小hash
操作案例:
/**
* 功能描述:测试bigHash的
* @MethodName: testBigHash
* @MethodParam: []
* @Return: void
* @Author: yyalin
* @CreateDate: 2023/8/24 9:44
*/
public void testBigHash(){
Map<String,String> map = new HashMap<>();
for(int i=0;i<100000;i++){
map.put("key_"+i,"value_"+i);
}
redisUtil.hPutAll("test:big:hash",map);
}
/**
* 功能描述:测试字符串bigKey
* @MethodName: testBigString
* @MethodParam: []
* @Return: void
* @Author: yyalin
* @CreateDate: 2023/8/24 9:59
*/
public void testBigString(){
for(int i=0;i<100000;i++){
redisUtil.set("test:str:key_"+i,"value_"+i);
}
}
/**
* 功能描述:测试smallHash
* @MethodName: testSmallHash
* @MethodParam: []
* @Return: void
* @Author: yyalin
* @CreateDate: 2023/8/24 10:05
*/
public void testSmallHash(){
int hashSize=100;
Map<String,String> map = new HashMap<>(hashSize);
for(int i=1;i<= 100000;i++){
int key=(i-1)/hashSize;
int value=i%hashSize;
map.put("key_"+value,"value_"+value);
if(value==0){
redisUtil.hPutAll("test:small:hash_"+key,map);
}
}
}
测试结果:
四、总结
如果大家对相关文章感兴趣,可以关注微信公众号"程序猿小杨",会持续更新优秀文