Redis实现邮件激活码保存

在之前我们学习了用户注册发送邮箱激活码的功能,但是邮箱激活码往往是有有效期的,这个功能我们可以使用redis实现:
1.redis的介绍:
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
其实简单的说redis就是本质上就是一个key-value数据库,比mysql,oracle简单很多,它是基于内存操作的,所以效率很高,读写操作达到10万次/s,是已知性能最快的Key-Value DB,并且可以存储多种数据结构,还能设置expire时间;我们可以从官网上下载redis的压缩包: http://redis.io/download

2.spring整合redis
1.在pom文件中引入依赖:

<!-- redis nosql 内存数据库 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.4.1.RELEASE</version>
        </dependency>

2.配置 applicationContext.xml 配置 redisTemplate

    <!-- jedis 连接池配置 -->
     <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxIdle" value="300" />        
        <property name="maxWaitMillis" value="3000" />  
        <property name="testOnBorrow" value="true" />  
    </bean>  

    <!-- jedis 连接工厂 -->
    <bean id="redisConnectionFactory"  
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  
        p:host-name="localhost" p:port="6379" p:pool-config-ref="poolConfig"  
        p:database="0" />  

    <!-- spring data 提供 redis模板  -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
        <property name="connectionFactory" ref="redisConnectionFactory" /> 
        <!-- 如果不指定 Serializer   -->
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"> 
            </bean>
        </property> 
    </bean>  

为了方便,我们可以将redis的配置文件抽取出来,在applicationContext.xml中引入即可;
3.书写逻辑代码:
我们在 CustomerAction 提供发送邮件代码,邮件中生成激活码,激活码保存到 redis 中
需要注入RedisTemplate

@AutoWired
private RedisTemplate<String,String> redisTemplate;

将邮箱激活码保存在redis中,设置时间24小时:

    // 发送一封激活邮件
    // 生成激活码
    String activecode = RandomStringUtils.randomNumeric(32);

    // 将激活码保存到redis,设置24小时失效
redisTemplate.opsForValue().set(model.getTelephone(), activecode,24,TimeUnit.HOURS);

当用户激活邮件时,我们从redis中取出保存的activecode即可

    // 判断激活码是否有效
    String activecodeRedis = redisTemplate.opsForValue().get(
        model.getTelephone());
    if (activecodeRedis == null || !activecodeRedis.equals(activecodeRedis)) {
    // 激活码无效
    ServletActionContext.getResponse().getWriter().println("激活码无效,请登录系统,重新绑定邮箱!");

猜你喜欢

转载自blog.csdn.net/caiyibing1992/article/details/82227924