Redis实时缓存的一点小总结

笔者最近在写一个关于博客系统的毕业设计,其中用到了Reis实时缓存,对于一个博客首页信息来说,需要分页展示一些博客信息,而这些信息的变化性不是很大,所以采用Reis实时缓存可以有效缓解数据库访问压力;

对于笔者的博客系统中的Reis实时缓存来说,笔者考虑的最佳Redis数据类型是字符串和链表。

首先来分析下二者的优劣:

字符串类型:可以将分页数据按照“页数-数据(list集合)”的形式保存,这样做的优点在于操作简单,而缺点也很明显,如果某篇博客发生改动,则需要将该页数据全部取出,修改后再存入,而对于删除的数据补齐则更加麻烦,假设页数为10页,每页10条数据,那么第一页的第一篇博客删除的话需要补齐9次数据(第二页的第一条数据补至第一页最后一条,第三页的。。。);

链表类型:可以将所有的数据以链表形式存入一个key,每次查询分页数据按照range方法设置下标范围来取值,这样做的优点在于修改数据很灵活,不需要访问大量数据,而缺点则在于访问中间位置的数据比较繁琐(leftPop和rigthPop方法只能首尾删除,而remove(count,value)方法则可以直接删除,count代表删除的值的个数,value代表值,这么设计的原因是值可以重复);

分析完二者优劣之后开始介绍二者的使用方式:

字符串类型:

    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("test1")
    public Object test1()
    {
        // 存值
        redisTemplate.opsForValue().set("key",new Object());
        // 取值
        Object obj=redisTemplate.opsForValue().get("key");
        System.out.print(obj);
        return redisTemplate.toString();
    }

链表类型:

    @GetMapping("test2")
    public Object test2()
    {
        // 将链表绑定到一个key,这样的话不需要每次指定key
        BoundListOperations listOps = redisTemplate.boundListOps("key_1");
        // 右边插入,相当于尾部插入
        listOps.rightPush("张三");
        listOps.rightPush("李四");
        listOps.rightPush("王五");
        // 左边插入,相当于头部插入
        listOps.leftPush("项羽");
        listOps.rightPush("李四");
        listOps.rightPush("李四");

        // 删除前2个‘李四’
        listOps.remove(2, "李四");

        // 根据下标范围取值,以取出全部数据为例
        List list = listOps.range(0, listOps.size() - 1);
//        不绑定的情况
//        ListOperations listOperations = redisTemplate.opsForList();
//        listOperations.rightPush("key_1", "张三");
//        listOperations.rightPush("key_1", "李四");
//        listOperations.rightPush("key_1", "王五");
//        listOperations.leftPush("key_1", "项羽u");
//        return "list长度=" + listOperations.size("key_1");
        return list;
    }

猜你喜欢

转载自blog.csdn.net/qq_38258310/article/details/83994889