国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis底層封裝細節(jié)

這篇具有很好參考價值的文章主要介紹了Redis底層封裝細節(jié)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

日常我們程序員在使用redis做緩存的時候,很少會直接使用到RedisTemplate直接操作k-v鍵值對,而是通過對RedisTemplate原生代碼的封裝,來構建我們?nèi)粘1阌谑褂昧晳T的代碼來操作數(shù)據(jù),這里我分享一下日?;镜膶edisTemplate底層的封裝原理和使用方法

package com.ljj.common.core.redis;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;

/**
 * spring redis 工具類
 *
 * @author ljj
 **/
@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
public class RedisCache
{
    @Autowired
    public RedisTemplate redisTemplate;

    /**
     * 緩存基本的對象,Integer、String、實體類等
     *
     * @param key 緩存的鍵值
     * @param value 緩存的值
     */
    public <T> void setCacheObject(final String key, final T value)
    {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 緩存基本的對象,Integer、String、實體類等
     *
     * @param key 緩存的鍵值
     * @param value 緩存的值
     * @param timeout 時間
     * @param timeUnit 時間顆粒度
     */
    public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
    {
        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
    }

    /**
     * 設置有效時間
     *
     * @param key Redis鍵
     * @param timeout 超時時間
     * @return true=設置成功;false=設置失敗
     */
    public boolean expire(final String key, final long timeout)
    {
        return expire(key, timeout, TimeUnit.SECONDS);
    }

    /**
     * 設置有效時間
     *
     * @param key Redis鍵
     * @param timeout 超時時間
     * @param unit 時間單位
     * @return true=設置成功;false=設置失敗
     */
    public boolean expire(final String key, final long timeout, final TimeUnit unit)
    {
        return redisTemplate.expire(key, timeout, unit);
    }

    /**
     * 獲取有效時間
     *
     * @param key Redis鍵
     * @return 有效時間
     */
    public long getExpire(final String key)
    {
        return redisTemplate.getExpire(key);
    }

    /**
     * 判斷 key是否存在
     *
     * @param key 鍵
     * @return true 存在 false不存在
     */
    public Boolean hasKey(String key)
    {
        return redisTemplate.hasKey(key);
    }

    /**
     * 獲得緩存的基本對象。
     *
     * @param key 緩存鍵值
     * @return 緩存鍵值對應的數(shù)據(jù)
     */
    public <T> T getCacheObject(final String key)
    {
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        return operation.get(key);
    }

    /**
     * 刪除單個對象
     *
     * @param key
     */
    public boolean deleteObject(final String key)
    {
        return redisTemplate.delete(key);
    }

    /**
     * 刪除集合對象
     *
     * @param collection 多個對象
     * @return
     */
    public boolean deleteObject(final Collection collection)
    {
        return redisTemplate.delete(collection) > 0;
    }

    /**
     * 緩存List數(shù)據(jù)
     *
     * @param key 緩存的鍵值
     * @param dataList 待緩存的List數(shù)據(jù)
     * @return 緩存的對象
     */
    public <T> long setCacheList(final String key, final List<T> dataList)
    {
        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
        return count == null ? 0 : count;
    }

    /**
     * 獲得緩存的list對象
     *
     * @param key 緩存的鍵值
     * @return 緩存鍵值對應的數(shù)據(jù)
     */
    public <T> List<T> getCacheList(final String key)
    {
        return redisTemplate.opsForList().range(key, 0, -1);
    }

    /**
     * 緩存Set
     *
     * @param key 緩存鍵值
     * @param dataSet 緩存的數(shù)據(jù)
     * @return 緩存數(shù)據(jù)的對象
     */
    public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
    {
        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
        Iterator<T> it = dataSet.iterator();
        while (it.hasNext())
        {
            setOperation.add(it.next());
        }
        return setOperation;
    }

    /**
     * 獲得緩存的set
     *
     * @param key
     * @return
     */
    public <T> Set<T> getCacheSet(final String key)
    {
        return redisTemplate.opsForSet().members(key);
    }

    /**
     * 緩存Map
     *
     * @param key
     * @param dataMap
     */
    public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
    {
        if (dataMap != null) {
            redisTemplate.opsForHash().putAll(key, dataMap);
        }
    }

    /**
     * 獲得緩存的Map
     *
     * @param key
     * @return
     */
    public <T> Map<String, T> getCacheMap(final String key)
    {
        return redisTemplate.opsForHash().entries(key);
    }

    /**
     * 往Hash中存入數(shù)據(jù)
     *
     * @param key Redis鍵
     * @param hKey Hash鍵
     * @param value 值
     */
    public <T> void setCacheMapValue(final String key, final String hKey, final T value)
    {
        redisTemplate.opsForHash().put(key, hKey, value);
    }

    /**
     * 獲取Hash中的數(shù)據(jù)
     *
     * @param key Redis鍵
     * @param hKey Hash鍵
     * @return Hash中的對象
     */
    public <T> T getCacheMapValue(final String key, final String hKey)
    {
        HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
        return opsForHash.get(key, hKey);
    }

    /**
     * 獲取多個Hash中的數(shù)據(jù)
     *
     * @param key Redis鍵
     * @param hKeys Hash鍵集合
     * @return Hash對象集合
     */
    public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
    {
        return redisTemplate.opsForHash().multiGet(key, hKeys);
    }

    /**
     * 刪除Hash中的某條數(shù)據(jù)
     *
     * @param key Redis鍵
     * @param hKey Hash鍵
     * @return 是否成功
     */
    public boolean deleteCacheMapValue(final String key, final String hKey)
    {
        return redisTemplate.opsForHash().delete(key, hKey) > 0;
    }

    /**
     * 獲得緩存的基本對象列表
     *
     * @param pattern 字符串前綴
     * @return 對象列表
     */
    public Collection<String> keys(final String pattern)
    {
        return redisTemplate.keys(pattern);
    }
}

以上是我日常使用過程中對redis封裝的代碼,屏蔽了底層的細節(jié)操作,可以讓程序員可以非常便捷的使用到redis服務文章來源地址http://www.zghlxwxcb.cn/news/detail-594071.html

到了這里,關于Redis底層封裝細節(jié)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • springboot+redis+mysql+quartz-通過Java操作jedis使用pipeline獲取緩存數(shù)據(jù)定時更新數(shù)據(jù)庫

    springboot+redis+mysql+quartz-通過Java操作jedis使用pipeline獲取緩存數(shù)據(jù)定時更新數(shù)據(jù)庫

    代碼講解:6-點贊功能-定時持久化到數(shù)據(jù)庫-pipeline+lua-優(yōu)化pipeline_嗶哩嗶哩_bilibili https://www.bilibili.com/video/BV1yP411C7dr 代碼: blogLike_schedule/like06 · xin麒/XinQiUtilsOrDemo - 碼云 - 開源中國 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like06 數(shù)據(jù)庫表的

    2024年02月16日
    瀏覽(28)
  • springboot+redis+mysql+quartz-通過Java操作jedis定時使用lua腳本獲取緩存數(shù)據(jù)并更新數(shù)據(jù)庫

    springboot+redis+mysql+quartz-通過Java操作jedis定時使用lua腳本獲取緩存數(shù)據(jù)并更新數(shù)據(jù)庫 代碼講解:7.1點贊功能-定時持久化到數(shù)據(jù)庫-Java整合lua_嗶哩嗶哩_bilibili https://www.bilibili.com/video/BV1ZX4y1H7JT/ 代碼: blogLike_schedule/like07 · xin麒/XinQiUtilsOrDemo - 碼云 - 開源中國 (gitee.com) https://gitee

    2024年02月13日
    瀏覽(17)
  • 【Redis】內(nèi)存數(shù)據(jù)庫Redis進階(Redis哨兵集群)

    【Redis】內(nèi)存數(shù)據(jù)庫Redis進階(Redis哨兵集群)

    基于 Redis 集群解決單機 Redis 存在的四大問題: ??搭建一個三節(jié)點形成的 Sentinel 集群,來監(jiān)管 Redis 主從集群。 ??【Redis】內(nèi)存數(shù)據(jù)庫Redis進階(Redis主從集群) ??架構圖: 三個sentinel實例信息: 節(jié)點 IP PORT s1 192.168.150.101 27001 s2 192.168.150.101 27002 s3 192.168.150.101 27003 之前

    2024年02月14日
    瀏覽(19)
  • Redis緩存數(shù)據(jù)庫

    目錄 一、概述 1、Redis ?2、Redis的安裝 Redis Windows環(huán)境設置 3、String: 字符串 3.1、字符串 3.2、數(shù)值 3.3、bitmap 4、Hash: 散列 5、List: 列表 6、Set: 集合 7、Sorted Set: 有序集合 常識: 磁盤:1.尋址:ms(毫秒)2.帶寬:MB/s 內(nèi)存:1.尋址:ns? ? (納秒)?2.帶寬:GB/s 秒--毫秒--微妙--納秒

    2024年02月04日
    瀏覽(24)
  • Redis內(nèi)存數(shù)據(jù)庫

    Redis內(nèi)存數(shù)據(jù)庫 NoSQL數(shù)據(jù)庫簡介 Redis簡介 Redis應用場景 windows下安裝和使用Redis 在linux下安裝redis Redis數(shù)據(jù)可視化RedisDesktopManager Redis配置 Redis 數(shù)據(jù)類型 Redis 字符串(String) Redis 哈希(Hash) Redis 列表(List) Redis 集合(Set) Redis 有序集合(sorted set) Redis key命令 Redis連接命令 Redis服務器命令

    2024年02月09日
    瀏覽(24)
  • 1 - 搭建Redis數(shù)據(jù)庫服務器|LNP+Redis

    1 - 搭建Redis數(shù)據(jù)庫服務器|LNP+Redis

    數(shù)據(jù)庫服務軟件分為2類: 關系型數(shù)據(jù)庫服務軟件 簡稱 RDBMS 按照預先設置的組織結構 將數(shù)據(jù)存儲在物理介質上 數(shù)據(jù)之間可以做關聯(lián)操作 非關系型數(shù)據(jù)庫服務軟件 簡稱 NoSQL 不僅僅是SQL 不需要預先定義數(shù)據(jù)存儲結構 每條記錄可以有不同的數(shù)據(jù)類型和字段個數(shù) 只需要 key valu

    2024年01月25日
    瀏覽(66)
  • 126、高頻Redis面試題:如何保證Redis和數(shù)據(jù)庫數(shù)據(jù)一致性

    126、高頻Redis面試題:如何保證Redis和數(shù)據(jù)庫數(shù)據(jù)一致性

    問題:如果數(shù)據(jù)庫中的某條數(shù)據(jù)放入緩存后,又馬上被更新了,那我們應該如何更新緩存 缺點: 如果先更新緩存成功,在更新數(shù)據(jù)庫的時候失敗,這時候會導致數(shù)據(jù)不一致;緩存的作用是不是臨時將我們數(shù)據(jù)保存在內(nèi)存,便于提高查詢速度;但是如果某條數(shù)據(jù)在數(shù)據(jù)庫中都

    2024年02月13日
    瀏覽(27)
  • Redis 數(shù)據(jù)庫高可用

    Redis 數(shù)據(jù)庫高可用

    (1)在web服務器中,高可用是指服務器可以正常訪問的時間,衡量的標準是在多長時間內(nèi)可以提供正常服務(99.9%、99.99%、99.999%等等)。 (2)在Redis中,保證提供正常服務(如主從分離、快速容災技術),還需要考慮數(shù)據(jù)容量的擴展、數(shù)據(jù)安全不會丟失等。 實現(xiàn)高可用的技

    2024年02月15日
    瀏覽(18)
  • Redis 數(shù)據(jù)庫 NoSQL

    Redis 數(shù)據(jù)庫 NoSQL

    目錄 一、NoSQL 二、為什么會出現(xiàn)NoSQL技術 三、NoSQL的類別 鍵值(Key-Value)存儲數(shù)據(jù)庫 列存儲數(shù)據(jù)庫 文檔型數(shù)據(jù)庫 圖形(Graph)數(shù)據(jù)庫 四、NoSQL適應場景 五、在分布式數(shù)據(jù)庫中CAP原理 1、CAP 2、BASE NoSQL(Not Only SQL)即不僅僅是SQL,泛指非關系型的數(shù)據(jù)庫,它可以作為關系型數(shù)

    2024年02月12日
    瀏覽(25)
  • Redis緩存數(shù)據(jù)庫(四)

    Redis緩存數(shù)據(jù)庫(四)

    目錄 一、概述 1、Redis Sentinel 1.1、docker配置Redis Sentinel環(huán)境 2、Redis存儲方案 2.1、哈希鏈 2.2、哈希環(huán) 3、Redis分區(qū)(Partitioning)? 4、Redis面試題 Redis Sentinel為Redis提供了 高可用解決方案 。實際上這意味著使用Sentinel可以部署一套Redis, 在沒有人為干預的情況下去應付各種各樣的失

    2024年02月05日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包