redis常用操作
redis中常用的数据类型操作;
- redisTemplate.opsForValue(); 用来操作String数据类型
- redisTemplate.opsForHash(); 用来操作Hash数据类型
- redisTemplate.opsForList(); 用来操作List数据类型
- redisTemplate.opsForSet(); 用来操作Set数据类型
- redisTemplate.opsForZSet(); 用来操作ZSet数据类型
String数据类型保存操作
@Test
public void stringTest() {
//不会过期
redisTemplate.opsForValue().set("k1", "v1");
//10秒后过期
redisTemplate.opsForValue().set("k2", "v2", 10, TimeUnit.SECONDS);
//替换
redisTemplate.opsForValue().set("k1", "w", 0);
//先判断key是否存在 当key存在时不操作,不存在时执行保存操作
redisTemplate.opsForValue().setIfAbsent("k2", "v2");
//保存多个
Map<String, String> map = new HashMap<>(16);
map.put("k3", "v3");
map.put("k4", "v4");
map.put("k5", "v5");
redisTemplate.opsForValue().multiSet(map);
//追加字符串,当key存在时会追加字符串,不存在则执行保存操作
redisTemplate.opsForValue().append("k1","te");
}
String数据类型获取操作
@Test
public void stringGetTest() {
//获取key为k1的数据
Object k1 = redisTemplate.opsForValue().get("k1");
System.out.println(k1);
//获取k1的值并截取,从0开始到1的值
String k11 = redisTemplate.opsForValue().get("k1", 1, 1);
System.out.println(k11);
//批量获取
ArrayList<String> list = new ArrayList<>();
list.add("k1");
list.add("k3");
List<Object> objects = redisTemplate.opsForValue().multiGet(list);
System.out.println(objects);
//获取key 的长度
Long size = redisTemplate.opsForValue().size("k1");
System.out.println(size);
}
删除key
@Test
public void deleteTest() {
// 删除
redisTemplate.delete("k1");
//删除多个
ArrayList<String> list = new ArrayList<>();
list.add("k1");
list.add("k3");
redisTemplate.delete(list);
}
操作Hash数据类型
@Test
public void saveHashTest() {
UserDTO userDTO = new UserDTO();
userDTO.setId(1);
userDTO.setUsername("redis");
userDTO.setCreateTime(LocalDateTime.now());
//保存对象
redisTemplate.opsForHash().put("dt","3",userDTO);
// 根据key 查看值是否存在
Boolean dt = redisTemplate.opsForHash().hasKey("dt", "3");
System.out.println(dt);
// 获取key中的值
Object dt1 = redisTemplate.opsForHash().get("dt", "3");
System.out.println(dt1);
//获取所有key
Set<Object> keys = redisTemplate.opsForHash().keys("dt");
for (Object key : keys) {
System.out.println(key);
}
//获取所有value
List<Object> values = redisTemplate.opsForHash().values("dt");
for (Object value : values) {
System.out.println(value);
}
Map<Object, Object> entries = redisTemplate.opsForHash().entries("dt");
entries.forEach((k,v)->{
System.out.println(k);
System.out.println(v);
});
//删除
redisTemplate.opsForHash().delete("dt", 1);
}
操作List数据类型
@Test
public void listTest() {
//从左边插入
redisTemplate.opsForList().leftPush("Lk1", "左边");
redisTemplate.opsForList().leftPush("Lk1", "左边1");
//添加多个
redisTemplate.opsForList().leftPushAll("Lk1", "L1", "L2");
//从右边插入
redisTemplate.opsForList().rightPush("Rk1", "右边1");
//从左边获取一个
Object lk1 = redisTemplate.opsForList().leftPop("Lk1");
System.out.println(lk1);
Object lk11 = redisTemplate.opsForList().rightPop("Lk1");
System.out.println(lk11);
//获取key为LK1,索引值为0 的数数据
Object lk12 = redisTemplate.opsForList().index("Lk1", 0);
System.out.println(lk12);
//获取key为LK1,索引值为2 的数数据
Object index2 = redisTemplate.opsForList().index("Lk1", 1);
System.out.println(index2);
//范围查找
List<Object> lk13 = redisTemplate.opsForList().range("Lk1", 0, 1);
System.out.println(lk13);
//删除
//从右边删除一个元素
Object lk14 = redisTemplate.opsForList().rightPop("Lk1");
System.out.println(lk14);
//从左边删除一个元素
Object lk15 = redisTemplate.opsForList().leftPop("Lk1");
System.out.println(lk14);
//指定删除元素
// l=0 删除所有元素等于L2的元素
// l>0 删除左边起第几个元素等于L2的元素
// l<0 删除右边起起第几个元素等于L2的元素
Long remove = redisTemplate.opsForList().remove("Lk1", 2, "L2");
System.out.println(remove);
}
操作Set数据类型
@Test
public void setTest() {
//添加操作
redisTemplate.opsForSet().add("Sk1", "xiao");
redisTemplate.opsForSet().add("Sk1", "xiao", "ming","dat","wang");
//获取操作
//查询所有
Set<Object> members = redisTemplate.opsForSet().members("Sk1");
for (Object member : members) {
System.out.println(member);
}
//随机获取
Object sk1 = redisTemplate.opsForSet().randomMember("Sk1");
System.out.println(sk1);
//随机获取多个
List<Object> sk11 = redisTemplate.opsForSet().randomMembers("Sk1", 2);
for (Object o : sk11) {
System.out.println(o);
}
}
删除操作
@Test
public void setDeleteTest() {
// 删除
Long sk1 = redisTemplate.opsForSet().remove("Sk1", "xiao");
System.out.println(sk1);
//随机删除几个元素
List<Object> sl1 = redisTemplate.opsForSet().pop("Sl1", 1);
for (Object o : sl1) {
System.out.println(o);
}
}
常用集合操作
@Test
public void setUTest() {
//添加操作
// redisTemplate.opsForSet().add("Sk2", "xiao", "woshi", "liwang", "mazi");
// redisTemplate.opsForSet().add("Sk1", "xiao", "ming", "dat", "wang", "mazi");
//交集
Set<Object> intersect = redisTemplate.opsForSet().intersect("Sk1", "Sk2");
for (Object o : intersect) {
System.out.println(o);
}
//并集
Set<Object> union = redisTemplate.opsForSet().union("Sk1", "Sk2");
for (Object o : union) {
System.out.println(o);
}
//差集
Set<Object> difference = redisTemplate.opsForSet().difference("Sk1", "Sk2");
for (Object o : difference) {
System.out.println(o);
}
}