java操作redis

本文详细介绍了如何在Java项目中整合Redis,包括普通Maven项目与SpringBoot的集成,连接Redis集群,以及利用Redis实现缓存和分布式锁。内容涵盖Jedis和SpringBoot的RedisTemplate使用,缓存穿透解决方案,以及利用Redis的setnx指令实现分布式锁。
摘要由CSDN通过智能技术生成

一:使用普通Maven项目整合redis

在使用maven整合jedis之前,首先要保证redis部署的虚拟机的防火墙是关闭的状态,否则会连接不上redis。

1.加入jedis依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.0</version>
</dependency>

2.创建jedis对象

创建jedis对象的时候,需要传入两个参数,分别是redis部署的IP地址和redis的端口号。

Jedis jedis = new Jedis("192.168.116.29",6379);

 3.使用jedis进行写入和读取操作

使用jedis执行的方法跟我们直接使用redis命令是一样的

jedis.set("jedis01","1");
jedis.set("jedis02","2");
/**
 * 获取所有的key
 */
Set<String> keys = jedis.keys("*");
for (String key : keys) {
    System.out.println(key);
}

HashMap map = new HashMap();
map.put("name","zs");
map.put("age","20");
map.put("sex","nan");
jedis.hset("user",map);
Map<String, String> user = jedis.hgetAll("user");
System.out.println(user);

二:springboot整合redis

1.创建springboot项目

在创建springboot项目的时候,选择引入两个依赖,一个是spring web,一个是spring date redis,这样我们就不需要手动去添加依赖

2.修改配置文件

在springboot的配置文件中,指定连接的redis的ip地址和端口号

# 配置redis
spring.redis.host=192.168.116.29
spring.redis.port=6379

3.使用StringRedisTemplate模板执行对redis的操作 

springboot提供了一个StringRedisTemplate类,这个类可以用来执行对redis的读写操作,通过StringRedisTemplate 对象获取到 ValueOperations 对象,再通过 ValueOperations 对象执行对redis的读写,使用的方法与原本redis命令不相同。

①执行对Sting类型的数据操作

// 获取操作String类型的对象
ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
opsForValue.set("opsForValue","1");
String value = opsForValue.get("opsForValue");
System.out.println(value);
Set<String> keys = stringRedisTemplate.keys("*");
for (String key : keys) {
    System.out.println(key);
}
// ValueOperations对象没有setnx方法,但是有 setIfAbsent 方法,
// 相当于setnx,会返回一个boolean类型数据,true就是写入成功,false就是写入失败
Boolean ifAbsent = opsForValue.setIfAbsent("opsForValue", "2");
System.out.println(ifAbsent);
// 一次写入多个key value,在redis命令中是mset,ValueOperations 对象是使用multiSet方法
Map map = new HashMap();
map.put("name","lisi");
map.put("age","20");
opsForValue.multiSet(map);

②执行对Hash类型数据的操作

HashOperations<String, Object, Object> opsForHash = stringRedisTemplate.opsForHash();
// 执行redis命令中的hset
opsForHash.put("hash1","name","zs");
opsForHash.put("hash1","age","20");
// 执行hget key filed 获取某个key中的每一列值
Object o = opsForHash.get("hash1", "name");
System.out.println(0);
// 获取key中的所有列
System.out.println(opsForHash.keys("hash1"));
// 获取key中的所有value
System.out.println(opsForHash.values("hash1"));
// 获取key中的所有列何其对应的value
System.out.println(opsForHash.entries("hash1"));

4.使用RedisTemplate模板执行对redis的操作

springboot提供了一个RedisTemplate类,这个类可以用来执行对redis的读写操作,通过StringRedisTemplate 对象获取到 ValueOperations 对象,再通过 ValueOperations 对象执行对redis的读写,使用的方法与原本redis命令不相同。 

RedisTemplate类和StringRedisTemplate类不同的是,使用RedisTemplate类执行的操作需要对数据进行序列化,如果不指定则是默认使用jdk序列化。

①执行对Sting类型的数据操作

/**
 * RedisTemplate默认会使用JDK序列化方式对我们set的key和value进行序列化
 * 将序列化后的值存入redis中,所以当我们不手动指定序列化的方式的时候
 * 如果想要将对象存入到redis中,需要将实体类实现 Serializable 接口。
 * 并且经过jdk序列化的数据可能会产生乱码,能存入redis,但是无法进行读取。
 * 所以通常情况下,我们一般都要手动指定RedisTemplate序列化的方式。
 * 这样实体类不用实现接口,并且存入redis的数据更小
 */
// 设置String类型数据key的序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
// 设置String类型数据value的序列化方式
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
ValueOperations opsForValue = redisTemplate.opsForValue();
User user = new User();
user.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值