RAG项目Redis应用

用户所属组织标签缓存

  • 用户所属的标签是高频访问字段,所以在Redis中进行缓存
  • 使用List结构存储而不使用set,List底层是压缩列表+双向链表,内存紧凑读写快,set天然去重是要依赖哈希表的,计算哈希值解决哈希冲突效率不如List,而且Set存储是乱序的,List存储是按照存储的顺序的,是有一定的顺序的
  //标签分为所属组织标签和个人私有标签,其中组织所属标签是一对多的关系,也就是一个用户可以归属多个组织
  //所以数据结构采用List更加合适,因为有多个所以使用方法是rightPushAll(),orgTags是一个List.of,在这个转换成数组全部加入
  //rightPushAll有个问题是每次添加数据都是在追加,所以容易造成重复数据,所以在分配所属组织标签的时候要先删除key在添加数据
  redisTemplate.opsForList().rightPushAll(key, orgTags.toArray());

  //取值操作range从0到-1默认是取出从0索引到结尾的所有元素,Redis存储的是二进制数据,所以默认封装成Object对象,再通过map进行转换
  try {
            String key = USER_ORG_TAGS_KEY_PREFIX + username;
            List<Object> result = redisTemplate.opsForList().range(key, 0, -1);
            if (result != null && !result.isEmpty()) {
                return result.stream()
                        .map(obj -> (String) obj)
                        .toList();
            }
        } catch (Exception e) {
            logger.error("Failed to get organization tags for user: {}", username, e);
        }
        return null;
posted @ 2026-01-23 17:19  Huangyien  阅读(2)  评论(0)    收藏  举报