redis的简单应用

我这里将商城中某些会被用户经常查看的商品的详细信息存储到redis中示例

1.首先我们需要在linux中安装redis服务。
https://blog.csdn.net/ly_linyuan/article/details/80003231

2.启动redis服务
./redis-server

3.在项目中配置spring整合redis的配置文件
spring-redis.xml:

<?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:context="http://www.springframework.org/schema/context"
   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">

<!-- jedis客户端单机版 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
    <constructor-arg name="host" value="192.168.64.129"/>
    <constructor-arg name="port" value="6379"></constructor-arg>
    <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
</bean>

<!-- 连接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <!-- 最大连接数 -->
    <property name="maxTotal" value="30" />
    <!-- 最大空闲连接数 -->
    <property name="maxIdle" value="10" />
    <!-- 每次释放连接的最大数目 -->
    <property name="numTestsPerEvictionRun" value="1024" />
    <!-- 释放连接的扫描间隔(毫秒) -->
    <property name="timeBetweenEvictionRunsMillis" value="30000" />
</bean>
</beans>

4.在后台查询商品详细信息的时候,我们做一个处理
查询redis缓存,如果缓存中有该商品的信息,那么直接返回redis中的数据,不继续进行查询,如果redis缓存中没有该商品详细信息,则查询数据库中该商品信息,并将该信息添加至缓存中,以便下一次该商品被访问时可以直接在缓存中加载出该商品的信息。设置一个时限,让缓存每隔一段时间自己清理,提高缓存的效率。
后台代码:

//jedis
@Autowired
private JedisPool jedisPool;

@Value("${GOOD_INFO}")
private String GOOD_INFO;

@Value("${TIME_EXPIRE}")
private String TIME_EXPIRE;
/**
 * 根据id查询到商品详细信息
 */
@Override
public Good getGoodById(Integer id) {
    //从连接池获取连接  
    Jedis jedis = null;  
    //先查询缓存
    //添加缓存不能影响正常业务逻辑
    try {
        jedis = jedisPool.getResource();
        String json = jedis.get(GOOD_INFO + ":" + id + ":BASE");
        //删除指定key的缓存
        /*jedis.exists(id.toString());*/
        //查询到结果,把json转换成List返回
        if (StringUtils.isNotBlank(json)) {
            Good good = JsonUtils.jsonToPojo(json, Good.class);
            return good;
        }
    } catch (Exception e) {
        e.printStackTrace();  
    }finally{
        jedisPool.returnResource(jedis); 
    }
    //缓存中没有存储,需要查询数据库
    GoodExample example = new GoodExample();
    GoodExample.Criteria criteria = example.createCriteria();
    criteria.andIdEqualTo(id);
    List<Good> glist = goodMapper.selectByExample(example);
    if(glist != null && glist.size() > 0){
        try {
            jedis = jedisPool.getResource();
            //把结果添加到缓存
            jedis.set(GOOD_INFO+":" + id + ":BASE", JsonUtils.objectToJson(glist.get(0)));
            //设置过期时间,提过缓存的利用率
            jedis.expire(GOOD_INFO + ":" + id + ":BASE", Integer.parseInt(TIME_EXPIRE));
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            jedisPool.returnResource(jedis); 
        }
        return glist.get(0);
    }
    return null;
}

注意:我这里,GOOD_INFO是我自己命名的key,TIME_EXPIRE是缓存的最大有效时间,当超过该时间后该缓存自动清理,提高缓存效率

3.这里,我们可以通过RedisDesktopManager工具连接我们的缓存服务器,查询缓存中有没有存储该商品信息
例如我这里的缓存中已经查看过的商品添加进去的数据
这里写图片描述

(我们这里查询一个没有的商品做一个测试)
这里写图片描述

查看后再次查看缓存,缓存中添加成功
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值