一.jedis
jedis就是通过java来使用redis的客户端工具
jedis连接
1.引依赖坐标
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
2.建立连接
private Jedis jedis;
@BeforeEach
void setUp(){
//建立连接
jedis = new Jedis("192.168.159.129",6379);
//设置密码
jedis.auth("123456");
//选择库
jedis.select(0);
}
3.使用jedis
@Test
void test(){
//插入数据,方法名称就是redis命令名称
String result = jedis.set("name","jack");
System.out.println(result);
//获取数据
String name = jedis.get("name");
System.out.println(name);
}
4.释放资源
@AfterEach
void tearDown(){
if(jedis!=null){
jedis.close;
}
}
jedis连接池
jedis本身是线程不安全的,频繁的创建和销毁会有性能损耗,故推荐使用连接池
public class TestJedisPool {
@Test
public void test01(){
// 1:创建连接池的配置对象
JedisPoolConfig config = new JedisPoolConfig();
//设置最大链接数
config.setMaxTotal(20);
//设置空闲连接数
config.setMaxIdle(10);
// 2:创建连接池 参1:Redis服务器ip地址 参2:端口号
JedisPool pool = new JedisPool(config, "localhost", 6379);
// 3:从连接池中获取一个连接
Jedis jedis = pool.getResource();//获取一个连接
// 4:执行Redis执行 Map<String,String> set get
jedis.set("name","JedisPool连接池");
String value = jedis.get("name");
System.out.println(value);
// 5:释放连接
jedis.close();
}
}
二.SpringDataRedis
提供RedisTemplate统一API操作Redis
但是缺点是可读性插,易出bug
所以使用JSON的序列化方式,但是这样会带来额外开销
所以推荐统一使用String序列化器
Spring默认提供了一个StringRedisTemplate类,key和value就是使用String序列化方式.
@Autowired
private StringRedisTemplate stringRedisTemplate;
//JSON工具
private static final ObjectMapper mapper = new ObjectMapper();
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@Test
void testString1(){
redisTemplate.opsForValue().set("user",new DemoUser("zhangsan",18));
DemoUser user = (DemoUser) redisTemplate.opsForValue().get("user");
System.out.println(user);
}
@Test
void testString2() throws JsonProcessingException {
//准备对象
DemoUser user = new DemoUser("虎哥",18);
//手动序列化
String json = mapper.writeValueAsString(user);
//写入一条数据到redis
stringRedisTemplate.opsForValue().set("user:12",json);
//读取数据
String val = stringRedisTemplate.opsForValue().get("user:12");
//反序列化
DemoUser user1 = mapper.readValue(val,DemoUser.class);
System.out.println(user1);
}