这里就不说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