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 config
redis.pool.maxActive=100
redis.pool.maxIdle=20
redis.pool.maxWait=1000
redis.pool.testOnBorrow=true
redis.hostname=localhost
redis.port=6379
redis.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 { @Autowired
RedisTemplate<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)); }
}

  

最新文章

  1. passive 的事件监听器
  2. jQuery MiniUI开发系列之:创建组件对象
  3. Notepad++根据语言类型自动选择对应编译器来编译代码
  4. android 获取系统联系人 完全解析
  5. 使用cookie实现打印浏览记录的功能
  6. VIM(四) C语言开发插件设置
  7. Testing - 测试基础 - 分类
  8. Codeforces Round #271 (Div. 2)题解【ABCDEF】
  9. [资料]Keychain 获取设备唯一
  10. CENTOS7 添加自定义快捷键(启动TERMINAL,显示桌面等)
  11. 他们在军训,我在搞 OI(一)
  12. 【HtmlParser】HtmlParser使用
  13. android的编译和运行过程深入分析
  14. Java 网络编程(Elliotte Rusty Harold)
  15. Socket通信原理
  16. 利用poi向excle写入数据
  17. UI进阶 即时通讯之XMPP好友列表、添加好友、获取会话内容、简单聊天
  18. 通过Xshell登录远程服务器实时查看log日志
  19. java String补足
  20. 关于Sublime Text 3的几个问题总结

热门文章

  1. VM设置BIOS延长时间
  2. URAL 2040 (回文自动机)
  3. magento问题集3
  4. magento提速的一些小技巧,列举manegnto网站提速的
  5. 解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException
  6. CentOS 6.6 nginx install
  7. zendstudio添加注释快捷键
  8. mySQL-CRUD操作(数据库的增删改查)练习题
  9. ci(转)
  10. vcf_filter.py