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