Spring-data-redis在shiro中的实例

简介

Redis是基于K-V的NoSql数据库,其主要将数据保存在内存中,极大的提高了存取速度。Redis常用作缓存、排名、投票、消息队列等。这里我主要介绍一下在shiro中,用Redis保存会话session,实现分布式会话的功能。

spring-data-redis是对Jedis的封装,方便redis的使用。

Redis安装和配置

首先安装Redis,为了方便,我直接在虚拟机VMWare安装,使用的系统为Ubuntu14.04.3。安装命令sudo apt-get install redis-server,安装成功后会自动启动Redis。运行redis-cli命令,检查Redis是否连接成功。修改Redis配置,否则远端不能连接上虚拟机中的Redis,参考http://blog.csdn.net/csujiangyu/article/details/49278801

Redis在Spring中的配置

配置RedisTemplate

    <context:property-placeholder location="classpath:property/redis.properties" />
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}" />
        <property name="maxTotal" value="${redis.maxTotal}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>
    <bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="usePool" value="true"/>
        <property name="hostName" value="${redis.host}" />
        <property name="port" value="${redis.port}" />
        <constructor-arg index="0" ref="jedisPoolConfig" />
    </bean>
    <!-- redis template definition -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnFactory" />
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
        </property>
    </bean> 

redis.properties配置Redis

redis.host=10.10.110.189
redis.port=6379
redis.pass=
redis.maxIdle=10
redis.maxTotal=10
redis.testOnBorrow=true 

Redis的使用

通过RedisTemplate操作Redis,实现增删查改的功能。

public class RedisCacheSessionDao extends CachingSessionDAO {
    @Inject
    private RedisTemplate<Serializable, Session> redisTemplate;

    @Resource(name = "redisTemplate")
    private ValueOperations<Serializable, Session> valueOps;

    @Override
    protected void doUpdate(Session session) {
        valueOps.set(session.getId(), session);
    }
    @Override
    protected void doDelete(Session session) {
        if (session == null || session.getId() == null) {
            return;
        }
        redisTemplate.delete(session.getId());
    }
    @Override
    protected Serializable doCreate(Session session) {
        Serializable sessionId = generateSessionId(session);
        assignSessionId(session, sessionId);
        valueOps.set(sessionId, session);
        return sessionId;
    }
    @Override
    protected Session doReadSession(Serializable sessionId) {
        return valueOps.get(sessionId);
    }
} 

测试

从截图可以看出客户端的cookie中会话ID是1de10edf-badd-410a-928b-04a9346fa131
这里写图片描述

Redis中的会话ID是1de10edf-badd-410a-928b-04a9346fa131,不难得出sessionId已经插入Redis中。
这里写图片描述

源码

托管在https://github.com/Jdoing/myweb/tree/feature/distributed_session

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值