首頁 資料庫 Redis redis與jedis的差別是什麼

redis與jedis的差別是什麼

Jun 29, 2019 pm 05:10 PM

redis與jedis的差別是什麼

redis與spring的整合一般分為spring-data-redis整合和jedis整合,先看看兩者的差異

1、引用的依賴不同:

spring-data-redis使用的依賴如下:

<dependency>  
      <groupId>org.springframework.data</groupId>  
      <artifactId>spring-data-redis</artifactId>  
      <version>1.8.9.RELEASE</version>  
</dependency>
登入後複製

jedis使用的依賴如下:

<dependency>
       <groupId>redis.clients</groupId>
       <artifactId>jedis</artifactId>
       <version>2.9.0</version>
       <type>jar</type>
       <scope>compile</scope>
</dependency>
登入後複製

2、管理jedis實例方式、操作redis服務的不同:

spring-data-redis:

    透過org.springframework.data.redis.connection.jedis.JedisConnectionFactory來管理,即透過工廠類別管理,然後透過配置的模版bean,操作redis服務,程式碼片段中充斥大量與業務無關的模版片段程式碼,程式碼冗餘,不易維護,例如像下面的程式碼:

protected RedisTemplate<Serializable, Serializable> redisTemplate;
 
public void saveUser(User user) {
    redisTemplate.execute(new RedisCallback<Object>() {
 
 
        @Override
        public Object doInRedis(RedisConnection connection) throws DataAccessException {
            connection.set(redisTemplate.getStringSerializer().serialize("user.uid." + user.getId()),
                           redisTemplate.getStringSerializer().serialize(user.getName()));
            return null;
        }
    });
}
 
 
public User getUser(long id) {
    return redisTemplate.execute(new RedisCallback<User>() {
        @Override
        public User doInRedis(RedisConnection connection) throws DataAccessException {
            byte[] key = redisTemplate.getStringSerializer().serialize("user.uid." + id);
            if (connection.exists(key)) {
                byte[] value = connection.get(key);
                String name = redisTemplate.getStringSerializer().deserialize(value);
                User user = new User();
                user.setName(name);
                user.setId(id);
                return user;
            }
            return null;
        }
    });
}
登入後複製

RedisTemplate介紹

spring 封裝了RedisTemplate 物件來進行對redis的各種操作,它支援所有的redis 原生的api。在RedisTemplate中提供了幾個常用的介面方法的使用,分別是:

private ValueOperations valueOps;private ListOperations listOps;private SetOperations private ZSetOperations zSetOps;

RedisTemplate中定義了對5種資料結構操作

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
StringRedisTemplate与RedisTemplate
登入後複製

兩者的關聯是StringRedisTemplate繼承RedisTemplate。
兩者的數據是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate裡面的數據,RedisTemplate只能管理RedisTemplate中的數據。
SDR預設採用的序列化策略有兩種,一種是String的序列化策略,一種是JDK的序列化策略。
StringRedisTemplate預設採用的是String的序列化策略,而保存的key和value都是採用此策略序列化保存的。

RedisTemplate預設採用的是JDK的序列化策略,保存的key和value都是採用此策略序列化保存的。

jedis方式:

透過redis.clients.jedis.JedisPool來管理,即透過池來管理,透過池物件取得jedis實例,然後透過jedis實例直接操作redis服務,剔除了與業務無關的冗餘程式碼,如下面的程式碼片段:

private JedisPool jedisPool;
public String save(String key,String val) {
Jedis jedis = jedisPool.getResource();
return jedis.set(key, val);
}
登入後複製

從工廠類別到池的方式變化,就相當於mybatis連接mysql方變化是一樣的,程式碼變得更簡潔,維護也更容易了。 Jedis使用apache commons-pool2對Jedis資源池進行管理,所以在定義JedisPool時一個很重要的參數就是資源池GenericObjectPoolConfig,使用方式如下,其中有許多資源管理和使用的參數。

參數說明

JedisPool保證資源在一個可控範圍內,並且提供了線程安全,但是一個合理的GenericObjectPoolConfig配置能為應用使用Redis保駕護航,下面將對它的一些重要參數進行說明與建議:

在目前環境下,Jedis連線就是資源,JedisPool管理的就是Jedis連線。

1、資源設定和使用

maxTotal:資源池中最大連線數;預設值:8 設定建議見下節
maxIdle:資源池允許最大空閒的連線數;預設值:8;使用建議:設定建議請參閱下節
minIdle:資源池確保最少空閒的連線數;預設值:0;使用建議:設定建議請參閱下方節
blockWhenExhausted:當資源池用完後,呼叫者是否要等待。只有當為true時,下面的maxWaitMillis才會生效;預設值:true;使用建議:建議使用預設值
maxWaitMillis:當資源池連接用盡後,呼叫者的最大等待時間(單位為毫秒) - 1:表示永不逾時;使用建議:不建議使用預設值
testOnBorrow:向資源池借用連線時是否做連線有效性偵測(ping),無效連線會被移除;預設值:false;使用建議:業務量很大時候建議設定為false(多一次ping的開銷)。
testOnReturn:向資源池歸還連線時是否做連線有效性偵測(ping),無效連線會被移除;預設值:false;使用建議:業務量很大時候建議設定為false(多一次ping的開銷)。
jmxEnabled:是否開啟jmx監控,可用來監控;預設值:true;使用建議:建議開啟,但應用程式本身也要開啟

2、空閒資源監控

空閒Jedis物件偵測,下面四個參數組合來完成,testWhileIdle是該功能的開關。

testWhileIdle:是否開啟空閒資源監測;預設值:false;使用建議:true
timeBetweenEvictionRunsMillis:空閒資源的偵測週期(單位為毫秒);預設值:-1:不偵測;使用建議:建議設定,週期自行選擇,也可以預設也可以使用下面JedisPoolConfig中的配置
minEvictableIdleTimeMillis:資源池中資源最小空閒時間(單位為毫秒),達到此值後空閒資源將被移除;預設值:1000 60 30 = 30分鐘;使用建議:可依自身業務決定,大部分預設值即可,也可以考慮使用下面JeidsPoolConfig中的配置
numTestsPerEvictionRun:做空閒資源偵測時,每次的取樣數;預設值: 3;使用建議:可根據自身應用連接數進行微調,如果設定為-1,就是對所有連接做空閒監測

更多Redis相關知識,請訪問Redis使用教程欄!

以上是redis與jedis的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在Redis中實施身份驗證和授權? 如何在Redis中實施身份驗證和授權? Mar 17, 2025 pm 06:57 PM

本文討論了在REDIS中實施身份驗證和授權,重點是實現身份驗證,使用ACL以及確保REDIS的最佳實踐。它還涵蓋了管理用戶權限和工具以增強重新安全性。

如何在Redis群集中選擇一個碎片鍵? 如何在Redis群集中選擇一個碎片鍵? Mar 17, 2025 pm 06:55 PM

本文討論了在Redis群集中選擇碎片鍵,並強調了它們對性能,可伸縮性和數據分佈的影響。關鍵問題包括確保均勻數據分配,與訪問模式保持一致以及避免常見錯誤l

如何將Redis用於工作隊列和背景處理? 如何將Redis用於工作隊列和背景處理? Mar 17, 2025 pm 06:51 PM

本文討論了使用REDIS進行工作隊列和背景處理,詳細的設置,作業定義和執行。它涵蓋了原子運營和工作優先級等最佳實踐,並解釋了REDIS如何提高處理效率。

如何在REDIS中實施緩存無效策略? 如何在REDIS中實施緩存無效策略? Mar 17, 2025 pm 06:46 PM

本文討論了在REDIS中實施和管理緩存無效的策略,包括基於時間的到期,事件驅動的方法和版本控制。它還涵蓋了緩存到期的最佳實踐和監視和自動的工具

如何監視REDIS群集的性能? 如何監視REDIS群集的性能? Mar 17, 2025 pm 06:56 PM

文章討論了使用Redis CLI,Redis Insight和Datadog和Prometheus等工具等工具進行監視REDIS群集的性能和健康。

如何將Redis用於酒吧/子消息傳遞? 如何將Redis用於酒吧/子消息傳遞? Mar 17, 2025 pm 06:48 PM

本文介紹瞭如何將Redis用於酒吧/子消息傳遞,涵蓋設置,最佳實踐,確保消息可靠性和監視性能。

如何在Web應用程序中使用REDI進行會話管理? 如何在Web應用程序中使用REDI進行會話管理? Mar 17, 2025 pm 06:47 PM

本文討論了在Web應用程序中使用REDIS進行會話管理,詳細介紹設置,諸如可伸縮性和性能以及安全措施之類的好處。

如何確保重新侵害常見漏洞? 如何確保重新侵害常見漏洞? Mar 17, 2025 pm 06:57 PM

文章討論了確保重新侵害漏洞,重點關注強密碼,網絡綁定,命令禁用,身份驗證,加密,更新和監視。

See all articles