Jedis
使用java来操作Redis
Jedis是Redis官方推荐的连接开发工具,使用java操作Redis中间件,如果要使用java操作redis,那么一定要对redis十分的熟悉
使用Jedis
1.在pom.xml中导入对应的依赖
<!-- jedis依赖 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis<artifactId>
<version>3.2.0</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson<artifactId>
<version>1.2.62</version>
</dependency>
2.编码测试
连接数据库-操作命令-断开连接
public class Test(
public static void main(String[] args){
//new一个jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379); //第一个参数是连接redis的地址;第二个参数是ip端口号
//jedis所有的方法就是redis中命令
//测试是否连接成功,返回PONG为连接成功
System.out.println(jedis.ping());
//开启事务
Transaction multi = jedis.multi();
//执行命令
try{
multi.set("k1",v1);
multi.set("k2",v2);
multi.exec();//没有出现异常,执行事务
}catch(Exception e){
multi.discard();//出现异常,放弃事务
e.printStackTrace();
}finally{
//关闭连接
jedis.close();
}
}
)
SpringBoot整合
SpringBoot操作数据:spring-data jpa jdbc redis;
创建SpringBoot项目时在NoSQL中选中spring data redis即可
说明:在SpringBoot2.x之后,原来使用的jedis被替换为了lettuce
jedis:采用直连,多个线程操作的话,是不安全的,如果想要避免不安全的,谁用jedis pool连接池,更像BIO模式
lettuce:采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况,可以减少线程数据了,更像NIO模式
自动配置类都会绑定一个properties配置文件,redis的自动配置类RedisAutoConfiguration,自动配置类通过注解EnableConfigurationProperties(RedisProperties.class)绑定了RedisProperties,在RedisProperties类中可以看到需要配置的项
整合步骤:
- 导入依赖
- 配置redis
- 测试连接
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads(){
//操作字符串String
redisTemplate.opsForValue();
//操作列表List
redisTemplate.opsForList();
//获取连接
RedisConnection connection = redisTemplate.getConnectionFactory.getConnection();
//清空当前库
connection.flushDb();
}
自定义RedisTemplate
@Configuration
public class RedisConfig{
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknowHostException{
//一般为了方便使用,直接使用<String,Object>类型
RedisTemplate<String,Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
//序列化配置
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>();
//进行转义
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.All,JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(OM);
//String的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//字符串和hash的key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
//字符串和hash的value采用jackson的序列化方式
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(stringRedisSerializer);
template.afterPropertiesSet();
return template;
}
}