• spring集成jedis简单实例


    jedis是redis的java客户端,spring将redis连接池作为一个bean配置。

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

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

    maven导入相关包:

        <!-- 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.xml为:

    #最大分配的对象数
    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;
        }
  • 相关阅读:
    java算法
    2012 要找回曾经的忘我的激情
    啊啊啊
    利用ORACLE JOB 模拟多线程应用
    有没有一种数据库叫思科
    且行好事,莫问前程
    女人浪漫的好点子
    What is the difference between interface and abstract class
    优秀是一种习惯
    C#判断ContextMenuStrip右键菜单的来源(从哪个控件弹出来的) (转载)
  • 原文地址:https://www.cnblogs.com/red-code/p/6657517.html
Copyright © 2020-2023  润新知