image.png

文旅号 (相当于公众号):
用户关注文旅号,存set里,文旅号为key,用户ID为值(为了方便文旅号发布消息时用key就能查到所有关注该文旅号的用户),用户登录进去的列表是所有文旅号都显示,会显示是否已关注,用文旅号ID和用户ID到set里执行是否存在的命令就能标识是否关注,文旅号会在后台创建消息并且发布,发布时往关注该文旅号的用户都增加一条消息,往redis的hash里存用户id为key:消息Id为域,消息是否已读为域的值, 每个用户都执行一条增加hash执行命令(redis速度很快,是微秒级别的,除非关注该文旅号的是千万级别的,如果怕性能有影响,可以先发给在线用户,非在线用户等空闲在发),

hash存消息发布标识是否已读
2.当文旅号从后台发布消息时,到set里取数据
//取关注该文旅号的用户ID
Set source_id = jedisCluster.smembers(“文旅号_id”);
for(String s:source_id){
System.out.println(s);
}

3.取出的用户ID 和消息ID 和 是否已读 存到hash
hset user_id msg_id 0/1。(具体的消息是存在数据库中)
格式:hset key field value
将哈希表 key 中的域 field 的值设为 value 。
如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。
如果域 field 已经存在于哈希表中,旧值将被覆盖。
消息已读重新hset就好,因为会被覆盖

在前台直接读该hash里以用户ID为key取出该用户所有的域和值。

用set进行点赞,收藏,用户关注文旅号

//点赞key为资源ID,值为用户ID,一个资源ID对应多个用户ID的点赞或收藏
jedisCluster.sadd(“source_id”,”user_1”);
//查询该资源有多少个用户点赞

  1. Set<String> source_id = jedisCluster.smembers("source_id");
  2. for(String s:source_id){
  3. System.out.println(s);
  4. }
  5. int size = source_id.size(); //该资源 点赞总数

//查询该用户有没有点赞或收藏
//如果 user_2 元素是集合的成员,返回 true,否则返回false. 在页面上就能知道该用户有没有对该资源点过赞 Boolean

  1. user_2 = jedisCluster.sismember("source_id","user_2");

//取消点赞
jedisCluster.srem(“source_id”,”user_1”);

//用户关注文旅号:
以文旅号ID为key, value是用户ID

  1. jedisCluster.sadd("文旅号_id","user_1");


//查询该用户有没有关注该文旅号:
//存在返回true,否则返回False
Boolean user_2 = jedisCluster.sismember(“文旅号_id”,”user_2”);

//取消关注:
jedisCluster.srem(“source_id”,”user_1”);

//对资源进行浏览量加1,用Spring类型的incr,值不存在也没关系。
格式:incr key
将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作
jedisCluster.incr(“source_id”);