第一种方法:使用RedisTemplate实现
1、导入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
2、编写配置类
spring:
redis:
password: 123456
3、创建实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime localDateTime;
}
4、编写测试类
private RedisTemplate redisTemplate;
@Resource
public void setRedisTemplate(RedisTemplate redisTemplate) {
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(new GenericFastJsonRedisSerializer());
this.redisTemplate = redisTemplate;
}
@Test
void setredis() {
User user = new User(1001,"张无忌", LocalDateTime.now());
BoundValueOperations ops = redisTemplate.boundValueOps("stu:user:1001");
ops.set(user);
System.out.println("保存成功");
}
@Test
void getredis(){
BoundValueOperations ops = redisTemplate.boundValueOps("stu:user:1001");
Object o = ops.get();
System.out.println("ops = " + o);
}
5、先运行setredis 再运行getredis
第二种方法:使用Jedis实现
1、导入jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.0</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.7.1</version>
<scope>test</scope>
</dependency>
2、在测试中 实现五种类型 添加到redis中
private Jedis jedis;
@BeforeEach
void setredis() {
//1.建立连接
jedis = new Jedis("127.0.0.1", 6379);
//2.设置密码
jedis.auth("123456");
//3.选择数据库
jedis.select(1);
}
//测试string
@Test
void teststring() {
//存入数据
jedis.set("name", "小花");
String name = jedis.get("name");
System.out.println("name = " + name);
}
//测试hash
@Test
void testhash() {
//再user:1中插入name和age的数据
jedis.hset("user:1", "name", "张三");
jedis.hset("user:1", "age", "20");
//获取hash中的值
Map<String, String> stringStringMap = jedis.hgetAll("user:1");
System.out.println("stringStringMap = " + stringStringMap);
}
//测试list
@Test
void testlist() {
jedis.lpush("stu", "张二", "张三");
jedis.rpush("stu", "张五", "张六");
List<String> stu = jedis.lrange("stu", 0, 7);
for (String s : stu) {
System.out.println("s = " + s);
}
}
//测试set
@Test
void testset() {
jedis.sadd("demo", "a", "b", "c", "张三");
long srem = jedis.srem("demo", "张三");
System.out.println("srem = " + srem);
long demo1 = jedis.scard("demo");
System.out.println("demo1 = " + demo1);
boolean sismember = jedis.sismember("demo", "张三");
System.out.println("sismember = " + sismember);
Set<String> demo = jedis.smembers("demo");
System.out.println(demo);
}
//测试sortedset
@Test
void testsored() {
jedis.zadd("student",98,"张一");
long student = jedis.zcard("student");
System.out.println("student = " + student);
}
@AfterEach
public void tearDown() {
if (jedis != null) {
jedis.close();
}
}
3、运行结果
第三种方式:JedisPool实现,Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能,在多线程下使⽤同⼀个Jedis对象会出现并发问题。也为了避免每次使⽤Jedis对象时都需要重新构建,Jedis提供了JedisPool。JedisPool是基于Commons Pool 2实现的⼀个线程安全的连接池
1、引入依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.0</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.7.1</version>
<scope>test</scope>
</dependency>
2、创建config问价 ,创建一个JedisConnectionFactory 类。
public class JedisConnectionFactory {
private static final JedisPool jedisPool;
static {
JedisPoolConfig poolConfig = new JedisPoolConfig();//配置连接池
poolConfig.setMaxTotal(8);// 最大连接•
poolConfig.setMaxIdle(8);// 最大空闲连接
poolConfig.setMinIdle(0);// 最小空闲连接
poolConfig.setMaxWaitMillis(200); // 设置最长等待时间, ms
jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379,1000,"123456"); //创建连接池对象
}
public static Jedis getJedis(){ //获取Jedis对象
return jedisPool.getResource();
}
}
3、在测试中调用JedisConnectionFactory 来连接redis来实现五种连接方式
private Jedis jedis;
@BeforeEach
void setredis() {
//1.建立连接
jedis= JedisConnectionFactory.getJedis();
//2.设置密码
jedis.auth("123456");
//3.选择数据库
jedis.select(1);
}
//测试string
@Test
void teststring() {
//存入数据
jedis.set("name", "小花");
String name = jedis.get("name");
System.out.println("name = " + name);
}
//测试hash
@Test
void testhash() {
//再user:1中插入name和age的数据
jedis.hset("user:1", "name", "张三");
jedis.hset("user:1", "age", "20");
//获取hash中的值
Map<String, String> stringStringMap = jedis.hgetAll("user:1");
System.out.println("stringStringMap = " + stringStringMap);
}
//测试list
@Test
void testlist() {
jedis.lpush("stu", "张二", "张三");
jedis.rpush("stu", "张五", "张六");
List<String> stu = jedis.lrange("stu", 0, 7);
for (String s : stu) {
System.out.println("s = " + s);
}
}
//测试set
@Test
void testset() {
jedis.sadd("demo", "a", "b", "c", "张三");
long srem = jedis.srem("demo", "张三");
System.out.println("srem = " + srem);
long demo1 = jedis.scard("demo");
System.out.println("demo1 = " + demo1);
boolean sismember = jedis.sismember("demo", "张三");
System.out.println("sismember = " + sismember);
Set<String> demo = jedis.smembers("demo");
System.out.println(demo);
}
//测试sortedset
@Test
void testsored() {
jedis.zadd("student",98,"张一");
long student = jedis.zcard("student");
System.out.println("student = " + student);
}
@AfterEach
public void tearDown() {
if (jedis != null) {
jedis.close();
}
}