redisjava的簡單介紹

本文目錄一覽:

如何在java中使用redis

public class RedisListJava {

   public static void main(String[] args) {

      //連接本地的 Redis 服務

      Jedis jedis = new Jedis(“localhost”);

      System.out.println(“Connection to server sucessfully”);

      //存儲數據到列表中

      jedis.lpush(“tutorial-list”, “Redis”);

      jedis.lpush(“tutorial-list”, “Mongodb”);

      jedis.lpush(“tutorial-list”, “Mysql”);

     // 獲取存儲的數據並輸出

     ListString list = jedis.lrange(“tutorial-list”, 0 ,5);

     for(int i=0; ilist.size(); i++) {

       System.out.println(“Stored string in redis:: “+list.get(i));

     }

 }

}

java三年經驗要會redis嗎

java三年經驗要會redis。

java是一門面向對象的編程語言。java語言具有功能強大和簡單易用兩個特徵,具有簡單性、面向對象、分散式等特點,可以編寫桌面應用程序、Web應用程序、分散式系統和嵌入式系統應用程序等。

怎麼在java中實現redis的添加數據

第一步,在windows下載安裝配置好redis資料庫。這裡我就不再概述了。下載jedis-2.4.2.jar,當然最好是下載最新版本的jar包。這個在百度搜索下就出來的。下載後,放在一個文件夾下面,一會會需要到。

第二步。打開eclipse,新建一個java工程。如下圖所示:

第三步:在Test這個java工程裡面,我們新建一個folder,命名lib,把剛才下載的jedis-2.4.2.jar包放在我們新建的lib的包下面,如下圖所示:

第四步,在eclipse中,選中jar包,build path下。然後我們再Test這個項目裡面我們新建一個class,class名字為TestConnect。

第五步,在類裡面,我們輸入如下的內容:

// Connecting to Redis server on localhost

//實例化一個客戶端

Jedis jedis = new Jedis(“localhost”);

//=================================================

// check whether server is running or not

//ping下,看看是否通的

System.out.println(“Server is running: ” + jedis.ping());

//保存一個

jedis.set(“leiTest”, “localhost Connection sucessfully”);

//獲取一個

System.out.println(“通過key獲取value: ” + jedis.get(“leiTest”));

第六步,對剛才的類進行運行,ctrl+f11快捷鍵運行下,如下圖所示:

第七步,進一步驗證我們是否在redis上是否保存了數據,並且能夠取出來,我們到redis安裝包的目錄,如下圖,打開紅色框內的 redis-cli.exe,打開後,我們進入下面的第二個圖片的界面。

第八步:我們在redis的客戶端的界面 輸入 get leiTest 這個指令。leiTest是剛才在eclipse中我們存入redis資料庫中的一個String類型的鍵。如下圖,證明我們確實成功了,你也試試吧。

Java如何獲取Redis中存儲的大量內容?

第一,大量的數據是不會考慮放在JVM內存中;

第二,如果需要緩存大量的dto,動態數據(又稱過程數據)一般用的是redis;如果是靜態,系統啟動時就載入的大量配置,一般考慮放ehcache。

第三,由於redis用的是物理內存,不是JVM內存,一般情況下往redis里丟千萬級別的記錄數基本不影響性能,

redis集群角色切換java調用異常

redis集群角色切換java調用異常

一、Redis狀態檢查

唯一標記一個redis實例的是ip和埠,前端是用tcp方式來訪問redis的,我們提供給應用訪問的是一個ip+63379(一般使用63379) 埠。因此我們執行如下命令檢查redis狀態:

上面的role這個值一定是master的,只要保證vip在master上我們的Padis cache服務就是沒有問題的,如果不通或者role的角色是slave,那就得繼續查看是什麼問題.

二、兩個redis的角色都是slave的問題

當兩個主機都掛了或者我們自己不小心將兩個redis停了,並且我們用下面的命令檢查

/wls/wls81/redis/bin/redis-cli -h {ip} -p {port} -a {password} info replication

發現無論是vip還是另外的兩個ip都是role:slave 的角色,這個時候需要對vip所在的主機執行slaveof no one 的操作,將vip 所在的redis變成master,如:

/wls/wls81/redis/bin/redis-cli -h {vip} -p {port} -a {password} slaveof no one

三、sentinel的配置參數

我們的sentinel 配置文件裡面有兩個重要的配置

sentinel monitor pds_jks-core-prd 10.33.94.65 63379 1 ———–配置的ip和埠任何時候都需要是master的ip埠,切換的時候程序自動會改 。另外,紅色所示部分pds_jks-core-prd為redis對外提供的主機名,一般Jedis在調用redis時會用到此名稱。如果配置多個哨兵則一般要求此名稱唯一標識

sentinel down-after-milliseconds pds_jks-core-prd 15000 ———-這個是sentinel連接master的超時時間,超過這個時間就認為master掛了,實現自動切換。這個默認是30秒,這個時間得調節好,大了會在真正出現故障的時候切換時間會長,小了有時候master由於持久化數據,繁忙不響應,會導致自動切換,實際只是瞬間不可用,現在認為設置為15秒為宜.

四、AOF日誌

這個日誌記錄了每一個寫入命令或者刪除命令的,這個對於我們審計功能是有用的,由於佔用很多磁碟,默認我們是關閉的

如果開啟會生成一個.aof的文件在data文件中. 如: /wls/apache/servers/pds_jks-core-prd/data

在redis運行中中開啟:

/wls/wls81/redis-icore/bin/redis-cli -h {ip} -p {port} -a {password} config set appendonly yes

開啟了可以查看日誌,記錄每一個命令,如有必要可以開啟查完問題後關閉. 同時說明一下

/wls/wls81/redis-icore/bin/redis-cli -h {ip} -p {port} -a {password} config set 可以在redis運行的時候設置多個它的參數

五、空閑連接的timeout

redis服務端不會自動斷開客戶端來的連接,redis服務端有設置客戶端空閑連接超時時間,可用命令

/wls/wls81/redis-icore/bin/redis-cli -h {ip} -p {port} -a {password} config get timeout

查看當前timeout時間,默認是0,就是不斷開空閑的連接,如果不斷開空閑的連接,就會造成redis連接過多

所以一般情況下可以設置為3600秒:

/wls/wls81/redis-icore/bin/redis-cli -h {ip} -p {port} -a {password} config set timeout 3600

也就是3600秒後將空閑的連接關閉掉. 可以用下面的命令查看某個連接空閑了多久:

/wls/wls81/redis-icore/bin/redis-cli -h {ip} -p {port} -a {password} client list

六、監控redis執行的命令

/wls/wls81/redis-icore/bin/redis-cli -h {ip} -p {port} -a {password} monitor

上述這個monitor命令可以查看redis執行了什麼命令,有時候查問題很有必要用到,我們可以知道那段時間redis執行了什麼,從而進行我們的問題診斷。

七、key的查找與執行

/wls/wls81/redis-icore/bin/redis-cli -h {ip} -p {port} -a {password} keys “*”

keys這個命令查找所有的key,但是最好慎用,因為它很耗redis的性能,每個key都遍歷一遍. 也可以進行模糊匹配如: keys “send*”

千萬記住在生產環境上不能隨便亂用,因為它會將redis性能耗盡,導致其他連接獲取不到響應.

/wls/wls81/redis/bin/redis-cli -h {ip} -p {port} -a {password} dbsize

dbsize 這個命令可以看到整一個redis裡面有多少個key,當然和keys “*” | wc -l結果是一樣的。

當我們需要批量刪除key值時可以用如下命令即可:

/wls/wls81/redis/bin/redis-cli -h {ip} -p {port} -a {password} keys “send*” | xargs /wls/wls81/redis/bin/redis-cli -h {ip} -p {port} -a {password} del

我們需要將整個db都flush掉可以用:

/wls/wls81/redis/bin/redis-cli -h {ip} -p {port} -a {password} -a MamcCorePrd flushdb

/wls/wls81/redis/bin/redis-cli -h {ip} -p {port} -a {password} -a flushall

八、由於連接redis的客戶端使用jedisPool

如果設置了

redis.pool.testOnBorrow.REL=true

redis.pool.testOnReturn.REL=true

這兩個參數是說在或者pool中的連接和返回連接給pool的時候都需要檢查一下連接的有用性,也就是ping一下這個redis是不是好的,

這樣在高並發的時候,由於並發線程太多,ping操作相對線程啟動來說很慢,因此,應用會堵在類似如下線程dump的地方

“[ACTIVE] ExecuteThread: ’19’ for queue: ‘weblogic.kernel.Default (self-tuning)'” id=33 idx=0x9c tid=273669 prio=5 alive, native_blocked, daemon

at jrockit/net/SocketNativeIO.readBytesPinned(Ljava/io/FileDescriptor;[BIII)I(Native Method)

at jrockit/net/SocketNativeIO.socketRead(SocketNativeIO.java:32)

at java/net/SocketInputStream.socketRead0(Ljava/io/FileDescriptor;[BIII)I(SocketInputStream.java)

at java/net/SocketInputStream.read(SocketInputStream.java:129)

at java/net/SocketInputStream.read(SocketInputStream.java:90)

at redis/clients/util/RedisInputStream.fill(RedisInputStream.java:109)

at redis/clients/util/RedisInputStream.readByte(RedisInputStream.java:45)

at redis/clients/jedis/Protocol.process(Protocol.java:64)

at redis/clients/jedis/Protocol.read(Protocol.java:131)

at redis/clients/jedis/Jedis.ping(Jedis.java:35)

at redis/clients/jedis/JedisPool$JedisFactory.validateObject(JedisPool.java:104)

at org/apache/commons/pool/impl/GenericObjectPool.addObjectToPool(GenericObjectPool.java:922)

at org/apache/commons/pool/impl/GenericObjectPool.returnObject(GenericObjectPool.java:917)

^– Holding lock: org/apache/commons/pool/impl/GenericObjectPool@0xb8513338[fat lock]

at redis/clients/util/Pool.returnResourceObject(Pool.java:29)

at redis/clients/util/Pool.returnResource(Pool.java:41)

at com/paic/icore/mams/common/jedis/util/RedisPoolCacheTools.release(RedisPoolCacheTools.java:43)

雖然後面會自動恢復,不過導致應用響應緩慢.解決方法是將該兩個參數設置為false,並且定期檢查:

testOnBorrow.REL=false

testOnReturn.REL=false

timeBetweenEvictionRunsMillis=60000 ——-每隔60秒定期檢查空閑連接

minEvictableIdleTimeMillis=120000 ———連接在池中保持空閑而不被空閑連接回收器線程回收的最小時間值,單位毫秒

numTestsPerEvictionRun=-1 ———-空閑連接掃描時,每次最多掃描的連接數,一般設置為-1,全部掃描

設置成這樣之後就不用每次都測試了,這樣就提高了應用的性能

有時候由於持久化導致master變得緩慢,所以建議關閉master的持久化,讓slave持久化

關閉持久化 /wls/wls81/redis/bin/redis-cli -h {ip} -p {port} -a {password} config set save “”

開通持久化 /wls/wls81/redis/bin/redis-cli -h {ip} -p {port} -a {password} config set save “900 1 300 10 60 10000”

關閉持久化後如果發生主備切換了,請將master的持久化關閉,slave的持久化開啟

九、查詢每秒執行的命令個數

十、單位時間內Redis執行的命令次數

redis java 有什麼用

Java連接redis的使用示例

Redis是開源的key-value存儲工具,redis通常用來存儲結構化的數據,因為redis的key可以包含String、hash、listset和sorted list。

Redisclient支持多種語言,包括:c、C++、C#、php、java、python、go等語言,根據自己的開發語言,選擇合適的redis client版本類型即可。我是使用java語言開發的,針對java語言,redis client也提供了多種客戶端支持,按照推薦類型依次是:Jedis、Redisson、JRedis、JDBC-Redis、RJC、redis-protocol、aredis、lettuce。前兩種類型是比較推薦的,我們採用了Redisson類型版本作為redisclient的使用。

Redisson版的redis可發工程搭建

1. 新建maven工程

2. 在pom.xml文件的dependencies節點下增加如下內容:

dependency

groupIdorg.redisson/groupId

artifactIdredisson/artifactId

version1.0.2/version

/dependency

dependency

groupIdorg.slf4j/groupId

artifactIdslf4j-log4j12/artifactId

version1.7.7/version

/dependency

3. 保存pom.xml後,等eclispe工程構建完成後即可進行開發了

開發示例

下面是演示連接redis伺服器、保存讀取concurrentMap對象、保存讀取set對象和保存讀取Queue對象的示例代碼,代碼比較簡單,這裡就不再詳細講解了,代碼如下:

[java] view plaincopy

package com.my.test.redis;

import java.util.Queue;

import java.util.Set;

import java.util.concurrent.ConcurrentMap;

import org.redisson.Config;

import org.redisson.Redisson;

public class RedisExample {

/**

* @param args

*/

public static void main(String[] args) {

// 1.初始化

Config config = new Config();

config.setConnectionPoolSize(10);

config.addAddress(“127.0.0.1:6379”);

Redisson redisson = Redisson.create(config);

System.out.println(“reids連接成功…”);

// 2.測試concurrentMap,put方法的時候就會同步到redis中

ConcurrentMapString, Object map = redisson.getMap(“FirstMap”);

map.put(“wuguowei”, “男”);

map.put(“zhangsan”, “nan”);

map.put(“lisi”, “女”);

ConcurrentMap resultMap = redisson.getMap(“FirstMap”);

System.out.println(“resultMap==” + resultMap.keySet());

// 2.測試Set集合

Set mySet = redisson.getSet(“MySet”);

mySet.add(“wuguowei”);

mySet.add(“lisi”);

Set resultSet = redisson.getSet(“MySet”);

System.out.println(“resultSet===” + resultSet.size());

//3.測試Queue隊列

Queue myQueue = redisson.getQueue(“FirstQueue”);

myQueue.add(“wuguowei”);

myQueue.add(“lili”);

myQueue.add(“zhangsan”);

myQueue.peek();

myQueue.poll();

Queue resultQueue=redisson.getQueue(“FirstQueue”);

System.out.println(“resultQueue===”+resultQueue);

// 關閉連接

redisson.shutdown();

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/195631.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 20:36
下一篇 2024-12-02 20:36

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智慧,Python都扮演著重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27
  • 2的32次方-1:一個看似簡單卻又複雜的數字

    對於計算機領域的人來說,2的32次方-1(也就是十進位下的4294967295)這個數字並不陌生。它經常被用來表示IPv4地址或者無符號32位整數的最大值。但實際上,這個數字卻包含…

    編程 2025-04-27
  • 製作一個簡單的管理系統的成本及實現

    想要製作一個簡單的管理系統,需要進行技術選型、開發、測試等過程,那麼這個過程會花費多少錢呢?我們將從多個方面來闡述製作一個簡單的管理系統的成本及實現。 一、技術選型 當我們開始思考…

    編程 2025-04-27

發表回復

登錄後才能評論