java连接Redis和springboot连接Redis

一、使用Java连接Redis

  1. 创建一个Maven项目
  2. 导入连接redis的相关依赖
 <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.3.0</version>
        </dependency>
</dependencies>
  1. 测试类
 @Test
    void test01(){
        Jedis jedis = new Jedis("192.168.31.35",6379);//连接redis
        jedis.set("a2","2");
        jedis.mset("k2","v2","k3","v3");
        String k1 = jedis.get("k2");
        String k2 = jedis.get("a2");
        Set<String> keys = jedis.keys("*");
        System.out.println(k1);
        System.out.println(k2);
        System.out.println(keys);
    }

在这里插入图片描述

  • 使用连接池的方式连接redis
public class TestPoolJedis {
    public static void main(String[] args) {
//        连接池配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(100);//连接池最大连接数为100
        config.setMaxIdle(10);//最大空闲数为10个
        config.setTestOnBorrow(true);//在从连接池获取连接对象前测试是否可以使用

//        创建连接池对象
        JedisPool jedisPool = new JedisPool(config, "192.168.31.59", 6379);
        
//      得到连接对象
        Jedis jedis = jedisPool.getResource();
        String k3 = jedis.get("k3");
        jedis.expire("k2",10);
        System.out.println(k3);
        System.out.println(jedis.ttl("k2"));

        jedis.close();
    }
}

二、使用springboot连接Redis

创建一个springboot项目。在创建项目我自己添加了相关需要的依赖。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 添加依赖
 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 配置application.properties文件
spring.redis.host=192.168.31.35
spring.redis.port=6379
spring.redis.jedis.pool.max-active=20
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.max-wait=2000
  1. 连接类说明

(1)、StringRedisTemplate继承自RedisTemplate,底层代码:
public class StringRedisTemplate extends RedisTemplate<String, String> {}
(2)、这两个类都是将数据序列化到redis库
(3)、RedisTemplate可以存储任何数据类型的数据,底层代码:
public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperations<K, V>, BeanClassLoaderAware {
使用这个必须重新进行序列化配置。它默认对key和value使用的序列化是jdk的序列化,这种序列化有弊端,序列化后的数据占据内存太大。
(4)、StringRedisTemplate只能存储string类型的数据,它使用的序列化方式是StringRedisSerizlizer。使用它时不用再配置序列化。
(5)、这两个类对向redis操作的方法进行了封装,不像使用java连接时那么直观

  1. StringRedisTemplate连接redis示例
@SpringBootTest
class DemoApplicationTests {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void contextLoads() {
        //操作key
        Set<String> keys = stringRedisTemplate.keys("*");
        System.out.println(keys);
        stringRedisTemplate.delete("a1");
        System.out.println(stringRedisTemplate.expire("qy129",60, TimeUnit.SECONDS));

    }
    @Test
    void Test01(){
        ValueOperations<String, String> forValue = stringRedisTemplate.opsForValue();
        forValue.set("a2","2");
        System.out.println(forValue.get("a2"));
        Map<String,String> map=new HashMap<>();
        map.put("a3","3");
        map.put("a4","4");
        map.put("a5","5");
        forValue.multiSet(map);
        List<String> strings = forValue.multiGet(map.keySet());
        System.out.println(strings);

    }
}

在这里插入图片描述

  1. Redis Template连接Redis

创建新的springboot项目,连接redis集群

  1. 配置序列化RedisConfig 类
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        StringRedisSerializer serializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(mapper);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(serializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;

    }
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600)) //缓存过期10分钟 ---- 业务需求。
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))//设置key的序列化方式
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) //设置value的序列化
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
}
  1. 修改application.properties配置文件

哨兵模式连接配置

spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=192.168.31.35:26379

去中心化集群连接配置

#列出所有节点 IP为你虚拟机的IP地址
spring.redis.cluster.nodes=192.168.31.35:8001,192.168.31.35:8002,192.168.31.35:8003,192.168.31.35:8004,192.168.31.35:8005,192.168.31.35:8006
  1. 我测试的是连接去中心化集群来操作
@SpringBootTest
public class TestCluster {

    @Autowired
    private RedisTemplate redisTemplate;

    //去中心化连接redis
    @Test
    public void test(){
        redisTemplate.opsForValue().set("name","奥特曼");
 System.out.println(redisTemplate.opsForValue().get("name"));
    }
}

使用图形化工具redisplus查看存储数据

在这里插入图片描述
连接成功后的界面
在这里插入图片描述
测试结果

在这里插入图片描述
连接redis的两种方式就操作结束了

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值