Redis 在项目中的简单使用

创建maven 项目 在pom.xml 中导入坐标

<!--Redis-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

简单测试是否连接成功

public void test1(){
        JedisPool jedisPool = new JedisPool("127.0.0.1", 6379); //第一个参数为 安装redis ip地址 第二个参数为端口号
        String ping = jedis.ping();
        System.out.println(ping);
        String k1 = jedis.get("k1"); //获取key 为k1 的值
        System.out.println(k1);
        jedis.close();
    }

运行结果如下 (连接成功)
在这里插入图片描述

列表查询中 redis 的使用(redis 一般在service 层中使用)

业务场景(定时刷新排行榜 )

1 controller层 代码

//controller 层中 代码如下
@RequestMapping("queryAll")
    @ResponseBody
    public List<User> queryAll(){
         return userService.queryAll();
    }

2 service层 代码

  public List<User> queryAll() {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        String userList = jedis.get("userList"); //先判断redis 中是否有key 为 userList 的值
        if(userList==null){ //没有 就调用mapper 去数据库中进行查询 (mapper 代码省略)
            List<User> users = userMapper.queryAll();
            String s = JSONObject.toJSONString(users); // 将 数据转为 json 串 
            jedis.setex("userList",10,s); 
            //设置过期时间  10秒后过期 (保证和数据库数据同步 )
            jedis.close(); // 关闭连接
            return users;  
        }else{
            List<User> userList2 = JSON.parseArray(userList, User.class); 
            //将redis 中的数据转为list 集合 直接返回 不用再去数据库中进行查询
             return  userList2;  
        }
    }

根据id 主键 (可以是其他条件)查询时 redis 的使用

业务场景(频繁查询操作)
controller层 代码

@RequestMapping("queryById")
    @ResponseBody
    public  User queryById(Integer usId){
       User user = userService.queryById(usId);
       return user;
    }

service层 代码

 public User queryById(Integer usId) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);  //创建连接 
        String user = jedis.hget("userMap", String.valueOf(usId)); //先判断redis 中是否存在 key 为userMap
        的值
        if(user==null){ //如果不存在
            User queryUser= userMapper.queryById(usId); //调用mapper 去数据库进行查询
            String user1 = JSONObject.toJSONString(queryUser); // 转为json 格式
            jedis.hset("userMap",String.valueOf(queryUser.getUsId()),user1); // 将数据保存到redis 中
            jedis.close(); // 关闭连接
            return  queryUser;
         }else{
            User user2 = JSON.parseObject(user, User.class);
                //将redis 中的数据转为指定格式  直接返回 不用再去数据库中进行查询
            return user2;
        }

    }

保存操作 进行数据的保存 redis 的使用

controller层 代码
业务场景(保存后,频繁查询 比如订单)

 @RequestMapping("save")
    @ResponseBody
    public  String   save(User user ){
        userService.save(user);
       return"ok";
    }

service层 代码

 public void save(User user) {
        userMapper.save(user); //调用mapper 保存数据到数据库 
        Jedis jedis = new Jedis("127.0.0.1", 6379);  //创建连接 
        String user1 = JSONObject.toJSONString(user); //转为json 格式 
        jedis.hset("userMap",String.valueOf(user.getUsId()),user1);  // 将数据保存到redis 中
        jedis.close();  // 关闭连接  同时保存到redis 中 下次查询直接从redis 中获取
        
    }

通过 依赖注入 jedisPool 避免频繁创建Jedis

一 ,在spring 配置文件中 配置Bean

	<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
	<!--通过构造器注入 参数-->
       <constructor-arg name="host" value="127.0.0.1"/>
		<constructor-arg name="port" value="6379"/>
	</bean>
	

二, 在service 层 注入

 @Autowired
    private JedisPool jedisPool;

三, 使用

   Jedis jedis = jedisPool.getResource(); 

猜你喜欢

转载自blog.csdn.net/weixin_43726822/article/details/87457584