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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章