shiro reids session 集群问题

shiro 实现 sessionDAO保存到redis里,通过日志,shiro不断的去doUpdate或doReadSession。一个普通的JSP页面,标签for循环,导致几十次读写,影响性能?
有这方面解决办法没有?

public class RedisSessionDAO extends AbstractSessionDAO {

private static Logger logger = Logger.getLogger(RedisSessionDAO.class);
/**
 * shiro-redis的session对象前缀
 */
private RedisManager redisManager;

/**
 * The Redis key prefix for the sessions
 */
private String keyPrefix = "shiro_redis_session:";

@Override
public void update(Session session) throws UnknownSessionException {
    logger.debug("update:" + JSON.toJSONString(session));
    this.saveSession(session);
}

/**
 * save session
 * @param session
 * @throws UnknownSessionException
 */
private void saveSession(Session session) throws UnknownSessionException {
    if(session == null || session.getId() == null){
        logger.error("session or session id is null");
        return;
    }
    logger.debug("*******save session key="+session.getId()+"--->"+ redisManager.getExpire());
    byte[] key = getByteKey(session.getId());
    byte[] value = SerializeUtils.serialize(session);
    session.setTimeout(redisManager.getExpire()*1000);
    this.redisManager.set(key, value, redisManager.getExpire());
}

@Override
public void delete(Session session) {
    if(session == null || session.getId() == null){
        logger.error("session or session id is null");
        return;
    }
    logger.debug("*******remove session key="+session.getId()+"--->"+ redisManager.getExpire());
    redisManager.del(this.getByteKey(session.getId()));

}

//用来统计当前活动的session
@Override
public Collection<Session> getActiveSessions() {
    Set<Session> sessions = new HashSet<Session>();

    Set<byte[]> keys = redisManager.keys(this.keyPrefix + "*");
    if(keys != null && keys.size()>0){
        for(byte[] key:keys){
            Session s = (Session)SerializeUtils.deserialize(redisManager.get(key));
            sessions.add(s);
        }
    }

    return sessions;
}

@Override
protected Serializable doCreate(Session session) {
    Serializable sessionId = this.generateSessionId(session);
    this.assignSessionId(session, sessionId);
    this.saveSession(session);
    logger.debug("doCreate\n"+ JSON.toJSONString(session));
    return sessionId;
}

@Override
protected Session doReadSession(Serializable sessionId) {
    if(sessionId == null){
        logger.error("session id is null");
        return null;
    }
    Session session = (Session)SerializeUtils.deserialize(redisManager.get(this.getByteKey(sessionId)));
    logger.debug("doReadSession:"+ JSON.toJSONString(session));
    return session;
}

/**
 * 获得byte[]型的key
 * @param sessionId
 * @return
 */
private byte[] getByteKey(Serializable sessionId){
    String preKey = this.keyPrefix + sessionId;
    return preKey.getBytes();
}

public RedisManager getRedisManager() {
    return redisManager;
}

public void setRedisManager(RedisManager redisManager) {
    this.redisManager = redisManager;

    /**
     * 初始化redisManager
     */
    this.redisManager.init();
}

/**
 * Returns the Redis session keys
 * prefix.
 * @return The prefix
 */
public String getKeyPrefix() {
    return keyPrefix;
}

/**
 * Sets the Redis sessions key
 * prefix.
 * @param keyPrefix The prefix
 */
public void setKeyPrefix(String keyPrefix) {
    this.keyPrefix = keyPrefix;
}

}