zoukankan      html  css  js  c++  java
  • eclipse spring3.X redis 整合-配置

    花了一天时间折腾redis的配置

    用到的jar

    spring 3.1.1

    aopalliance-1.0.jar

    commons-pool2-2.3.jar

    jedis-2.7.2.jar

    spring-data-redis-1.6.6.RELEASE.jar

    jedis和commons-pool2有版本依赖关系,所以要保证和上面一致

    spring-data-redis版本 和 spring框架的版本也有依赖关系 所以要保证和上面一致

    applicationContext-redis.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:aop="http://www.springframework.org/schema/aop"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    
    
       
        <description>Redis configuration</description>
    
     <!-- 载入redis配置参数 -->
        <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>
         
         <!-- redis config start -->
       <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> 
    
       
              <property name="maxIdle" value="${redis.pool.maxIdle}"></property> 
              <property name="maxTotal" value="${redis.pool.maxActive}" />
          
              <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" />
              <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
              <!--
              <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}"></property> 
              <property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}"></property> 
              <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}"></property>-->
        </bean> 
         
         <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy"> 
          <property name="poolConfig" ref="jedisPoolConfig"></property> 
          <property name="hostName" value="${redis.host}"></property> 
          <property name="port" value="${redis.port}"></property> 
           <property name="password" value="${redis.password}"></property> 
          <property name="timeout" value="${redis.timeout}"></property> 
          <!--是否使用連接池 <property name="usePool" value="${redis.usePool}"></property> -->
     </bean> 
     
    <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
            <property name="connectionFactory" ref="jedisConnectionFactory" />
            <property name="keySerializer">
                <bean
                    class="org.springframework.data.redis.serializer.StringRedisSerializer" />
            </property>
            <property name="valueSerializer">
                <bean
                    class="org.springframework.data.redis.serializer.StringRedisSerializer">
                </bean>
            </property>
        </bean>
     
    
    
     
     
     
    
    
     
        <!-- redis config end -->
        
        
    </beans>

     redis参数配置文件

    #redis pool config
    redis.pool.maxActive=200
    redis.pool.maxIdle=100
    redis.pool.maxWaitMillis=100
    redis.pool.testOnBorrow=true
    
    #redis config
    redis.host=192.168.42.129
    redis.port=6379
    redis.timeout=2000
    redis.password=qweasd
    redis.dbindex=8
    redis.usePool=1
    redis.default.expire=1800000

    测试代码

    以下是网上的的教程==============================

    • 使用redis基本测试

    maven导包

          <dependency>
              <groupId>redis.clients</groupId>
              <artifactId>jedis</artifactId>
              <version>2.9.0</version>
          </dependency>

    基本连接

    复制代码
    public static void main(String[] args) {
            // 连接本地的 Redis 服务
            Jedis jedis = new Jedis("localhost");
            System.out.println("连接成功");
            // 查看服务是否运行
            System.out.println("服务正在运行: " + jedis.ping());
        }
    复制代码

    存入string类型的值

    public static void main(String[] args) {
            // 连接本地的 Redis 服务
            Jedis jedis = new Jedis("localhost");
            //使用字符串string存值
            jedis.set("城市", "南京");
        }

    在图形化redis客户端可以看到,存值成功

    image

    string类型取值

    Jedis jedis = new Jedis("localhost");
            String city = jedis.get("城市");

    存入list集合类型的值

    复制代码
    public static void main(String[] args) {
            // 连接本地的 Redis 服务
            Jedis jedis = new Jedis("localhost");
            //使用字符串list存值
            jedis.lpush("城市", "南京");
            jedis.lpush("城市", "上海");
            jedis.lpush("城市", "苏州");
            jedis.lpush("城市", "北京");
            jedis.lpush("城市", "南通");
        }
    复制代码

    图形化界面展示效果

    image

    list集合取值

    复制代码
    public static void main(String[] args) {
            // 连接本地的 Redis 服务
            Jedis jedis = new Jedis("localhost");
            //list集合取值,这里注意的是,100的位置是结束的角标,如果大了没事,小了的话就会缺
            List<String> arr = jedis.lrange("城市", 0, 100);
            System.out.println(arr.size());
            for (String string : arr) {
                System.out.println(string);
            }
        }
    复制代码

    存入Map的值

    map类型存值又叫Redis hash ,是一个string类型的field和value的映射表

    复制代码
    public static void main(String[] args) {
            //连接本地的jedis服务器
            Jedis jedis=new Jedis("localhost");
            
            //Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
            //这里要求的是map必须是key和value都是string类型的
            Map<String, String> map=new HashMap<>();
            map.put("name", "小明");
            map.put("age", "13");
            map.put("sex", "男");
            map.put("height", "174");
            
            //调用jedis的hmset(存入hash map)的方法将map的键值对存进去
            jedis.hmset("people", map);
        }
    复制代码

    图形化客户端界面显示为:

    image

    map取值

    复制代码
    public static void main(String[] args) {
            //连接本地的jedis服务器
            Jedis jedis=new Jedis("localhost");
            
            //新建一个string类型的数组,用于存当时存入redis的map的key值
            String[] arr=new String[4];
            arr[0]="name";
            arr[1]="age";
            arr[2]="sex";
            arr[3]="height";
            //利用jedis的hmget方法,从数据库中依次取出对应的map的key值
            List<String> list = jedis.hmget("people",arr);
            for (int i = 0; i < arr.length; i++) {
                System.out.println("存入键值对为:"+arr[i]+"--"+list.get(i));
            }
            
        }
    复制代码

    结果为:

    存入键值对为:name--小明
    存入键值对为:age--13
    存入键值对为:sex--男
    存入键值对为:height--174

    存入Set的值

    Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

    存入代码:

    复制代码
    public static void main(String[] args) {
            //连接本地的jedis服务器
            Jedis jedis=new Jedis("localhost");
            
            //使用list存入数据
            List<String> list=new ArrayList<>();
            list.add("北京");
            list.add("南京");
            list.add("上海");
            list.add("北京");
            list.add("北京");
            list.add("上海");
            list.add("苏州");
            list.add("南京");
            //打印源数据
            System.out.println("源数据为"+list);
            
            //因为jedis的sadd的方法,存入的是一个数组对象或者多数据,所有将集合对象转换成数组对象
            String[] arr=new String[list.size()];
            for (int i = 0; i < arr.length; i++) {
                arr[i]=list.get(i);
            }
            //调用sadd方法存入数据库
            jedis.sadd("city", arr);
            
        }
    复制代码

    原来数据为:

    源数据为[北京, 南京, 上海, 北京, 北京, 上海, 苏州, 南京]

    redis数据库图形化客户端显示

    image

    可见,存入后,是把数据去重之后存储的.

    set数据的取出

    复制代码
    public static void main(String[] args) {
            //连接本地的jedis服务器
            Jedis jedis=new Jedis("localhost");
            
            //调用jedis的smembers方法,获取所有的set集合
            Set<String> smembers = jedis.smembers("city");
            
            System.out.println(smembers);
        }
    复制代码

    控制台结果为:

    [北京, 上海, 南京, 苏州]

    存入sortset的值

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

    存入代码:

    复制代码
    public static void main(String[] args) {
            //连接本地的jedis服务器
            Jedis jedis=new Jedis("localhost");
            
            Map<String, Double> map=new HashMap<>();
            map.put("北京", 1.0);
            map.put("北京", 2.0);
            map.put("南京", 3.0);
            map.put("上海", 4.0);
            map.put("上海", 5.0);
            map.put("南京", 6.0);
            
            //调用jedis的zadd方法存入
            jedis.zadd("city", map);
        }
    复制代码

    图形化客户端界面:

    image

    南京在放入map时候,是在上海之前,可是最后score却取的是后面的一个.可见,如果有重复的数据产生的话,去重是将前面序号的重复去掉

    取出代码:

    复制代码
    public static void main(String[] args) {
            //连接本地的jedis服务器
            Jedis jedis=new Jedis("localhost");
            
            //索引在0,到10之间的,分数由高到底的取出所有的集合
            Set<String> zrevrange = jedis.zrevrange("city", 0, 10);
            System.out.println(zrevrange);
            
        }
    复制代码

    控制台输出:

    [南京, 上海, 北京]
    • 使用redis的基于spring测试

    使用spring整合

    applicationContext.xml中配置

    名称空间:

    xmlns:cache="http://www.springframework.org/schema/cache"    
        http://www.springframework.org/schema/cache
        http://www.springframework.org/schema/cache/spring-cache.xsd">

    配置文件:

    复制代码
    <!-- spring管理redis缓存管理器 -->
        <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
            <constructor-arg index="0" ref="redisTemplate" />
        </bean>
    
        <cache:annotation-driven cache-manager="redisCacheManager" />
    
        <!-- jedis 连接池配置 -->
        <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxIdle" value="300" />
            <property name="maxWaitMillis" value="3000" />
            <property name="testOnBorrow" value="true" />
        </bean>
    
        <!-- redis的连接工厂 -->
        <bean id="connectionFactory"
            class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
            p:host-name="localhost" p:port="6379" p:pool-config-ref="poolConfig"
            p:database="0" />
    
        <!-- spring data 提供 redis模板  -->
        <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
            <property name="connectionFactory" ref="connectionFactory" />
            <property name="keySerializer">
                <bean
                    class="org.springframework.data.redis.serializer.StringRedisSerializer" />
            </property>
            <property name="valueSerializer">
                <bean
                    class="org.springframework.data.redis.serializer.StringRedisSerializer">
                </bean>
            </property>
        </bean>
    复制代码

    在需要使用的service类中,使用注解

        //自动注入redis模板
        @Autowired
        private RedisTemplate<String, String> redisTemplate;

    使用spring整合string类型的值

    复制代码
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class RedisTest {
        
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
        
        @Test
        public void Test01(){
            //通过模板,获取到String类型的redis对象
            ValueOperations<String, String> redisString = redisTemplate.opsForValue();
            
            //使用set方法,保存key和value的值
            redisString.set("city", "南京");
            
            //使用get(key)的方法获取到city对应的值
            String string = redisString.get("city");
            System.out.println(string);
        }
        
    }
    复制代码

    图形化界面:

    image

    控制台输出:

    image

    使用spring整合list类型的值

    复制代码
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class RedisTest {
        
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
        
        @Test
        public void Test01(){
            
            //通过模板获取list类型的redis
            ListOperations<String, String> redisList = redisTemplate.opsForList();
            
            //通过key依次插入数据
            redisList.leftPush("city", "南京");
            redisList.leftPush("city", "上海");
            redisList.leftPush("city", "北京");
            redisList.leftPush("city", "上海");
            redisList.leftPush("city", "南京");
            
            //查找索引范围内的所有数据
            List<String> range = redisList.range("city", 0, 10);
            System.out.println(range);
            
        }
    
    }
    复制代码

    图形化客户端:

    image

    结果:

    [南京, 上海, 北京, 上海, 南京]

    使用spring整合Hash类型的值

    复制代码
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class RedisTest {
        
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
        
        @Test
        public void Test01(){
            
            //通过模板对象,获取到redis的hash类型的对象
            HashOperations<String, Object, Object> redisMap = redisTemplate.opsForHash();
            
            //建立map集合
            Map<String, String> map=new HashMap<>();
            
            map.put("name", "小明");
            map.put("age", "18");
            map.put("length", "175");
            
            //存储hash对象
            redisMap.putAll("people", map);
            
            //获取数据库中存储的集合的key
            Set<Object> keys = redisMap.keys("people");
            //遍历key集合,获取到map中所有的value值
            for (Object key : keys) {
                Object value = redisMap.get("people", key);
                System.out.println(key+":"+value);
            }
        }
    }
    复制代码

    图形化客户端界面:

    image

    取值后的控制台界面:

    name:小明
    length:175
    age:18

    使用spring整合Set类型的值

    代码示例:

    复制代码
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class RedisTest {
        
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
        
        @Test
        public void Test01(){
            //通过redis模板,创建set类型的redis对象
            SetOperations<String, String> redisSet = redisTemplate.opsForSet();
            
            //新建数组,赋值
            String[] arr=new String[5];
            arr[0]="南京";
            arr[1]="北京";
            arr[2]="南京";
            arr[3]="上海";
            arr[4]="北京";
            
            //调用set的add方法,存入key和数组
            redisSet.add("city", arr);
            
            //通过redis的获取成员方法,利用key获取到set集合
            Set<String> members = redisSet.members("city");
            System.out.println(members);
            
        }
    
    }
    复制代码

    图形化数据客户端界面:

    image

    控制台界面:

    [北京, 南京, 上海]

    由此可见,set类型的redis不是固定顺序的.

    使用spring整合sortSet类型的值

    由于set类型是不具有顺序的,而sortSet类型则具有顺序

    代码示例:

    复制代码
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class RedisTest {
        
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
        
        @Test
        public void Test01(){
            
            //使用模板创建ZSet对象
            ZSetOperations<String, String> redisZSet = redisTemplate.opsForZSet();
            
            //存值,存value的同时,还加上顺序
            redisZSet.add("city", "南京", 1);
            redisZSet.add("city", "北京", 2);
            redisZSet.add("city", "上海", 3);
            redisZSet.add("city", "南京", 4);
            redisZSet.add("city", "上海", 5);
            redisZSet.add("city", "南京", 6);
            
            //获取范围顺序里面的值
            Set<String> rangeByScore = redisZSet.rangeByScore("city", 1, 10);
            System.out.println(rangeByScore);
            
        }
    
    }
    复制代码

    图形化客户端界面:

    image

    控制台数据:

  • 相关阅读:
    【黑金视频连载】FPGA NIOSII视频教程(08)RTC实验
    【黑金研发】【ABS05】函数信号发生器进行中…
    【黑金视频连载】NIOSII视频教程(05)电平中断实验
    【新品发布】正式发布 [ ABS05 ] 函数信号发生器
    【黑金视频连载】FPGA NIOSII视频教程(13)IIC实验实验
    【黑金视频连载】NIOS II视频教程(01)软件安装
    解决input设置背景后,在ie7下浏览内容过长背景跟着滚动
    命令开启数据库服务器
    装win7 旗舰版的蛋疼经历,装后疑难杂症及解决办法
    海量jquery插件
  • 原文地址:https://www.cnblogs.com/cfas/p/9351597.html
Copyright © 2011-2022 走看看