Redis常见问题汇总

部署方式

3主3从
原因:

  • 集群中超过半数的主节点投票认为某个主节点挂了,那么这个节点就挂了,2个节点无法构成集群。
  • 要保证集群的高可用,需要每个节点都有从节点,如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么该节点负责的哈希槽slot不可用,这个集群就挂了

Redis 数据类型及应用场景

设计 Redis Key-分段设计法

使用冒号把 key 中要表达的多种含义分开表示,步骤如下:

  • 把表名转化为 key 前缀
  • 主键名(或其他常用于搜索的字段)
  • 主键值
  • 要存储的字段

eg. 用户表(user)

id name email
1 zj 156577812@qq.com
2 ai 156577813@qq.com

这个简单的表可能经常会有这个的需求:根据用户 id 查询用户邮箱地址,可以选择把邮箱地址这个数据存到 redis 中:

set user : id:1:email 156577812@qq.com;
set user : id:2:email 156577812@qq.com;

应用场景

先初始化jedis集群,得到jedisCluster

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
JedisCluster jedisCluster = (JedisCluster) context.getBean("jedisCluster");

字符串对象

一般可以存放数据表某个字段的值,或某个实体对象序列化后的JsonString

String strKey="tbproduct:inter_prd_code:001_JXTJ1801:prd_name";
String strValue="吉祥添金1801";
jedisCluster.del(strKey);
jedisCluster.set(strKey,strValue);
System.out.println(jedisCluster.get(strKey));
System.out.println();

哈希对象

比起用字符串对象存储 json 格式的字符串,哈希对象由于没有序列化操作,优势更明显。

String hashKey="tbproduct:inter_prd_code:001_JXTJ1801";
HashMap<String, String> hashValue=new HashMap<String, String>();
hashValue.put("prd_code","JXTJ1801");
hashValue.put("prd_name","吉祥添金1801");
hashValue.put("guest_rate","4.4%");
jedisCluster.del(hashKey);
jedisCluster.hmset(hashKey, hashValue);
System.out.println(jedisCluster.hmget(hashKey, "prd_code","prd_name","guest_rate"));
System.out.println();

集合对象

多个 set 之间可以求交集、并集、补集,比如“共同好友列表”
获取多个理财产品共同持仓资产:

String setKey="tbunitstock:combi_no:001_jxtj1801:inter_code";
String setKey2="tbunitstock:combi_no:001_jxtj1802:inter_code";
String setKey3="tbunitstock:combi_no:001_jxtj1803:inter_code";
jedisCluster.del(setKey);
jedisCluster.del(setKey2);
jedisCluster.del(setKey3);
jedisCluster.sadd(setKey, "180205.IB_YH","180210.IB_YH");
jedisCluster.sadd(setKey2, "180205.IB_YH","170210.IB_YH");
jedisCluster.sadd(setKey3, "180205.IB_YH","170205.IB_YH");
System.out.println(jedisCluster.smembers(setKey));
System.out.println();

有序集合对象

在集合类型的场景上加入排序就是有序集合的应用场景了。比如根据好友的“亲密度”排序显示好友列表。
获取产品所投资资产按资产价值倒序排列的集合:

String zsetKey="tbhisprdassetdetail:combi_no:001_jxtj1801:inter_code:asset_value";
Map<String, Double> scoreMembers=new HashMap<String, Double>();
scoreMembers.put("180205.IB_YH", 1001.00);
scoreMembers.put("180210.IB_YH", 1002.00);
jedisCluster.del(zsetKey);
jedisCluster.zadd(zsetKey, scoreMembers);
System.out.println(jedisCluster.zrevrange(zsetKey, 0, -1));
System.out.println();
限流

还可以用来做限流:

public class SimpleRateLimiter {
   
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值