zoukankan      html  css  js  c++  java
  • spring整合redis使用

    这里就不说redis官方提供jedis来操作redis

    讲spring整合了jedis之后的用法

    首先pom.xml先加依赖

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

    <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.2.RELEASE</version>
    </dependency>

    第一个是jedis依赖 第二个是spring整合jedis依赖

    然后是spring的配置文件

    <!--redis的配置 不是必须的 -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <!--最大空闲数 -->
    <property name="maxIdle" value="2" />
    <!--最大连接数 -->
    <property name="maxTotal" value="100" />
    <!--最大等待时间 -->
    <property name="maxWaitMillis" value="20000" />
    </bean>

    <!--redis连接工厂对象 通过这个对象 建立和redis的连接 -->
    <bean name="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <!--redis的IP地址 如果是本机就是127.0.0.1 -->
    <property name="hostName" value="192.168.205.129"></property>
    <!-- redis的端口 -->
    <property name="port" value="6379"></property>
    <!-- redis的密码 如果没有密码 可以省略 -->
    <property name="password" value="123456"></property>
    <!-- redis配置 不是必须的 -->
    <property name="poolConfig" ref="poolConfig"></property>
    </bean>

    <!--jdk序列化器 可以将存入redis中的值进行序列化 取出会进行反序列化 -->
    <bean name="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer">
    </bean>

    <!--String序列化器 可以将存入redis中的键 进行序列化 取出会进行反序列化 -->
    <bean name="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer">
    </bean>

    <!-- 配置redis模板对象 这是我们操作redis的对象 -->
    <bean name="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <!-- 传入redis连接工厂对象 -->
    <property name="connectionFactory" ref="connectionFactory"></property>
    <!-- 传入 键 序列化器 -->
    <property name="keySerializer" ref="stringRedisSerializer"></property>
    <!-- 传入 值 序列化器 -->
    <property name="valueSerializer" ref="jdkSerializationRedisSerializer"></property>
    </bean>

    以上就是spring整合jedis的配置  后续操作redis  只需要通过spring容器得到redisTemplate对象就可以了

    /**
     * 使用spring整合redis的 RedisTemplate对象
     * 保存对象到redis和从redis中读取对象
     * 
     * */
    public class Test1 {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext xml=new ClassPathXmlApplicationContext("classpath:spring/spring.xml");
              //从spring容器中获得redis模板对象 
            RedisTemplate<String,Object>  redisTemplate=xml.getBean("redisTemplate", RedisTemplate.class);
        
            //创建要保存的对象
         User u=new User();
         u.setUserID(1);
         u.setUserName("张三");
         u.setUserTime(new Date());
         
         //以字符串的格式  将对象序列化后存入redis
         redisTemplate.opsForValue().set("user:1", u);
         
         //从redis中取出指定键的值   并强转成User
         User user=(User)redisTemplate.opsForValue().get("user:1");
         
         
         System.out.println(user);
         
         
        }
    
    }

    我这是将一个对象 序列化后 以redis的字符串数据类型存储到redis中  然后通过key查询这个值 会自动反序列化  变成存入的对象

    这是因为在配置文件中配置了jdk序列化器 和string序列化器  存入redis时都会序列化转成字节数组 以字符串的形式存入,取出会反序列化构建成对象

    但是这样我们通过redis客户端查询时  值就是我们读不懂的字节数组  而且就算我们存入的是 普通字符串也会被序列化成字节数组

    如果没有存对象的需求  可以不配置jdk序列化器和string序列化器  这样只存取字符串 那通过客户端查询 也是可以看得懂的格式

    把我这个bean类也贴出来    注意 实现序列化接口是必须的  不然不能将这个类的对象序列化

    public class User implements Serializable {
        private static final long serialVersionUID = -8191663210611660061L;
        private Integer userID;
        private String userName;
        private Date   userTime;
        public Integer getUserID() {
            return userID;
        }
        public void setUserID(Integer userID) {
            this.userID = userID;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public Date getUserTime() {
            return userTime;
        }
        public void setUserTime(Date userTime) {
            this.userTime = userTime;
        }
        
        
        @Override
        public String toString() {
            return "User [userID=" + userID + ", userName=" + userName + ", userTime=" + userTime + "]";
        }
        
        
    
    }

    基本的使用差不多了  这个RedisTemplate 是对jedis的封装  

    Redis五大类型:字符串(String)、哈希/散列/字典(Hash)、列表(List)、集合(Set)、有序集合(sorted set)五种
    对应的RedisTemplate对象操作这五种数据类型的API 这都是获得redisTemplate里面的内部类对象 在具体的方法 可以自己百度 或者看名字猜 方法不多
    redisTemplate.opsForValue();//操作字符串
    redisTemplate.opsForHash();//操作hash
    redisTemplate.opsForList();//操作list
    redisTemplate.opsForSet();//操作set
    redisTemplate.opsForZSet();//操作有序set
  • 相关阅读:
    web前端优化之reflow(减少页面的回流)
    Javascript深拷贝
    MySQL 配置优化
    MySQ中Lmax_connections的合理设置
    Too many connections解决方案
    Linux 查看文件内容
    ON DUPLICATE KEY UPDATE
    jquery $.each 和for怎么跳出循环终止本次循环
    使用redis避免客户端频繁提交数据
    windows下为mysql添加日志
  • 原文地址:https://www.cnblogs.com/java888/p/10917915.html
Copyright © 2011-2022 走看看