目錄結構 E:\redis\redis64-3.0.501-6379 在此目錄下 新建一個txt @echo off redis-server.exe redis.windows.conf @pause 重命名爲startRedisServer.bat bat結尾的是windows可識別的批處理程序 能夠直接執行命令窗口的命令 @echo off DOS批處理中的, 不想顯示器顯示 dos批處理中 的 每條命令 , 加 echo off 「echo off」也是命令,它自己也會顯示,若是連這條也不顯示,就在前面加個「@」。 @自己就是一條指令,意思是跟在它後面的指令的執行及結果都不會在DOS界面上顯示出來 pause暫停命令 運行該命令時,將顯示消息:請按任意鍵繼續 . . .,通常用於看清楚屏幕上顯示的內容 而後新建一個txt,在E:\redis目錄下 @echo off cd redis64-3.0.501-6379 startRedisServer.bat 重命名爲start6379.cmd cmd開啓客戶端 @echo off cd redis64-3.0.501-6379 redis-cli @pause
設置服務命令 redis-server --service-install redis.windows-service.conf --loglevel verbose 卸載服務:redis-server --service-uninstall 開啓服務:redis-server --service-start 中止服務:redis-server --service-stop
經過右擊計算機---計算機管理--服務和應用程序--服務可查看多出了一個redis服務
首先在pom.xml文件添加依賴,由於我用的spring框架,因此導了一個spring-data-redis,jackson包是爲了能保持對象
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.6.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
#訪問地址 redis.host=127.0.0.1 #訪問端口 redis.port=6379 #注意,若是沒有password,此處不設置值,但這一項要保留 redis.password= #最大空閒數,數據庫鏈接的最大空閒時間。超過空閒時間,數據庫鏈接將被標記爲不可用,而後被釋放。設爲0表示無限制。 redis.maxIdle=300 #鏈接池的最大數據庫鏈接數。設爲0表示無限制 redis.maxActive=600 #最大創建鏈接等待時間。若是超過此時間將接到異常。設爲-1表示無限制。 redis.maxWait=1000 #在borrow一個jedis實例時,是否提早進行alidate操做;若是爲true,則獲得的jedis實例均是可用的; redis.testOnBorrow=true
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd "> <!-- 若是在多個spring配置文件中引入<context:property-placeholder .../>標籤, 最後須要加上ignore-unresolvable="true",不然會報錯。 ignore-unresolvable="true" 在加載第一個property-placeholder時出現解析不了的佔位符進行忽略掉 --> <!-- 鏈接池基本參數配置,相似數據庫鏈接池 --> <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true" /> <!-- redis鏈接池 --> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.maxActive}" /> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> </bean> <!-- 鏈接池配置,相似數據庫鏈接池 --> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.host}"></property> <property name="port" value="${redis.port}"></property> <!-- <property name="password" value="${redis.pass}"></property> --> <property name="poolConfig" ref="poolConfig"></property> </bean> <!--redis操做模版,使用該對象能夠操做redis --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" > <property name="connectionFactory" ref="jedisConnectionFactory" /> <!--若是不配置Serializer,那麼存儲的時候缺省使用String,若是用User類型存儲,那麼會提示錯誤User can't cast to String!! --> <property name="keySerializer" > <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="valueSerializer" > <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" /> </property> <property name="hashKeySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/> </property> <property name="hashValueSerializer"> <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/> </property> <!--開啓事務 --> <property name="enableTransactionSupport" value="true"></property> </bean > <!-- 下面這個是整合Mybatis的二級緩存使用的 <bean id="redisCacheTransfer" class="cn.qlq.jedis.RedisCacheTransfer"> <property name="jedisConnectionFactory" ref="jedisConnectionFactory" /> </bean>--> </beans>
package com.one.redis; import java.io.InputStream; import java.util.*; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import redis.clients.jedis.Jedis; @RunWith(SpringJUnit4ClassRunner.class) // @ContextConfiguration("classpath:applicationContext-*.xml") @ContextConfiguration(locations = {"classpath:applicationContext.xml"}) // 加載配置文件 @SuppressWarnings("all") public class RedisTest { // @Autowired // private RedisUtil redisUtil; // 1.導包 // applicationContext.xml <import resource="classpath*:conf/beans-*.xml"/> // beans-redis.xml // <bean id="redisTemplate" // class="org.springframework.data.redis.core.RedisTemplate" > @Resource(name = "redisTemplate") private RedisTemplate redisTemplate; @Test public void testSpringRedis() { // stringRedisTemplate的操做 // String讀寫 redisTemplate.delete("myStr"); redisTemplate.opsForValue().set("myStr", "skyLine"); System.out.println(redisTemplate.opsForValue().get("myStr")); System.out.println("---------------"); // org.springframework.data.redis.RedisConnectionFailureException: // Cannot get Jedis connection; nested exception is // redis.clients.jedis.exceptions.JedisConnectionException: Could not // get a resource from the pool // List讀寫 redisTemplate.delete("myList"); redisTemplate.opsForList().rightPush("myList", "T"); redisTemplate.opsForList().rightPush("myList", "L"); redisTemplate.opsForList().leftPush("myList", "A"); List<String> listCache = redisTemplate.opsForList().range("myList", 0, -1); for (String s : listCache) { System.out.println(s); } System.out.println("---------------"); // Set讀寫 redisTemplate.delete("mySet"); redisTemplate.opsForSet().add("mySet", "A"); redisTemplate.opsForSet().add("mySet", "B"); redisTemplate.opsForSet().add("mySet", "C"); redisTemplate.opsForSet().add("mySet", "C"); Set<String> setCache = redisTemplate.opsForSet().members("mySet"); for (String s : setCache) { System.out.println(s); } System.out.println("---------------");// ABC // Hash讀寫 redisTemplate.delete("myHash"); redisTemplate.opsForHash().put("myHash", "BJ", "北京"); redisTemplate.opsForHash().put("myHash", "SH", "上海"); redisTemplate.opsForHash().put("myHash", "HN", "河南"); Map<String, String> hashCache = redisTemplate.opsForHash().entries( "myHash"); for (Map.Entry entry : hashCache.entrySet()) { System.out.println(entry.getKey() + " - " + entry.getValue()); } System.out.println("---------------"); // Redis Incrby 命令將 key 中儲存的數字加上指定的增量值,若是 key 不存在,那麼 key 的值會先被初始化爲 0 // ,而後再執行 INCR 操做 double stringValueDouble = redisTemplate.opsForValue().increment( "doubleValue", 5); System.out.println("經過increment(K key, double delta)方法以增量方式存儲double值:" + stringValueDouble); // incrBy:將 key 所儲存的值加上給定的增量值(increment) 。 Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.incrBy("key3", 5); String v3 = jedis.get("key3"); System.out.println("結果:" + v3); } @Test public void delete() { redisTemplate.delete("myStr"); redisTemplate.delete("mySet"); redisTemplate.delete("myHash"); redisTemplate.delete("key3"); String str = "string";// 1.字符串 redisUtil.set("str", str); System.out.println(redisTemplate.opsForValue().get("str")); } @Autowired private RedisUtil redisUtil; @Test public void testSpringRedis2() { String str = "string";// 1.字符串 List<String> list = new ArrayList<String>();// list list.add("0"); list.add("中國"); list.add("2"); Set<String> set = new HashSet<String>();// set set.add("0"); set.add("中國"); set.add("2"); Map<String, Object> map = new HashMap();// map map.put("key1", "str1"); map.put("key2", "中國"); map.put("key3", "str3"); redisUtil.del("myStr", "str");// 刪除數據 // 1.字符串操做 System.out.println(str); redisUtil.set("str", str); redisUtil.expire("str", 120);// 指定失效時間爲2分鐘 String str1 = (String) redisUtil.get("str"); System.out.println(redisTemplate.opsForValue().get("str")); System.out.println("str1= " + str1); // 2.list操做 redisUtil.lSet("list", list); redisUtil.expire("list", 120);// 指定失效時間爲2分鐘 List<Object> list1 = redisUtil.lGet("list", 0, -1); System.out.println(list1); // 3.set操做 redisUtil.sSet("set", set); redisUtil.expire("set", 120);// 指定失效時間爲2分鐘 Set<Object> set1 = redisUtil.sGet("set"); System.out.println(set1); // 3.map操做 redisUtil.hmset("map", map); redisUtil.expire("map", 120);// 指定失效時間爲2分鐘 Map<Object, Object> map1 = redisUtil.hmget("map"); System.out.println(map1); } // TODO 哨兵集羣 // TODO CDN }
<properties> <junit.version>4.9</junit.version> <spring-version>3.1.2.RELEASE</spring-version> </properties> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-version}</version> </dependency>
參考https://blog.csdn.net/u010648555/article/details/79427606 這麼操做 1.先將E:\redis\redis64-3.0.501複製三份,分別命名爲redis64-3.0.501-6379,redis64-3.0.501-6379, redis64-3.0.501-6381 2.修改6380 6381下的redis.windows.conf文件,改爲各自對應的端口號,都作6379的從節點 port 6380 # slaveof <masterip> <masterport> slaveof 127.0.0.1 6379 3.經過上面介紹的cmd腳本形式啓動6379, 而後啓動6380,而後啓動6379客戶端,看下圖 命令info replication
能夠在redis解壓目錄下 經過redis-server.exe redis.windows.conf redis-server.exe sentinel.conf --sentinel 命令, 先啓動Redis集羣,再啓動哨兵實例 也能夠像以前那樣,寫個腳本執行 示例文件作了詳細的配置說明,啓動不了,估計是裏面哪裏配置有誤,懶得找了,用下面的簡化版sentinel.conf port 26379 sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel failover-timeout mymaster 10000 sentinel config-epoch mymaster 0 執行後你會發現該文件有變化,寫入了從服務器的信息 # Generated by CONFIG REWRITE dir "E:\\redis\\redis64-3.0.501-6379" sentinel leader-epoch mymaster 0 sentinel known-slave mymaster 127.0.0.1 6380 sentinel known-slave mymaster 127.0.0.1 6381 sentinel current-epoch 0 若是報Invalid argument during startup: Failed to open the .conf file: 通常都是配置文件的問題,把它從其餘地方關閉