关注我,精彩文章第一时间推送给你
java使用Lettuce客户端连接redis学习基本redis指令
参考try.redis.io进行以下几种存储类型的指令学习
string、list、set、zset、hash
由于Springboot 2.0 中redis客户端使用了Lettue,所以没使用jedis进行学习,依赖由于项目中引入了以下依赖,所以就不用别的了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--因为Springboot 2.0 中redis客户端使用了Lettue, 其依赖于commons-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
操作基本指令代码如下:
/**
* @author yunqing
* @description 参考 try.redis.io
* @date 2020/6/3 16:08
*/
@SpringBootTest
@Slf4j
public class LettuceTest {
RedisClient redisClient;
StatefulRedisConnection<String, String> redisConnection;
RedisCommands<String, String> sync;
/**
* @BeforeEach 注解在非静态方法上,所有测试方法之前执行
* @BeforeAll 注解在静态方法上,所有测试方法之前执行
*/
@BeforeEach
void connRedisByLettuce() {
RedisURI redisUri = RedisURI.builder()
.withHost("127.0.0.1")
.withPort(6379)
.withTimeout(Duration.of(10, ChronoUnit.SECONDS))
.build();
redisClient = RedisClient.create(redisUri);
redisConnection = redisClient.connect();
sync = redisConnection.sync();
}
/**
* 关闭连接
*/
@AfterEach
void closeConn() {
redisConnection.close();
redisClient.shutdown();
}
/**
* string类型set get
* ttl 返回-1永不超时
* ttl 返回-2不存在此key
*/
@Test
void string() {
log.info(sync.set("k1", "v1"));
sync.expire("k1", 1000); //设置1000秒超时
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info(sync.ttl("k1").toString()); //获取剩余超时时间
log.info(sync.get("k1"));
}
/**
* redis 列表,相当于链表
* lpush 左侧添加,是可变参数,可同时追加多个
* rpush 右侧添加,是可变参数,可同时追加多个
* lrange key 0 -1 获取列表第一到最后一个
* lpop key 删除列表左侧第一个
* rpop key 删除列表右侧第一个
* llen key 获取当前列表长度
*/
@Test
void redisList() {
sync.rpush("friends", "Tom", "yunqing");
sync.rpush("friends", "Bob", "kkk");
sync.lpush("friends", "peter");
log.info(sync.llen("friends").toString());
List<String> friends = sync.lrange("friends", 0, -1);
friends.forEach(System.out::println);
sync.lpop("friends");
sync.rpop("friends");
List<String> friends2 = sync.lrange("friends", 0, -1);
friends2.forEach(System.out::println);
log.info(sync.llen("friends").toString());
sync.expire("friends", 10);//设置1000秒过期
}
/**
* redis set集合
* 测试
*/
@Test
void redisSet() {
sync.sadd("names", "yunqing", "kkk", "tom", "tom", "a", "c", "b");
log.info("输出set集合[{}]", String.valueOf(sync.smembers("names")));
log.info("测试是否存在---------[{}]", sync.sismember("names", "yunqing"));
log.info("删除结果1成功,0失败---------[{}}]", sync.srem("names", "tom"));
log.info("输出集合[{}]", sync.smembers("names"));
sync.expire("names", 10);
}
/**
* 带排序的set集合
*/
@Test
void redisZSet() {
sync.zadd("names", 1, "yunqing");
sync.zadd("names", 3, "tom");
sync.zadd("names", 2, "kkk");
sync.zadd("names", 10, "tom");
sync.zadd("names", 5, "peter");
sync.zadd("names", 5, "bob");
log.info("查看集合所有[{}]---------", sync.zrange("names", 0, -1));
log.info("删除一个-----[{}]", sync.zrem("names", "peter"));
log.info("查看集合所有[{}]---------", sync.zrange("names", 0, -1));
sync.expire("names", 10);
}
/**
* hash格式存储
*/
@Test
void hash() {
sync.hset("user", "name", "yunqing");
sync.hset("user", "age", "26");
log.info("获取所有-----[{}]", sync.hgetall("user"));
Map<String, String> map = new HashMap<>();
map.put("sex", "男");
map.put("email", "10001");
sync.hmset("user", map);
log.info("获取所有-----[{}]", sync.hgetall("user"));
log.info("获取一个------[{}]", sync.hget("user", "email"));
sync.expire("user", 10);
}
}