真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

windows下如何把搭建rediscluster集群及配置springboot2.3.x

本篇文章為大家展示了windows下如何把搭建redis cluster集群及配置springboot2.3.x,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),路南網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:路南等地區(qū)。路南做網(wǎng)站價(jià)格咨詢(xún):028-86922220

1.軟件環(huán)境

Redis-x64-3.2.100.zip

Redis-trib.rb

rubyinstaller-2.3.3-x64.exe

2.解壓redis

把下載的redis解壓到D盤(pán)redis-cluster目錄,然后在復(fù)制出來(lái)五份,端口分別是

6379,6380,6381,6382,6383,6384

windows下如何把搭建redis cluster集群及配置springboot2.3.x

3.修改每個(gè)redis文件夾下的redis.windows.conf配置文件

進(jìn)入到每個(gè)文件夾下,找到redis.windows.conf,然后改動(dòng)這些參數(shù)

port 6379

cluster-enabled yes

cluster-config-file nodes-6379.conf

cluster-node-timeout 15000

appendonly yes

在每個(gè)文件夾下新建start.bat文件

title redis-6379

redis-server.exe redis.windows.conf

4.安裝 Ruby

redis的集群使用  ruby腳本編寫(xiě),所以系統(tǒng)需要有 Ruby 環(huán)境 

5.打開(kāi)cmd窗口執(zhí)行

gem install redis

windows下如何把搭建redis cluster集群及配置springboot2.3.x

6.啟動(dòng)每個(gè)redis,安裝集群腳本

把 redis-trib.rb拷貝到redis-cluster文件夾

redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384

--replicas 1 表示每個(gè)主數(shù)據(jù)庫(kù)擁有從數(shù)據(jù)庫(kù)個(gè)數(shù)為1。master節(jié)點(diǎn)不能少于3個(gè),所以我們用了6個(gè)redis

集群?jiǎn)?dòng)腳本.bat中的命令如下

start /d "D:\redis-cluster\Redis-6379" start.bat
start /d "D:\redis-cluster\Redis-6380" start.bat
start /d "D:\redis-cluster\Redis-6381" start.bat
start /d "D:\redis-cluster\Redis-6382" start.bat
start /d "D:\redis-cluster\Redis-6383" start.bat
start /d "D:\redis-cluster\Redis-6384" start.bat
ping /n 3 127.1>nul
ruby redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384

此操作要在第6步執(zhí)行完畢,集群創(chuàng)建好之后執(zhí)行,不然集群創(chuàng)建失敗,給集群設(shè)置密碼,密碼需要一致不然會(huì)失敗

masterauth redispassword
requirepass redispassword

7.和springboot2.3.x集成   POM.XML

    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.3.RELEASE
         
            
    
        org.springframework.boot
        spring-boot-starter-data-redis
    

application.yml配置

spring:
  redis:
    cluster:
      nodes: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384

 8.RedisUtil.java

package com.example.elasticsearchdemo.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Component
public class RedisUtils {

    @Autowired
    private RedisTemplate redisTemplate;


    /**
     * 寫(xiě)入緩存
     *
     * @param key
     * @param value
     * @return
     */
    public boolean set(final String key, Object value) {
        boolean result = false;
        try {
            ValueOperations operations = redisTemplate.opsForValue();
            operations.set(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }



    /**
     * 寫(xiě)入緩存設(shè)置時(shí)效時(shí)間
     *
     * @param key
     * @param value
     * @return
     */
    public boolean set(final String key, Object value, Long expireTime) {
        boolean result = false;
        try {
            ValueOperations operations = redisTemplate.opsForValue();
            operations.set(key, value);
            redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 批量刪除對(duì)應(yīng)的value
     *
     * @param keys
     */
    public void remove(final String... keys) {
        for (String key : keys) {
            remove(key);
        }
    }

    /**
     * 批量刪除對(duì)應(yīng)的value (帶事務(wù),業(yè)務(wù)代碼中用到事務(wù),則需用此方法)
     *
     * @param keys
     */
    public void removeTransactional(final String... keys) {
        for (String key : keys) {
            removeTransactional(key);
        }
    }

    /**
     * 批量刪除key
     *
     * @param pattern
     */
    public void removePattern(final String pattern) {
        Set keys = redisTemplate.keys(pattern);
        if (keys.size() > 0)
            redisTemplate.delete(keys);
    }

    /**
     * 刪除對(duì)應(yīng)的value
     *
     * @param key
     */
    public void remove(final String key) {
        if (exists(key)) {
            redisTemplate.delete(key);
        }
    }



    /**
     * 判斷緩存中是否有對(duì)應(yīng)的value
     *
     * @param key
     * @return
     */
    public boolean exists(final String key) {
        return redisTemplate.hasKey(key);
    }

    /**
     * 讀取緩存
     *
     * @param key
     * @return
     */
    public Object get(final String key) {
        ValueOperations operations = redisTemplate.opsForValue();
        return operations.get(key);
    }

    /**
     * 哈希 添加
     *
     * @param key
     * @param hashKey
     * @param value
     */
    public void hmSet(String key, Object hashKey, Object value) {
        HashOperations hash = redisTemplate.opsForHash();
        hash.put(key, hashKey, value);
    }

    /**
     * 哈希獲取數(shù)據(jù)
     *
     * @param key
     * @param hashKey
     * @return
     */
    public Object hmGet(String key, Object hashKey) {
        HashOperations hash = redisTemplate.opsForHash();
        return hash.get(key, hashKey);
    }

    /**
     * 列表添加
     *
     * @param k
     * @param v
     */
    public void lPush(String k, Object v) {
        ListOperations list = redisTemplate.opsForList();
        list.rightPush(k, v);
    }

    /**
     * 列表獲取
     *
     * @param k
     * @param l
     * @param l1
     * @return
     */
    public List lRange(String k, long l, long l1) {
        ListOperations list = redisTemplate.opsForList();
        return list.range(k, l, l1);
    }

    /**
     * 集合添加
     *
     * @param key
     * @param value
     */
    public void add(String key, Object value) {
        SetOperations set = redisTemplate.opsForSet();
        set.add(key, value);
    }

    /**
     * 集合獲取
     *
     * @param key
     * @return
     */
    public Set setMembers(String key) {
        SetOperations set = redisTemplate.opsForSet();
        return set.members(key);
    }

    /**
     * 有序集合添加
     *
     * @param key
     * @param value
     * @param scoure
     */
    public void zAdd(String key, Object value, double scoure) {
        ZSetOperations zset = redisTemplate.opsForZSet();
        zset.add(key, value, scoure);
    }

    /**
     * 有序集合獲取
     *
     * @param key
     * @param scoure
     * @param scoure1
     * @return
     */
    public Set rangeByScore(String key, double scoure, double scoure1) {
        ZSetOperations zset = redisTemplate.opsForZSet();
        return zset.rangeByScore(key, scoure, scoure1);
    }


    /**
     * 加鎖
     *
     * @param key
     * @return
     */
    public boolean tryLock(String key) {
        try {
            long currTime = System.currentTimeMillis();
            //加鎖成功
            return redisTemplate.opsForValue().setIfAbsent(key, currTime);
        } finally {
            redisTemplate.expire(key, 5, TimeUnit.SECONDS);
        }
    }

}

9.RedisController

package com.test;

import com.test.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class RedisController {

    @Autowired
    private RedisUtils redisUtils;

    @RequestMapping("/redis")
    public String redis(String key){
        redisUtils.set(key,"sdfsdfsdf");
        return "OK-"+key;
    }

}

用工具連接每個(gè)redis,可以看到每個(gè)redis里面都有key和value了。redis cluster環(huán)境搭建成功

【設(shè)置redis最大可使用內(nèi)存】

maxmemory 100mb

【達(dá)到最大內(nèi)存的策略】

maxmemory-policy noeviction  拒絕寫(xiě)入

【可能出現(xiàn)的坑】

在執(zhí)行set操作的時(shí)候 【error】CLUSTERDOWN Hash slot not served

沒(méi)有分配槽,因?yàn)閞edis集群要分配16384個(gè)槽來(lái)儲(chǔ)存數(shù)據(jù),那么沒(méi)有分配槽則報(bào)如上錯(cuò)誤

什么原因呢?

原因是最后使用ruby來(lái)搭建集群的時(shí)候錯(cuò)誤操作

redis-trib.rb create --replicas 1 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384

上面執(zhí)行完時(shí)會(huì)出現(xiàn)提示

Can I set the above configuration? (type 'yes' to accept): 

你需要輸入yes,而并非縮寫(xiě) y

就是這個(gè)錯(cuò)誤引起的分配槽失敗。

上述內(nèi)容就是windows下如何把搭建redis cluster集群及配置springboot2.3.x,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


新聞標(biāo)題:windows下如何把搭建rediscluster集群及配置springboot2.3.x
路徑分享:http://weahome.cn/article/iidcdp.html

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部