使用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操作数据: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类中可以看到需要配置的项
整合步骤:
@Autowired private RedisTemplate redisTemplate; @Test void contextLoads(){ //操作字符串String redisTemplate.opsForValue(); //操作列表List redisTemplate.opsForList(); //获取连接 RedisConnection connection = redisTemplate.getConnectionFactory.getConnection(); //清空当前库 connection.flushDb(); }
@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; } }