Maven中Spring-Data-Redis存储对象(redisTemplate)

来源:互联网 发布:正版的windows xp系统 编辑:程序博客网 时间:2024/05/18 02:58

Redis是一种nosql数据库,在开发中常用做缓存。Jedis是Redis在java中的redis- client.在此之前,希望已经了解redis的基本使用和Maven的使用。建立Maven Project之后,在POM.xml中添加jedis和spring-data-redis的依赖如下:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.0.0</version><type>jar</type><scope>compile</scope></dependency><!-- spring-redis --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.0.0.RELEASE</version></dependency>

Redis连接数据库参数如下:applicationContext-redis.properties

#redis configredis.pool.maxActive=100redis.pool.maxIdle=20redis.pool.maxWait=1000redis.pool.testOnBorrow=trueredis.hostname=localhostredis.port=6379redis.password=

在上下文配置中使用key-value读取方式读取properties中的值:

<!-- Jedis 连接池配置--><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxActive" value="${redis.pool.maxActive}" /><property name="maxIdle" value="${redis.pool.maxIdle}" /><property name="maxWait" value="${redis.pool.maxWait}" /><property name="testOnBorrow" value="${redis.pool.testOnBorrow}" /></bean><!-- Jedis ConnectionFactory 数据库连接配置--><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><property name="hostName" value="${redis.hostname}" /><property name="port" value="${redis.port}" /><property name="password" value="${redis.password}" /><property name="poolConfig" ref="jedisPoolConfig" /></bean><!—- redisTemplate配置,redisTemplate是对Jedis的对redis操作的扩展,有更多的操作,封装使操作更便捷 --><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"                                   p:connection-factory-ref="jedisConnectionFactory" />

上面redisTemplate已经基本配置完成。

接下来创建User类,必须实现或者间接实现Serializable接口:

Redis存储对象是使用序列化,spring-data-redis已经将序列化的功能内置,不需要我们去管,我们只需要调用api就可以使用。SerialVersionUID字段对序列化扩展有用,为了以后扩展或者缩减字段时不会造成反序列化出错。

public class User implements Serializable {private static final long serialVersionUID = -7898194272883238670L;public static final String OBJECT_KEY = "USER";public User() {}public User(String id) {}public User(String id, String name) {this.id = id;this.name = name;}private String id;private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String toString() {return "User [id=" + id + ", name=" + name + "]";}public String getKey() {return getId();}public String getObjectKey() {return OBJECT_KEY;}}

创建userService类来操作redis增删查改缓存对象。

public class UserService {RedisTemplate<String, User> redisTemplate;public RedisTemplate<String, User> getRedisTemplate() {return redisTemplate;}public void setRedisTemplate(RedisTemplate<String, User> redisTemplate) {this.redisTemplate = redisTemplate;}public void put(User user) {redisTemplate.opsForHash().put(user.getObjectKey(), user.getKey(), user);}public void delete(User key) {redisTemplate.opsForHash().delete(key.getObjectKey(), key.getKey());}public User get(User key) {return (User) redisTemplate.opsForHash().get(key.getObjectKey(), key.getKey());}}

在上下文中配置redisTemplate注入,在使用bean方式来注入时,redisTemplate必须有setter/getter方法:

<bean id="userService" class="Service.UserService"><property name="redisTemplate"><ref bean="redisTemplate" /></property></bean>
======如果使用注解方式自动注入,则可以注释掉上面的bean配置方式======

在UserService注解@Service(“userService”),也可以在Service里写名字,默认是第一字母小写。

@Service("userService")public class UserService {@AutowiredRedisTemplate<String, User> redisTemplate;……        ……}

在上下文配置文件中,添加自动扫描包的context节点,Base-package的路径要覆盖包含注解的类文件
<context:component-scan base-package="*" />

在main中来简单操作一下:

public class Main {public static void main( String[] args ){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath*:/conf/applicationContext.xml");UserService userService =  (UserService) applicationContext.getBean("userService");User user1 = new User("user1ID", "User 1");User user2 = new User("user2ID", "User 2");System.out.println("==== getting objects from redis ====");System.out.println("User is not in redis yet: " + userService.get(user1));System.out.println("User is not in redis yet: " + userService.get(user2));System.out.println("==== putting objects into redis ====");userService.put(user1);userService.put(user2);System.out.println("==== getting objects from redis ====");System.out.println("User should be in redis yet: " + userService.get(user1));System.out.println("User should be in redis yet: " + userService.get(user2));System.out.println("==== deleting objects from redis ====");userService.delete(user1);userService.delete(user2);System.out.println("==== getting objects from redis ====");System.out.println("User is not in redis yet: " + userService.get(user1));System.out.println("User is not in redis yet: " + userService.get(user2));}}

确保redis服务器是开启状态之后就可以运行程序。运行结果如下:


7 0
原创粉丝点击