zoukankan      html  css  js  c++  java
  • windows创建测试Redis集群,和Spring集成,配置缓存

    创建集群

    1.你需要先有6个Redis运行实例:

    创建方法。

    a.简单暴力。把程序复制6份。分别放置到6个文件夹中。

    7001~7006将是这6个进程的端口号。修改各自文件夹下的redis.windows.conf文件,

    port 后面的XXXX就是7001~7006当中的某一个,分别对应文件夹。

    port XXXX
    cluster-enabled yes

    使用下面命令启动6个服务器,可写到bat脚本中。 

    redis-server redis.windows.conf

    b为了以后使用方便,可以注册成服务。

    redis-server --service-install redis.windows.conf --service-name 你的服务名称

    2.下载安装Ruby,地址

    下载redis gem,地址

    https://rubygems.org/gems/redis/versions

    选择一个Version,在右下角下载,到C盘,安装命令

    gem install C:
    edis-4.0.2.gem

    3.下载集群安装脚本

    到http://download.redis.io/releases/下载redis的源码包,比如3.2.0版本的,在源码包的src文件夹下找到一个

    叫redis-trib.rb的文件。

    4,创建集群。

    创建之前需要启动服务器。创建命令,在redis-trib文件的盘符下,

    C:>redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

    创建3主3从的集群。

    5测试集群。

    redis-cli -c  -h 127.0.0.1 -p 7002

    连接集群中任意一个即可。

    和Spring整合

     单机配置和测试

        <!-- 单机版 -->
        <bean id="redisClient" class="redis.clients.jedis.JedisPool">
            <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
            <constructor-arg name="port" value="6379"></constructor-arg>
        </bean>
        @Test
        public void testSpringJedis() {
            ApplicationContext aContext=new ClassPathXmlApplicationContext("classpath:applicationContext-jedis.xml");
            JedisPool bean = (JedisPool)aContext.getBean("redisClient");
            Jedis jd =bean.getResource();
            String string= jd.get("a");
            System.out.println(string);
            jd.close();
            bean.close();
        }

    集群配置和测试

        <!-- 集群版 -->
        <bean id="redisCluster" class="redis.clients.jedis.JedisCluster">
            <constructor-arg name="nodes">
                <set>
                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
                        <constructor-arg name="port" value="7001"></constructor-arg>
                    </bean>
                                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
                        <constructor-arg name="port" value="7002"></constructor-arg>
                    </bean>
                                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
                        <constructor-arg name="port" value="7003"></constructor-arg>
                    </bean>
                                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
                        <constructor-arg name="port" value="7004"></constructor-arg>
                    </bean>
                                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
                        <constructor-arg name="port" value="7005"></constructor-arg>
                    </bean>
                                    <bean class="redis.clients.jedis.HostAndPort">
                        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
                        <constructor-arg name="port" value="7006"></constructor-arg>
                    </bean>
                </set>
            </constructor-arg>
        </bean>
        @Test
        public void testSpringJedisCluster() {
            ApplicationContext aContext=new ClassPathXmlApplicationContext("classpath:applicationContext-jedis.xml");
            JedisCluster jc = (JedisCluster)aContext.getBean("redisCluster");
            String value=jc.get("a");
            System.out.println(value);
            jc.close();
        }

    配置缓存

    关键说明:Redis缓存使用一般在Service层,缓解Service层访问数据库的压力。

    使用HashMap,比如ContentCategory表,建立hashkey ContentCategoryIndex,然后使用表中的各个ID作为HashMap的子key。

    该Service层需要操作Redis数据库,因此需要一个Jedis Dao的类。

    package com.taotao.dao;
    
    public interface JedisClient {
        String get(String key);
        String set(String key,String value);
        String hget(String hkey,String key);
        Long hset(String hkey,String key,String value);
        long incr(String key);
        long expire(String key,int second);
        long ttl(String key);
        long del(String key);
    }
    
    
    public class JedisClientImpl implements JedisClient {
        @Autowired
        private JedisPool jedisPool;
        @Override
        public String get(String key) {
            Jedis jedis = jedisPool.getResource();
            String string = jedis.get(key);
            jedis.close();
            return string;
        }
    
        @Override
        public String set(String key, String value) {
            Jedis jedis = jedisPool.getResource();
            String string = jedis.set(key, value);
            jedis.close();
            return string;
    
        }
    
        @Override
        public String hget(String hkey, String key) {
            Jedis jedis = jedisPool.getResource();
            String string = jedis.hget(hkey, key);
            jedis.close();
            return string;
    
        }
    
        @Override
        public Long hset(String hkey, String key, String value) {
            Jedis jedis = jedisPool.getResource();
            Long result = jedis.hset(hkey, key, value);
            jedis.close();
            return result;
    
    
        }
    
        @Override
        public long incr(String key) {
            Jedis jedis = jedisPool.getResource();
            Long result = jedis.incr(key);
            jedis.close();
            return result;
    
        }
    
        @Override
        public long expire(String key, int second) {
            Jedis jedis = jedisPool.getResource();
            Long result = jedis.expire(key,second);
            jedis.close();
            return result;
    
        }
    
        @Override
        public long ttl(String key) {
            Jedis jedis = jedisPool.getResource();
            Long result = jedis.ttl(key);
            jedis.close();
            return result;
    
        }
    
        @Override
        public long del(String key) {
            // TODO Auto-generated method stub
            Jedis jedis=jedisPool.getResource();
            long result=jedis.del(key);
            jedis.close();
            return result;
        }
    
    }

    注意:集群版DAO的书写,不需要close

    public class JedisClientCluster implements JedisClient {
    
        @Autowired
        private JedisCluster jedisCluster;
        
        @Override
        public String get(String key) {
            return jedisCluster.get(key);
        }

    关键:在上述的applicationContext-jedis.xml文件中,

    添加

    <bean id="JedisClient" class="com.taotao.dao.JedisClientImpl"></bean>

    服务层的代码,红色是配置redis缓存所添加的代码。

    @Service
    public class ContentServiceImpl implements ContentService {
        @Autowired
        private TbContentMapper contentMapper;
        @Autowired
        private JedisClient jedisClient;
        @Value("${INDEX_CONTENT_REDIS_KEY}")
        private String content_index;
        @Override
        public List<TbContent> getContentList(long contentCid) {
            // TODO Auto-generated method stub
            //retrieve cache
            try {
                String result=jedisClient.hget(content_index, contentCid+"");
                if(result!=null) {
                    List<TbContent> resultList = JsonUtils.jsonToList(result, TbContent.class);
                    return resultList;
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            //根据内容分类id查询内容列表
            TbContentExample example = new TbContentExample();
            Criteria criteria = example.createCriteria();
            criteria.andCategoryIdEqualTo(contentCid);
            //执行查询
            List<TbContent> list = contentMapper.selectByExample(example);
            
            //save cache
            try {
                String cacheString= JsonUtils.objectToJson(list);
                jedisClient.hset(content_index, contentCid+"", cacheString);
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            return list;
    
        }
    
    }
  • 相关阅读:
    68.css 3d 卡片翻转效果
    67.canvas绘制常规图形
    66.环形加载动画(canvas/svg)
    65.canvas画一个表(2)
    64.canvas画一个表(1)
    63.实现一个拖拽排序
    62.textarea 自适应高度
    co co a P o a d s的使用
    在MJRefresh的基础上实现动画的自定义和自动下拉刷新
    iOS26 AFNetworking
  • 原文地址:https://www.cnblogs.com/legion/p/9707538.html
Copyright © 2011-2022 走看看