第九章 分布缓存实战-Set集合数据结构最佳案例实战
简介:案例实战需求之大数据下的用户画像标签去重
-
介绍
- 用户画像 英文为User Profile,是根据用户基本属性、社会属性、行为属性、心理属性等真实信息而抽象出的一个标签化的、虚拟的用户模型。“用户画像”的实质是对 “人”的数字化。
- 应用场景有很多,比如个性化推荐、精准营销、金融风控、精细化运营等等, 举个例子来理解用户画像的实际应用价值,我们经常用手机网购,淘宝里面的千人千面
- 通过“标签 tag”来对用户的多维度特征进行提炼和标识,那每个人的用户画像就需要存储,set集合就适合去重
- 用户画像不止针对某个人,也可以某一人群或行业的画像
- 利用redis可以很好的去重
-
案例
BoundSetOperations operations = redisTemplate.boundSetOps("user:tags:1");
operations.add("car","student","rich","guangdong","dog","rich");
Set<String> set1 = operations.members();
System.out.println(set1);
operations.remove("dog");
Set<String> set2 = operations.members();
System.out.println(set2);
return JsonData.buildSuccess();
简介:案例实战社交应用里面之关注、粉丝、共同好友案例
-
背景
- 社交应用里面的知识,关注、粉丝、共同好友案例
-
案例实战
- 代码
public void testSet(){
BoundSetOperations operationLW = redisTemplate.boundSetOps("user:lw");
operationLW.add("A","B","C","D","E");
System.out.println("老王的粉丝:"+operationLW.members());
BoundSetOperations operationXD = redisTemplate.boundSetOps("user:xd");
operationXD.add("A","B","F","G","H","J");
System.out.println("小D的粉丝:"+operationXD.members());
//差集
Set lwSet = operationLW.diff("user:xd");
System.out.println("老王的优势:"+lwSet);
//差集
Set xdSet = operationXD.diff("user:lw");
System.out.println("小滴的优势:"+xdSet);
//交集
Set interSet = operationLW.intersect("user:xd");
System.out.println("共同好友:"+interSet);
//并集
Set unionSet = operationLW.union("user:xd");
System.out.println("两个人的并集:"+unionSet);
//用户A是否是 老王 的粉丝
boolean flag = operationLW.isMember("A");
System.out.println(flag);
}
第3集 案例实战之SortedSet开发用户积分实时榜单最佳实践
简介:案例实战之SortedSet用户积分实时榜单最佳实践
-
背景
- 用户玩游戏-积分实时榜单
- IT视频热销实时榜单
- 电商商品热销实时榜单
- 一般的排行榜读多写少,可以对 master 进行写入操作,然后多个 slave 进行读取操作。
- 如果是对象记得重写HashCode与Equals方法
-
对象准备
public class UserPointVO {
public UserPointVO(String username, String phone) {
this.username = username;
this.phone = phone;
}
private String username;
private String phone;
}
@Test
void testData() {
UserPoint p1 = new UserPoint("老王","13113");
UserPoint p2 = new UserPoint("老A","324");
UserPoint p3 = new UserPoint("老B","242");
UserPoint p4 = new UserPoint("老C","542345");
UserPoint p5 = new UserPoint("老D","235");
UserPoint p6 = new UserPoint("老E","1245");
UserPoint p7 = new UserPoint("老F","2356432");
UserPoint p8 = new UserPoint("老G","532332");
BoundZSetOperations<String, UserPoint> operations = redisTemplate.boundZSetOps("point:rank:real");
operations.add(p1,888);
...
}
-
接口开发
- 返回榜单-从大到小排序
- 查看这个人的排名,从大到小,0就是第一
- 给某个用户加积分
- 查看某个用户的积分
第4集 案例实战之SortedSet开发用户积分实时榜单多接口实战
简介:案例实战之SortedSet用户积分实时榜单多接口实战
-
多接口实战
-
接口开发
- 返回榜单-从大到小排序
- 查看这个人的排名,从大到小,0就是第一
- 给某个用户加积分
- 查看某个用户的积分
-