java连接redis,springboot整合redis

1.java连接redis

jedis可以帮你完成java和redis之间的连接,专业易用的一个客户端。

(1)引用依赖

  <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.6.0</version>
        </dependency>
    </dependencies>

(2)编写 代码

public class Test01 {
    public static void main(String[] args) {
        //1.创建连接对象
        Jedis jedis=new Jedis("192.168.223.158",6379);
        //2.使用jedis来对我们的redis服务进行操作了。Jedis对象中对每个redis命令封装了对应的方法。
        //对key的操作命令
        Set<String> keys = jedis.keys("*");
        System.out.println("所有的key:"+keys);
        jedis.expire("k1",20L);
        Long k2 = jedis.del("k2");
        System.out.println("是否删除成功:"+k2);

        //关于字符串类型的操作。value为字符串。
        jedis.set("k4","k4就是");

        jedis.setnx("k4","k4真的想");
        String va = jedis.get("k4");
        System.out.println("k4对应的值:"+va);

        jedis.setex("k5",20L,"设置一个过期的value");

        //关于hash类型的操作
        Map<String,String> map=new HashMap<String,String>();
        map.put("name","张三");
        map.put("age","25");
        map.put("address","北京");
        jedis.hset("k6",map);
        System.out.println(jedis.hget("k6", "name"));

        //关于list列表类型
        jedis.lpush("k7","张三","李四","王五","赵六");
        List<String> list = jedis.lrange("k7", 0, -1);
        System.out.println(list);

        //关于set和sortset省略
         jedis.close();
    }
}

1.2java连接redis集群 

public class Test02 {
    public static void main(String[] args) {
        Set<HostAndPort> set=new HashSet<HostAndPort>();
        set.add(new HostAndPort("192.168.223.158",7001));
        set.add(new HostAndPort("192.168.223.158",7002));
        set.add(new HostAndPort("192.168.223.158",7003));
        set.add(new HostAndPort("192.168.223.158",7004));
        set.add(new HostAndPort("192.168.223.158",7005));
        set.add(new HostAndPort("192.168.223.158",7006));
        //创建一个Jedis集群对象---需要传入redis集群服务的地址信息
        JedisCluster jedisCluster=new JedisCluster(set);
        jedisCluster.set("k66","v66");
        System.out.println(jedisCluster.get("k66"));

        jedisCluster.close();
    }
}

2.springboot整合reids

springboot在整合redis时会自动封装了两个类:

RedisTemplate和StringRedisTemplate.

StringRedisTemplate它是RedisTemplate的子类,StringRedisTemplate它里面存储的key和value都是字符串类型

(1)引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

(2)配置文件

 # 连接单机redis

spring.redis.host=192.168.223.158      #  ip
spring.redis.port=6379               # 端口号

 2.1使用StringRedisTemplate

@SpringBootTest
class JedisApplicationTests {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;//starter自动完成redis的装配
    @Test
    void contextLoads() {

        /*1.key操作*/

//        Boolean kk = stringRedisTemplate.delete("kk");
//        System.out.println(kk);
//        Boolean kk1 = stringRedisTemplate.hasKey("kk");
//        System.out.println("指定key是否存在"+kk1);
//        Set<String> keys = stringRedisTemplate.keys("*");
//        System.out.println("查看本库说有key"+keys);


        /*2. 关于字符串的操作:默认springboot中redistemplate不能直接操作数据类型的命令。
        但是springboot中redisTemplate为每个数据类型都提供了一个类*/

        //对应的类可以操作对应的数据类型
        //ValueOperations: 专门操作字符串类型
        ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
        valueOperations.set("k88","今天看到了什么");
        //存入数据  60s后过期
        valueOperations.set("k99","过期时间",60, TimeUnit.SECONDS);
        // 过期时间 第二种方法

        Duration duration = Duration.ofDays(5);//时间5天 后过期
        valueOperations.set("tianlong","乾坤大挪移",duration);

        /*3.关于hsah 类型的操作*/
        HashOperations<String, Object, Object> hashOperations = stringRedisTemplate.opsForHash();
        hashOperations.put("史莱克1","name","唐三");
        hashOperations.put("史莱克1","age","23");
        hashOperations.put("史莱克1","gender","男");

        Map<Object, Object> map= new HashMap<>();
        map.put("name","小舞");
        map.put("age","10w");
        map.put("gender","女");
        hashOperations.putAll("史莱克2",map);

    }

}

 2.2使用RedisTemplate

 org.springframework.data.redis.serializer.SerializationException: 要求存入的key和value必须经过了序列化。
    思考:

存入字符串类型没有报错而存入User对象报错。【因为String序列化接口了,而User类没有实现序列化接口】
    思考:

因为默认采用的是JDK序列化方式---无法看懂.---需要认为设置序列化方式

 使用RedisTemplate 需要序列化,如果每次使用RedisTemplate都要序列化实在优点麻烦。 人为创建RedisTemplate类对象并交于spring容器管理。

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashKeySerializer(redisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }
}

### Java Spring Boot 整合 Redis 示例教程 #### 项目结构设置 为了使Spring Boot应用能够与Redis数据库交互,需确保项目的依赖项已正确配置。在`pom.xml`文件中加入必要的依赖来支持Redis操作[^1]。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-redis</artifactId> </dependency> <!-- 如果使用Lettuce连接池 --> <dependency> <groupId>io.lettuce.core</groupId> <artifactId>lettuce-core</artifactId> </dependency> ``` #### 配置属性文件 编辑`application.properties`或`application.yml`以定义访问Redis服务器所需的参数。 对于`.properties`格式: ```properties spring.redis.host=localhost spring.redis.port=6379 ``` 而对于`.yml`格式则是这样写的: ```yaml spring: redis: host: localhost port: 6379 ``` #### 创建Redis配置类 通过创建一个新的Java类用于自定义RedisTemplate实例化过程中的序列化方式和其他选项。 ```java package com.lei.my_redis.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; @Configuration public class RedisConfig { @Bean public StringRedisTemplate template(RedisConnectionFactory connectionFactory) { return new StringRedisTemplate(connectionFactory); } } ``` #### 编写服务层逻辑 实现业务功能的服务组件可以利用注入的`StringRedisTemplate`对象来进行键值存储和检索的操作。 ```java package com.lei.my_redis.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.data.redis.core.StringRedisTemplate; @Service public class CacheServiceImpl implements CacheService { private final StringRedisTemplate stringRedisTemplate; @Autowired public CacheServiceImpl(StringRedisTemplate stringRedisTemplate){ this.stringRedisTemplate = stringRedisTemplate; } @Override public void setCacheData(String key, String value) { stringRedisTemplate.opsForValue().set(key,value); } @Override public String getCacheData(String key) { return stringRedisTemplate.opsForValue().get(key); } } ``` #### 定义接口控制器 最后一步是在RESTful API端点处暴露这些缓存管理的方法给外部调用者。 ```java package com.lei.my_redis.controller; import com.lei.my_redis.service.CacheService; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/cache") public class CacheController { private final CacheService cacheService; public CacheController(CacheService cacheService){ this.cacheService = cacheService; } @PostMapping("/{key}/{value}") public void add(@PathVariable String key,@PathVariable String value){ cacheService.setCacheData(key,value); } @GetMapping("/{key}") public String getValueByKey(@PathVariable String key){ return cacheService.getCacheData(key); } } ``` 上述代码片段展示了如何在一个典型的Spring Boot应用程序里集成并运用Redis作为数据持久化的解决方案之一。这不仅限于简单的字符串类型的KV对处理;实际上还可以扩展到更复杂的数据类型如哈希表、列表等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值