个人学习成长记录之Java代码操作Redis

这里推荐哔站狂神视频,也是文章的部分来源。也包括Redis中文网。
哔哩哔哩狂神说
Redis中文官方网站
Redis官网
https://www.cnblogs.com/bulrush/p/9318982.html

Jedis

Redsi服务启动连接上以后,可以通过执行Java代码判断是否连接。首先需要导入jedis.jar的jar包;之后执行Java程序。

import redis.clients.jedis.Jedis;

public class JedisTest {
    public static void main(String[] args) {
        // 连接本地的Redis服务
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        // Redis密码。没有密码不需要
        // jedis.auth("123456");
        System.out.println("连接成功!");
        System.out.println(jedis.ping());
    }
}

在这里插入图片描述

Jredis操作事务
public class JedisTest {
    public static void main(String[] args) {
        // 创建对象,建立连接
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("hello", "word");
        jsonObject.put("name", "zhangsan");
        // 开启事务
        Transaction multi = jedis.multi();
        // 将JSONObject对象转为字符串
        String jsonString = jsonObject.toJSONString();
        try {
            multi.set("user1", jsonString);
            multi.set("user2", jsonString);
            // 代码抛出异常,事务执行失败
            int i = 1 / 0;
            // 执行事务
            multi.exec();
        } catch (Exception e) {
            // 放弃事务
            multi.discard();
            e.printStackTrace();
        } finally {
            System.out.println(jedis.get("user1"));
            System.out.println(jedis.get("user2"));
            // 关闭连接
            jedis.close();
        }
    }
}
SpringBoot整合Redis

源码简单分析

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {

	@Bean
    // 如果不存在bean才生效,我们可以自定义一个RedisTemplate来替换这个默认的
	@ConditionalOnMissingBean(name = "redisTemplate")
	public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
			throws UnknownHostException {
        // 默认的RedisTemplate,没有过多的设置,Redis对象都是需要序列化的
        // 两个泛型都是Object类型,需要强转类型
		RedisTemplate<Object, Object> template = new RedisTemplate<>();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

	@Bean
	@ConditionalOnMissingBean
	public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
			throws UnknownHostException {
		StringRedisTemplate template = new StringRedisTemplate();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

}

首先我们需要导入Redis相关依赖

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

配置连接

spring:
  redis:
    host: localhost
    port: 6379

我们使用SpringBoot整合Redis,一定要注意,自己重新编写RedisTemplate配置类,不要使用它原来的配置类。

@Configuration
public class RedisConfig {

    /**
     * 自定义RedisTemplate(固定模板)
     *
     * @param factory
     * @return
     */
    @Bean
    @SuppressWarnings("all")
    public RedisTemplate<String, Object> getRedisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 连接工厂
        redisTemplate.setConnectionFactory(factory);
        // JSON序列化的配置
        Jackson2JsonRedisSerializer redisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        redisSerializer.setObjectMapper(objectMapper);
        // String的序列化
        StringRedisSerializer serializer = new StringRedisSerializer();

        // key采用String的序列化方式
        redisTemplate.setKeySerializer(serializer);
        // hash的key采用String的序列化方式
        redisTemplate.setHashKeySerializer(serializer);
        // value序列化方式采用jackson
        redisTemplate.setValueSerializer(serializer);
        // hash的value序列化方式采用jackson
        redisTemplate.setHashValueSerializer(serializer);

        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

RedisTemplate操作Redis缓存的主要方法

private final String REDIS_KEY_ONE = "STUDY_REDIS";
private final String REDIS_KEY_TWO = "LOOK_REDIS";
private final String REDIS_KEY_THREE = "READ_REDIS";
private final String REDIS_KEY_FORE = "EXERCISE_REDIS";
private final String REDIS_KEY_FIVE = "DONE_REDIS";

// 向Redis中添加缓存,设置Redis的key和value
redisTemplate.opsForValue().set(REDIS_KEY_ONE, "Redis_A6");
// 删除缓存
redisTemplate.delete(REDIS_KEY_ONE);
// 根据key获取Redis缓存
redisTemplate.opsForValue().get(REDIS_KEY_ONE);
// 向Redis中添加缓存并设置过期时间
redisTemplate.opsForValue().set(REDIS_KEY_TWO, "Redis_A8", 60, TimeUnit.SECONDS);
// 设置当前KEY的缓存的过期时间
redisTemplate.expire(REDIS_KEY_ONE, 120, TimeUnit.SECONDS);
// Redis缓存key自增,负数为自减
redisTemplate.boundValueOps(REDIS_KEY_THREE).increment(1);
// 判断Redis的key值是否存在
redisTemplate.hasKey(REDIS_KEY_TWO);
// 获取Redis的Kye的过期时间
redisTemplate.getExpire(REDIS_KEY_TWO);
// 更新Redis的Key的过期时间
redisTemplate.expire(REDIS_KEY_FORE, 300, TimeUnit.SECONDS);
// 根据Key获取value
redisTemplate.opsForValue().get(REDIS_KEY_FORE);
// 根据key获取过期时间并换算成指定的单位
redisTemplate.getExpire(REDIS_KEY_FORE, TimeUnit.MINUTES);
// 根据key删除Redis的缓存
redisTemplate.delete(REDIS_KEY_ONE);
// 向Redis中存放Set集合
redisTemplate.opsForSet().add(REDIS_KEY_FIVE, "redis1", "redis2", "redis3");
// 获取Redis中指定key的Set集合
redisTemplate.opsForSet().members(REDIS_KEY_FIVE);
// 设置过期时间
redisTemplate.expire(REDIS_KEY_FIVE, 300, TimeUnit.SECONDS);
// 获取有效时间
redisTemplate.boundHashOps(REDIS_KEY_FIVE).getExpire();

/**
* TimeUnit是一个日期工具类。
*/
TimeUnit.DAYS         //日
TimeUnit.HOURS        //时
TimeUnit.MINUTES      //分
TimeUnit.SECONDS      //秒
TimeUnit.MILLISECONDS //毫秒

如果有什么不对的地方,或者不好的地方,还请多多指正,不吝指教。
如果有什么不对的地方,或者不好的地方,还请多多指正,不吝指教。
如果有什么不对的地方,或者不好的地方,还请多多指正,不吝指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值