• Spring集成Jedis(不依赖spring-data-redis)(单机/集群模式)(待实践)


    Jedis是Redis的Java客户端,Spring将Jedis连接池作为一个Bean来配置。如果在Spring Data的官网上可以发现,Spring Data Redis已经将Jedis集成进去了。

    Jedis连接池分为两种:

    一种是“redis.clients.jedis.ShardedJedisPool”,这是基于hash算法的一种分布式集群Redis客户端连接池。

    另一种是“redis.clients.jedis.JedisPool”,这是单机环境适用的Redis连接池。

    下面是介绍详细的集成方式:

    POM:

        <!-- Redis依赖包 -->
        <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>2.9.0</version>
        </dependency>

    ShardedJedisPool是Redis集群客户端的对象池,可以通过他来操作ShardedJedis,下面是ShardedJedisPool的XML配置,spring-jedis.xml:

    <?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:context="http://www.springframework.org/schema/context"
           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">
    
        <!-- 引入jedis的properties配置文件 -->
        <!--如果你有多个数据源需要通过<context:property-placeholder管理,且不愿意放在一个配置文件里,那么一定要加上ignore-unresolvable=“true"-->
        <context:property-placeholder location="classpath:properties/redis.properties" ignore-unresolvable="true" />
    
        <!--shardedJedisPool的相关配置-->
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <!--新版是maxTotal,旧版是maxActive-->
            <property name="maxTotal">
                <value>${redis.pool.maxActive}</value>
            </property>
            <property name="maxIdle">
                <value>${redis.pool.maxIdle}</value>
            </property>
            <property name="testOnBorrow" value="true"/>
            <property name="testOnReturn" value="true"/>
        </bean>
    
        <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"  scope="singleton">
            <constructor-arg index="0" ref="jedisPoolConfig" />
            <constructor-arg index="1">
                <list>
                    <bean class="redis.clients.jedis.JedisShardInfo">
                        <constructor-arg name="host" value="${redis.uri}" />
                    </bean>
                </list>
            </constructor-arg>
        </bean>
    </beans>

    下面是单机环境下Redis连接池的配置:

    <?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:context="http://www.springframework.org/schema/context"
           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">
    
        <!-- 引入jedis的properties配置文件 -->
        <!--如果你有多个数据源需要通过<context:property-placeholder管理,且不愿意放在一个配置文件里,那么一定要加上ignore-unresolvable=“true"-->
        <context:property-placeholder location="classpath:properties/redis.properties" ignore-unresolvable="true" />
    
        <!--Jedis连接池的相关配置-->
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <!--新版是maxTotal,旧版是maxActive-->
            <property name="maxTotal">
                <value>${redis.pool.maxActive}</value>
            </property>
            <property name="maxIdle">
                <value>${redis.pool.maxIdle}</value>
            </property>
            <property name="testOnBorrow" value="true"/>
            <property name="testOnReturn" value="true"/>
        </bean>
    
        <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
            <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
            <constructor-arg name="host" value="${redis.host}" />
            <constructor-arg name="port" value="${redis.port}" type="int" />
            <constructor-arg name="timeout" value="${redis.timeout}" type="int" />
            <constructor-arg name="password" value="${redis.password}" />
            <constructor-arg name="database" value="${redis.database}" type="int" />
        </bean>
    </beans>

    对应的classpath:properties/redis.properties为:

    #最大分配的对象数
    redis.pool.maxActive=200
    #最大能够保持idel状态的对象数
    redis.pool.maxIdle=50
    redis.pool.minIdle=10
    redis.pool.maxWaitMillis=20000
    #当池内没有返回对象时,最大等待时间
    redis.pool.maxWait=300
    
    #格式:redis://:[密码]@[服务器地址]:[端口]/[db index]
    redis.uri = redis://:12345@127.0.0.1:6379/0
    
    redis.host = 127.0.0.1
    redis.port = 6379
    redis.timeout=30000
    redis.password = 12345
    redis.database = 0

    二者操作代码类似,都是先注入连接池,然后通过连接池获得Jedis实例,通过实例对象操作Redis。

    ShardedJedis操作:

        @Autowired
        private ShardedJedisPool shardedJedisPool;//注入ShardedJedisPool
    
        @RequestMapping(value = "/demo_set",method = RequestMethod.GET)
        @ResponseBody
        public String demo_set(){
            //获取ShardedJedis对象
            ShardedJedis shardJedis = shardedJedisPool.getResource();
            //存入键值对
            shardJedis.set("key1","hello jedis");
            //回收ShardedJedis实例
            shardJedis.close();
    
            return "set";
        }
    
        @RequestMapping(value = "/demo_get",method = RequestMethod.GET)
        @ResponseBody
        public String demo_get(){
            ShardedJedis shardedJedis = shardedJedisPool.getResource();
            //根据键值获得数据
            String result = shardedJedis.get("key1");
            shardedJedis.close();
    
            return result;
        }

    Jedis操作:

        @Autowired
        private JedisPool jedisPool;//注入JedisPool
    
        @RequestMapping(value = "/demo_set",method = RequestMethod.GET)
        @ResponseBody
        public String demo_set(){
            //获取ShardedJedis对象
            Jedis jedis = jedisPool.getResource();
            //存入键值对
            jedis.set("key2","hello jedis one");
            //回收ShardedJedis实例
            jedis.close();
    
            return "set";
        }
    
        @RequestMapping(value = "/demo_get",method = RequestMethod.GET)
        @ResponseBody
        public String demo_get(){
            Jedis jedis = jedisPool.getResource();
            //根据键值获得数据
            String result = jedis.get("key2");
            jedis.close();
    
            return result;
        }

    参考:

    http://www.cnblogs.com/red-code/p/6657517.html(以上内容转自此篇文章)

    http://blog.csdn.net/javaloveiphone/article/details/52355180

    http://blog.csdn.net/w410589502/article/details/54341040

    http://blog.csdn.net/tomli2017/article/details/69929371

    http://www.cnblogs.com/hz-cww/p/6030504.html

    http://blog.csdn.net/wang_keng/article/details/51753637

  • 相关阅读:
    2020.06.09 手写数字识别-小数据集
    2020.6.1 深度学习-卷积
    2020.05.22 垃圾邮件分类2
    2020.05.08 分类与监督学习,朴素贝叶斯分类算法
    2020.04.27 主成分分析
    2020.04.27 特征选择
    2020.04.26 逻辑回归实践
    2020.04.24 逻辑归回
    2020.04.21 线性回归算法
    15 手写数字识别-小数据集
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7628866.html
Copyright © 2020-2023  润新知