java之redis篇(spring-data-redis整合)

来源:互联网 发布:牛羊肉补贴 知乎 编辑:程序博客网 时间:2024/06/12 21:17

1,利用spring-data-redis整合

项目使用的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.x.redis</groupId>  <artifactId>Spring_redis</artifactId>  <version>1.0-SNAPSHOT</version>  <packaging>jar</packaging>  <name>Spring_redis</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>     <dependency>          <groupId>org.springframework.data</groupId>          <artifactId>spring-data-redis</artifactId>          <version>1.0.2.RELEASE</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-core</artifactId>          <version>3.1.2.RELEASE</version>      </dependency>            <dependency>          <groupId>redis.clients</groupId>          <artifactId>jedis</artifactId>          <version>2.1.0</version>      </dependency>             <dependency>          <groupId>junit</groupId>          <artifactId>junit</artifactId>          <version>4.8.2</version>          <scope>test</scope>      </dependency>                  <dependency>                <groupId>org.slf4j</groupId>                <artifactId>slf4j-api</artifactId>                <version>1.6.1</version>            </dependency>            <!-- 将现有的jakarta commons logging的调用转换成lsf4j的调用。 -->            <dependency>                <groupId>org.slf4j</groupId>                <artifactId>jcl-over-slf4j</artifactId>                <version>1.6.1</version>            </dependency>            <!-- Hack:确保commons-logging的jar包不被引入,否则将和jcl-over-slf4j冲突 -->            <dependency>                <groupId>commons-logging</groupId>                <artifactId>commons-logging</artifactId>                <version>1.1.1</version>                <scope>provided</scope>            </dependency>            <!-- slf4j的实现:logback,用来取代log4j。更快、更强! -->            <dependency>                <groupId>ch.qos.logback</groupId>                <artifactId>logback-classic</artifactId>                <version>0.9.24</version>                <scope>runtime</scope>            </dependency>  </dependencies></project>
View Code

除了log部分,只有一个spring core 和 spring-data-redis

项目文件目录结构:

 

applicationContext.xml:

1,context:property-placeholder 标签用来导入properties文件。从而替换${redis.maxIdle}这样的变量。

2,context:component-scan 是为了在com.x.redis.dao报下的类能够实用spring的注解注入的方式。

3,事实上我们只需要把JedisPoolConfig配数来就好了,接下来就是spring的封装了。所以直接看UserDAOImpl的实现就明白了。

<?xml version="1.0" encoding="UTF-8"?>  <beans xmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"      xmlns:context="http://www.springframework.org/schema/context"      xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"      xmlns:aop="http://www.springframework.org/schema/aop"      xsi:schemaLocation="              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">        <context:property-placeholder location="classpath:redis.properties" />      <context:component-scan base-package="com.x.redis.dao">    </context:component-scan>    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">          <property name="maxIdle" value="${redis.maxIdle}" />          <property name="maxActive" value="${redis.maxActive}" />          <property name="maxWait" value="${redis.maxWait}" />          <property name="testOnBorrow" value="${redis.testOnBorrow}" />      </bean>            <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"          p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}"  p:pool-config-ref="poolConfig"/>            <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">          <property name="connectionFactory"   ref="connectionFactory" />      </bean>                   <bean id="userDAO" class="com.x.redis.dao.impl.UserDAOImpl" />   </beans> 

redis.properties:

# Redis settings#redis.host=192.168.20.101#redis.port=6380#redis.pass=foobaredredis.host=127.0.0.1redis.port=6379redis.pass=  redis.maxIdle=300redis.maxActive=600redis.maxWait=1000redis.testOnBorrow=true
View Code

 

UserDAOImpl:

1,spring对dao层的封装很多用了类似于下面代码的模板方式。

2,RedisTemplate就是springredis的一个封装而已。

public class UserDAOImpl implements UserDAO {    @Autowired    protected RedisTemplate<Serializable, Serializable> redisTemplate;    public void saveUser(final User user) {        redisTemplate.execute(new RedisCallback<Object>() {            @Override            public Object doInRedis(RedisConnection connection) throws DataAccessException {                connection.set(redisTemplate.getStringSerializer().serialize("user.uid." + user.getId()),                               redisTemplate.getStringSerializer().serialize(user.getName()));                return null;            }        });    }    @Override    public User getUser(final long id) {        return redisTemplate.execute(new RedisCallback<User>() {            @Override            public User doInRedis(RedisConnection connection) throws DataAccessException {                byte[] key = redisTemplate.getStringSerializer().serialize("user.uid." + id);                if (connection.exists(key)) {                    byte[] value = connection.get(key);                    String name = redisTemplate.getStringSerializer().deserialize(value);                    User user = new User();                    user.setName(name);                    user.setId(id);                    return user;                }                return null;            }        });    }}

其他:

User:

public class User {    private long id;    private String name;        public long getId() {        return id;    }        public void setId(long id) {        this.id = id;    }        public String getName() {        return name;    }        public void setName(String name) {        this.name = name;    }}
View Code

测试代码:

    public static void main(String[] args) {        ApplicationContext ac =  new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");        UserDAO userDAO = (UserDAO)ac.getBean("userDAO");        User user1 = new User();        user1.setId(1);        user1.setName("obama");        userDAO.saveUser(user1);        User user2 = userDAO.getUser(1);        System.out.println(user2.getName());    }

 

0 0
原创粉丝点击