这里推荐哔站狂神视频,也是文章的部分来源。也包括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 //毫秒
如果有什么不对的地方,或者不好的地方,还请多多指正,不吝指教。
如果有什么不对的地方,或者不好的地方,还请多多指正,不吝指教。
如果有什么不对的地方,或者不好的地方,还请多多指正,不吝指教。