添加redis缓存 作为用户查询的缓存

ssm框架 windows系统 jdk13

1.首先导入依赖


        
            redis.clients
            jedis
            2.7.3
        


    com.dyuproject.protostuff
    protostuff-core
    1.0.8


    com.dyuproject.protostuff
    protostuff-runtime
    1.0.8

2.启动redis 

redis-server --service-start 在命令行输入

3.因为是针对于数据进行缓存的,所以需要在Dao层设置Redisdao工具类

public class RedisDao {
        private final JedisPool jedisPool;
        public RedisDao(String ip, int port) {
            jedisPool = new JedisPool(ip, port);
        }
        private RuntimeSchema schema = RuntimeSchema.createFrom(Product.class);
        public Product getProduct(String id) {
            // redis操作逻辑
            try {
                Jedis jedis = jedisPool.getResource();
                try {
                    String key = "product:" + id;
                    // 并没有实现自带的序列化操作
                    // 采用自定义序列化 占用内存较低,并且速度快
                    // protostuff: pojo.
                    byte[] bytes = jedis.get(key.getBytes());
                    // 缓存重获取到
                    if (bytes != null) {
                        Product product = schema.newMessage();
                        ProtostuffIOUtil.mergeFrom(bytes, product, schema);
                        // seckill被反序列化
                        return product;
                    }
                } finally {
                    jedis.close();
                }
            } catch (Exception e) {

            }
            return null;
        }

        public String putProduct(Product product) {
            try {
                Jedis jedis = jedisPool.getResource();
                try {
                    String key = "product:" + product.getId();
                    byte[] bytes = ProtostuffIOUtil.toByteArray(product, schema,
                            LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
                    // 超时缓存
                    int timeout = 60 * 60;// 1小时
                    String result = jedis.setex(key.getBytes(), timeout, bytes);
                    return result;
                } finally {
                    jedis.close();
                }
            } catch (Exception e) {
            }
            return null;
        }
}

注意:使用protostuff序列化工具时,被序列化的对象必须是pojo对象(具备setter/getter)

4.在dao层的xml文件中,手动注入RedisDao 

    
    
        
        
    

这里是直接注入了地址和端口,其实还可以在配置文件中编写,然后在这里导入。

由于RedisDao和MyBatis的DAO没有关系,MyBatis不会帮我们自动实现该接口,所以需要手动注入RedisDao。

由于我们在RedisDao是通过构造方法来注入ip和port两个参数的,所以需要配置,如果不配置这个标签,我们需要为ip和port提供各自的setter和getter(注入时可以没有getter)。

5.修改ProductServiceImpl 

这个主要就是根据自己项目的设计来做

6.进行测试

https://blog.csdn.net/qq_34450769/article/details/79881778

 

 

你可能感兴趣的:(添加redis缓存 作为用户查询的缓存)