導航:首頁 > 文件管理 > java單節點redis配置文件

java單節點redis配置文件

發布時間:2023-03-28 23:52:17

Ⅰ Redis 學習總結(3) Redis 哨兵模式

在實際開發中不會僅僅部署一個 Redis 伺服器,為了獲得高可用,Redis 哨兵模式 則是高可用的一種選擇。

本文先介紹下 哨兵模式,再介紹了如何在 springboot 項目中使用。

這意味著使用 Sentinel (哨兵模式),您可以創建一個 Redis 部署,它可抵抗某些類型的故障(進行故障遷移)而無需人工干預。

它有這些功能:

Sentinel 的分布式特性
Redis Sentinel 是一個分布式系統,多個 Sentinel 進程協同工作,有這些優勢:賣滾

部署前需要了解:

三個節點的基本配置

法定人數和仲裁
在配置 哨兵模式時,要指定一個 quorum,它可理解為「法定人數」。
假設有3 個 哨兵,法定人數為2。那麼:

哨兵和副本的自動發現
Sentinel 與其他 Sentinel 保持連接,以便相互檢查彼此的可用性並交換消息。

但是,您不需要在您運行的每個 Sentinel 實例中配置其他 Sentinel 地址的列表,因為 Sentinel 使用 Redis 實例的 Pub/Sub 功能來發現正在監視相同主節點和副本的其他 Sentinel。

類似地,您不需要配置附加到主伺服器的副本地址在哪裡,因為 Sentinel 會通過查詢 Redis 自動發現它們。

參考我的另一篇文章:

一般需要三個節點,每個節點有一個 redis 和一個哨兵。

下面再分別描述。

我這里按三個 節褲隱點,先配置 redis 的主從復制。1個節點作為 master ,2個副本。

配置節點1:master
這里的 redis 作為 master 主redis,其他兩個節點作為從節點。
我的文件夾名字叫 box1,這里編輯一個 box1/redis.conf 文件,主要配置內容如下:

配置節點2:副本
編輯一個 box2/redis.conf 文件,主要配置內容如下:

配置節點3:副本
編輯一個 box3/redis.conf 文件,主要配置內容如下:

分別啟動這三個redis
命令行執行 redis-server ,並指定 配置文件的路徑參數。

如何查看「主從復制」是否配置成功?
使用 info replication 命令,操作如下:

副本節點設置為只讀?
從 Redis 2.6 開始,副本已被默認設置為 只讀,無需額外配置。.

一般情況下,至少會需要三個哨兵對redis 進行監控,我們可以通過修改埠啟動多個sentinel 服務。

第一個哨兵:
哨兵的 默認埠是 26379 ,這里不改。

第二個哨兵:
修改哨兵埠。

第三個哨兵:
修改哨兵埠。

啟動哨兵
使用 redis-sentinel 命令,分別啟動這三個哨兵

哨兵的自動發現
當三個哨兵都啟動後,在各個哨兵的列印日誌里可以看到, 三個哨兵已互相發現了彼此的存在 。

至此,配置完畢了,我們有三個 redis,和三個哨中純余兵,看下截圖。

模擬 master 宕機
按 ctrl+c 停止 master ,其位於 6379 。停止後,從日誌可以看到,哨兵和 redis副本先努力繼續連接 6379,反復幾次失敗後,開始選舉出新的 master。截圖如下:

至此,配置完畢。

我們看下 springboot 項目的客戶端如何配置 以訪問 哨兵模式的 redis。

Redis 哨兵支持
對於處理高可用Redis,Spring Data Redis 已經支持Redis Sentinel,使用RedisSentinelConfiguration,如下例所示:

Jedis 和 Lettuce 兩種 redis 驅動都可以支持。

RedisSentinelConfiguration 也可以用可以 通過 PropertySource 來設置,它允許您設置以下屬性:

配置application.yml

比如我這里修改我的 application.yml 文件如下:

我的配置文件示例: https://github.com/vir56k/java_demo/tree/master/redis-sentinel
我的 springboot 配置實例: https://github.com/vir56k/java_demo/tree/master/redis-sentinel/springboot_redis_demo

Redis官網 sentinel 介紹
https://redis.io/topics/sentinel

spring-data/data-redis
https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#redis:sentinel

https://www.cnblogs.com/jaycekon/p/6237562.html

END

Ⅱ java怎樣配置redis佔用多大內存

Redis的配置
daemonize 如果需要在後台運行,把該項改為yes
pidfile 配置多個pid的地址,默認在/var/run/redis.pid
bind 綁定ip,設置後只接受自該ip的請求
port 監聽埠,默認為6379
timeout 設置客戶端連接時的超時時間,單位為秒
loglevel 分為4級,debug、verbose、notice、warning
logfile 配置log文件地址
databases 設置資料庫的個數,默認使用的資料庫為0
save 設置redis進行資料庫鏡像的頻率,保存快照的頻率,第一個*表示多長時間, 第三個*表示執行多少次寫操作。在一定時間內執行一定數量的寫操作時,自動保存快照。可設置多個條件。
rdbcompression 在進行鏡像備份時,是否進行壓縮
Dbfilename 鏡像備份文件的文件名
Dir 資料庫鏡像備份的文件放置路徑
Slaveof 設置資料庫為其他資料庫的從資料庫
Masterauth 主資料庫連接需要的密碼驗證
Requirepass 設置登錄時需要使用的密碼
Maxclients 限制同時連接的客戶數量
Maxmemory 設置redis能夠使用的最大內存
Appendonly 開啟append only模式
appendfsync 設置對appendonly.aof文件同步的頻率
vm-enabled 是否虛擬內存的支持
vm-swap-file 設置虛擬內存的交換文件路徑
vm-max-memory 設置redis使用的最大物理內存大小
vm-page-size 設置虛擬內存的頁大小
vm-pages 設置交換文件的總page數量
vm-max-threads 設置VMIO同時使用的線程數量
glueoutputbuf 把小的輸出緩存存放在一起
hash-max-zipmap-entries 設置hash的臨界值
activerehashing 重新has

Ⅲ RedisTemplate在java哪個包下面

redisDao封裝類-其他集成他
[java] view plain
package com.ffcs.wlan..common;
import javax.annotation.Resource;
import org.springframework.data.redis.core.StringRedisTemplate;

/**
* AbstractBaseRedisDao
* @author hugsh
* @version <b>1.0</b>
*/
public abstract class AbstractBaseRedisDao<K, V> {

@Resource
protected StringRedisTemplate redisTemplate;

public void setRedisTemplate(StringRedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
}

批量插入(不關注返回值)
[java] view plain
@Repository
public class RedisInitDao extends AbstractBaseRedisDao<String, Object> {

Logger logger=Logger.getLogger(RedisInitDao.class);

/**
* 批量向redis中孝喊插入H碼:key(tableName:hcode) value(pcode)
* 如果鍵已存在則返回false,不更新,防止覆蓋。使用pipeline批處理方式(不關注返回值)
* @param list 一個map代表一行記錄,2個賣慎灶key:hcode & pcode。
* @param tableName redis中key的值為tableName:hcode 對中扮應value值為pcode。
* @return
*/
public boolean addHcode(final List<Map<String, Object>> list,final String tableName) {
boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
public Boolean doInRedis(RedisConnection connection)
throws DataAccessException {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
for (Map<String, Object> map : list) {
byte[] key = serializer.serialize(tableName+":"+map.get("hcode").toString());
byte[] name = serializer.serialize(map.get("pcode").toString());
connection.setNX(key, name);
}
return true;
}
}, false, true);
return result;
}

批量獲取(有返回值)
[java] view plain
/**
* 從redis中獲取(獲取密碼日誌) rPop從鏈表尾部彈出(最早的日誌)
* 多線程並發讀取日誌長度的時候,比如都得到結果是1000條。
* 當多線程每個都 循環1000次 pop彈出 日誌的時候,
* 由於是多線程一起pop,所以每個線程獲得的數組中都會包含 null 甚至有的全是null
* @return
*/
public List<String> getLogFromRedis() {

final RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
//密碼日誌的長度
final Long pwdLogSize=redisTemplate.opsForList().size("getpwdList");

List<Object> pwdLogList=redisTemplate.executePipelined(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection conn)
throws DataAccessException {
for (int i=0 ;i<pwdLogSize ;i++) {
byte[] listName = serializer.serialize("getpwdList");
conn.rPop(listName);
}
return null;
}
}, serializer);

// 去除結果中的null
ArrayList<String> newList=new ArrayList<String>();
for (Object o : pwdLogList) {
if(o!=null)
newList.add(String.valueOf(o));
}
return newList;
}
基礎數據類型工具類(opsForList)

[java] view plain
/**
* 向redis中插入獲取密碼日誌:leftPush 從鏈表頭部壓入
* @param pwdLog 獲取密碼的日誌
* @return
*/
public void addLogIntoRedis(final String pwdLog) {
log.info("insert getpwd log into redis:"+pwdLog);
try {
redisTemplate.opsForList().leftPush("getpwdList", pwdLog);
} catch (Exception e) {
log.error(e.getMessage());
}
}

配置文件
[html] view plain
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.maxTotal}"></property>
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="maxWaitMillis" value="${redis.maxWait}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>

<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="${redis.host}" p:port="${redis.port}" p:pool-config-ref="poolConfig"/>

<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="connectionFactory" />
</bean>

</beans>
[html] view plain
<!-- 引入項目配置文件 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:redis.properties</value><!-- 引入redis配置文件 -->
<value>classpath:jdbc.properties</value><!-- 定義spring-jdbc配置信息路徑 -->
</list>
</property>
</bean>

<!-- 自動掃描model,和service包(自動注入) -->
<context:component-scan base-package="com.ffcs.wlan.model,com.ffcs.wlan.,com.ffcs.wlan.service" />

屬性文件
[html] view plain
# Redis settings

redis.host=192.168.11.100
redis.port=6379
#redis.pass=hugsh

redis.maxIdle=25
redis.maxTotal=250
#redis.maxActive=600 invalid in2.4
redis.maxWait=1000
redis.testOnBorrow=true

Ⅳ java解析redis 的appendonly.aof文件

Redis有三種來類型的落地自文件:
數據文件-在配置中可設置其位置及文件名,默認文件名mp.rdb
日誌文件-在配置中也可以配置.當然,在你是以daemon方式運行的時候,這個值就不要設置為stdout了,這么設置會自動被換成/dev/null

Ⅳ java redis 實現消息隊列 需要做哪些配置

沒什麼問題啊,就是Jedis的lpush. 和rpop這兩個命令。用的時候就直接把java對象序列化成json。rpop的時候把拿到的json反序列化成java對象

Ⅵ redis.config配置文件詳解

配置文件units單位對大小寫不敏感。

可以理解為Java的import,可以配置多個其他的配置文件在該配置下。

在多長的事件內,操作了多少條命令,會持久化到.rdb文件或者.aof文件。

在這里可以給redis設置登錄的密碼。

Ⅶ java使用redis時不時的報沒有可用的鏈接

出現這種問題從以下幾個方面排查:
1、網路不穩定,這種情況只會出現在調用機器和redis伺服器不在同一台機器的情況,如果調用本機redis請忽略。
2、使用了連接池,並發較大,連接池配置的最大連接數過小,客戶端從連接池獲取連接時,如果沒有可用連接就阻塞當前線程直到有可用連接,等待時間超過配置的超時時間後會拋出連接超時異常。
3、同樣是使用連接池的情況,從連接池獲取連接,使用完成後沒有釋放連接,導致連接池鏈接耗盡。
4、還有可能是硬體性能瓶頸,比如單節點的redis,但是需要支持特別大的並發量,無論怎麼優化配置都是徒勞的,這種情況就需要考慮做讀寫分離,搭建redis集群等,

Ⅷ 怎麼在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數據property怎麼配置文件

redis.host=192.168.1.12//主機名
redis.port=6379//埠號
redis.username=hr//用戶名
redis.password=123//密碼

Ⅹ java jedis 鏈接不上redis 防護牆已經關閉 ip能ping通 埠號以開 配置文件也改過 就是連不上

你念罩看看你的redis配置文件,在配置文件里可以設棗高神置是否可以遠程訪問, 默認只能本地訪問。還有就是 你的redis 設置 安全登陸名了嗎。
或者telnet 一下 看看埠凳虧通不通?

閱讀全文

與java單節點redis配置文件相關的資料

熱點內容
怎麼做文件袋 瀏覽:434
緩存文件夾名字是什麼 瀏覽:347
dpkg如何查看文件路徑 瀏覽:314
設置安卓資源xml的步驟 瀏覽:305
vim怎麼修改文件 瀏覽:683
安卓游戲大型 瀏覽:933
powershell清空文件內容 瀏覽:409
字體在那個文件夾 瀏覽:342
蘋果4真機體驗 瀏覽:551
世界盃買在哪個app 瀏覽:631
魔力寶貝37版本 瀏覽:115
迷你編程的兌換碼是什麼 瀏覽:359
換一個文件櫃玻璃大概多少錢 瀏覽:971
什麼是代理網路 瀏覽:805
axure怎麼發布到手機app 瀏覽:227
如何做動漫視頻教程 瀏覽:331
蘋果公司企業架構 瀏覽:152
順豐錄音文件管理在哪裡 瀏覽:521
象山新建網站製作有哪些步驟 瀏覽:686
什麼app可以查化妝品的日期 瀏覽:174

友情鏈接