Redis 在项目中的简单使用

本文详细介绍了如何在Maven项目中引入Redis客户端jedis,通过示例展示了连接测试、列表查询、根据ID查询及数据保存的Redis使用方法,并提供了依赖注入JedisPool的优化方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建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(); 
项目中,Redis可以用于多种场景,主要包括缓存、会话管理、消息队列、排行榜等。以下是一些常见的用法: 1. **缓存**: - **数据缓存**:将数据库中的热点数据缓存到Redis中,减少数据库的访问压力,提高系统响应速度。 - **页面缓存**:将动态生成的页面缓存到Redis中,避免每次请求都重新生成页面。 2. **会话管理**: - **分布式会话**:在分布式系统中,使用Redis来存储用户会话信息,确保会话信息在多个服务器之间共享。 3. **消息队列**: - **发布/订阅模式**:使用Redis的发布/订阅功能来实现消息队列,应用程序可以发布消息到特定的频道,其他应用程序可以订阅这些频道来接收消息。 - **列表操作**:使用Redis的列表数据结构来实现简单的消息队列功能,生产者将消息推送到列表中,消费者从列表中取出消息。 4. **排行榜**: - **有序集合**:使用Redis的有序集合(Sorted Set)来实现排行榜功能,每个成员都有一个分数,根据分数进行排序。 5. **分布式锁**: - **SETNX命令**:使用Redis的SETNX命令来实现分布式锁,确保在分布式系统中只有一个实例能够执行某个操作。 6. **计数器**: - **自增/自减**:使用Redis的INCR和DECR命令来实现计数器功能,例如统计页面访问次数、用户点击次数等。 ### 示例代码 #### 1. 缓存示例(使用Spring Boot) ```java @Service public class CacheService { @Autowired private RedisTemplate<String, Object> redisTemplate; public void set(String key, Object value, long timeout, TimeUnit unit) { redisTemplate.opsForValue().set(key, value, timeout, unit); } public Object get(String key) { return redisTemplate.opsForValue().get(key); } } ``` #### 2. 会话管理示例(使用Spring Session) ```java @Configuration @EnableRedisHttpSession public class HttpSessionConfig { @Bean public LettuceConnectionFactory connectionFactory() { return new LettuceConnectionFactory(); } } ``` #### 3. 消息队列示例(使用Spring Data Redis) ```java @Service public class MessagePublisher { @Autowired private StringRedisTemplate redisTemplate; public void publish(String channel, String message) { redisTemplate.convertAndSend(channel, message); } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值