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);
}
}