1.java连接redis
jedis可以帮你完成java和redis之间的连接,专业易用的一个客户端。
(1)引用依赖
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.0</version>
</dependency>
</dependencies>
(2)编写 代码
public class Test01 {
public static void main(String[] args) {
//1.创建连接对象
Jedis jedis=new Jedis("192.168.223.158",6379);
//2.使用jedis来对我们的redis服务进行操作了。Jedis对象中对每个redis命令封装了对应的方法。
//对key的操作命令
Set<String> keys = jedis.keys("*");
System.out.println("所有的key:"+keys);
jedis.expire("k1",20L);
Long k2 = jedis.del("k2");
System.out.println("是否删除成功:"+k2);
//关于字符串类型的操作。value为字符串。
jedis.set("k4","k4就是");
jedis.setnx("k4","k4真的想");
String va = jedis.get("k4");
System.out.println("k4对应的值:"+va);
jedis.setex("k5",20L,"设置一个过期的value");
//关于hash类型的操作
Map<String,String> map=new HashMap<String,String>();
map.put("name","张三");
map.put("age","25");
map.put("address","北京");
jedis.hset("k6",map);
System.out.println(jedis.hget("k6", "name"));
//关于list列表类型
jedis.lpush("k7","张三","李四","王五","赵六");
List<String> list = jedis.lrange("k7", 0, -1);
System.out.println(list);
//关于set和sortset省略
jedis.close();
}
}
1.2java连接redis集群
public class Test02 {
public static void main(String[] args) {
Set<HostAndPort> set=new HashSet<HostAndPort>();
set.add(new HostAndPort("192.168.223.158",7001));
set.add(new HostAndPort("192.168.223.158",7002));
set.add(new HostAndPort("192.168.223.158",7003));
set.add(new HostAndPort("192.168.223.158",7004));
set.add(new HostAndPort("192.168.223.158",7005));
set.add(new HostAndPort("192.168.223.158",7006));
//创建一个Jedis集群对象---需要传入redis集群服务的地址信息
JedisCluster jedisCluster=new JedisCluster(set);
jedisCluster.set("k66","v66");
System.out.println(jedisCluster.get("k66"));
jedisCluster.close();
}
}
2.springboot整合reids
springboot在整合redis时会自动封装了两个类:
RedisTemplate和StringRedisTemplate.
StringRedisTemplate它是RedisTemplate的子类,StringRedisTemplate它里面存储的key和value都是字符串类型
(1)引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
(2)配置文件
# 连接单机redis
spring.redis.host=192.168.223.158 # ip
spring.redis.port=6379 # 端口号
2.1使用StringRedisTemplate
@SpringBootTest
class JedisApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;//starter自动完成redis的装配
@Test
void contextLoads() {
/*1.key操作*/
// Boolean kk = stringRedisTemplate.delete("kk");
// System.out.println(kk);
// Boolean kk1 = stringRedisTemplate.hasKey("kk");
// System.out.println("指定key是否存在"+kk1);
// Set<String> keys = stringRedisTemplate.keys("*");
// System.out.println("查看本库说有key"+keys);
/*2. 关于字符串的操作:默认springboot中redistemplate不能直接操作数据类型的命令。
但是springboot中redisTemplate为每个数据类型都提供了一个类*/
//对应的类可以操作对应的数据类型
//ValueOperations: 专门操作字符串类型
ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
valueOperations.set("k88","今天看到了什么");
//存入数据 60s后过期
valueOperations.set("k99","过期时间",60, TimeUnit.SECONDS);
// 过期时间 第二种方法
Duration duration = Duration.ofDays(5);//时间5天 后过期
valueOperations.set("tianlong","乾坤大挪移",duration);
/*3.关于hsah 类型的操作*/
HashOperations<String, Object, Object> hashOperations = stringRedisTemplate.opsForHash();
hashOperations.put("史莱克1","name","唐三");
hashOperations.put("史莱克1","age","23");
hashOperations.put("史莱克1","gender","男");
Map<Object, Object> map= new HashMap<>();
map.put("name","小舞");
map.put("age","10w");
map.put("gender","女");
hashOperations.putAll("史莱克2",map);
}
}
2.2使用RedisTemplate
org.springframework.data.redis.serializer.SerializationException: 要求存入的key和value必须经过了序列化。
思考:
存入字符串类型没有报错而存入User对象报错。【因为String序列化接口了,而User类没有实现序列化接口】
思考:
因为默认采用的是JDK序列化方式---无法看懂.---需要认为设置序列化方式
使用RedisTemplate 需要序列化,如果每次使用RedisTemplate都要序列化实在优点麻烦。 人为创建RedisTemplate类对象并交于spring容器管理。
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
template.setConnectionFactory(factory);
//key序列化方式
template.setKeySerializer(redisSerializer);
//value序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
template.setHashKeySerializer(redisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}