平常測試redis操作命令,可能用的是cmd窗口 操作redis,記錄一下 java程序操作reids,
操作redis的方法 可以用Jedis ,在springboot 提供了兩種 方法操作 RedisTemplate 和StringRedisTemplate 兩種方法的區別 可參考:https://blog.csdn.net/yifanSJ/article/details/79513179
當然 springboot 中也可以使用Jedis ,本次記錄的是 如何使用RedisTemplate 操作reids的5種基本數據類型
- 在項目的pom文件中導入 操作redis所需要的依賴:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>springboot-redis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-redis</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <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>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.directory.studio/org.apache.commons.lang --> <dependency> <groupId>org.apache.directory.studio</groupId> <artifactId>org.apache.commons.lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <!-- <version>2.9.0</version> --> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
- 新建RedisTemplateUtil 注入 RedisTemplate
package com.example.demo.redisutil; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @Component public class RedisTemplateUtil { @Resource private RedisTemplate<String, Object> redisTemplate;
- 使用RedisTemplate 操作 String類型的數據:
1,將String類型存入到Redis當中:/** * redisTemplate操作普通字符串(存值) * * @param key * @param value */ public void redisSetString(String key, String value) { redisTemplate.opsForValue().set(key, value); }
2,從redis當中取出String類型的數據:
/** * redisTemplate操作普通字符串 (取值) * * @param key */ public Object redisGetString(String key) { return redisTemplate.opsForValue().get(key); }
3.設置reids key的過期時間(原來出現過設置過期時間不起作用,是因為先設置了過期時間 在去存入值到redis ):
/** * * 指定緩存失效時間 * * @param key * 鍵 * * @param time * 時間(秒) * * @return * */ public boolean expire(String key, long time) { try { if (time > 0) { redisTemplate.expire(key, time, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } }
- 使用RedisTemplate 操作List類型的數據:
1,將list類型存入到Redis當中:
/** * 將一個list集合存放到redis當中 * * @param key */ public void redisSetList(String key) { List<Integer> list = Arrays.asList(9, 2, 3, 4); for (Integer integer : list) { // 從當前的數據 向右添加 // redisTemplate.opsForList().rightPush(key, integer); // 從當前的數據 向左添加 redisTemplate.opsForList().leftPush(key, integer); } }
2,從redis中取出list數據:
/** * 獲取list(獲取0 -10 索引的數據) * * @param key * @return */ public Object getList(String key) { return redisTemplate.opsForList().range(key, 0, 10); }
3.獲取redis中list的長度:
/** * 獲取list指定key的長度 * * @param key * @return */ public Long getListSize(String key) { return redisTemplate.opsForList().size(key); }
- 使用RedisTemplate 操作hash類型的數據:
1.將hash存放到redis當中:/** * 將map存放到reids * * @param key */ public void setHash(String key) { Map<String, String> hashMap = new HashMap<>(); //使用RedisTemplate 有些情況會亂碼 hashMap.put("redis", "redis"); hashMap.put("mysql", "mysql"); for (Entry<String, String> keyValue : hashMap.entrySet()) { redisTemplate.opsForHash().put(key, keyValue.getKey(), keyValue.getValue()); } }
2.將hash從redis當中取出來 根據具體的key取出具體的值:
/** * 獲取指定key1的值 * * @param key * @param key1 * @return */ public Object getHash(String key, String key1) { // 檢測 是否 存在該鍵 boolean isKey = redisTemplate.opsForHash().hasKey(key, key1); return redisTemplate.opsForHash().get(key, key1); }
3.將key中所有的值都取出來:
/** * 獲取指定key的所有值 * * @param key * * @return */ public Object getHash(String key) { return redisTemplate.opsForHash().entries(key); }
4.根據具體的key移除具體的值:
/** * 根據具體key移除具體的值 * * @param key * * @return */ public void removeKey(String key, String key1) { redisTemplate.opsForHash().delete(key, key1); }
5.移除key值 則key里面的所有值都被移除:
public void removeStringKey(String key) { redisTemplate.delete(key); }
- 使用RedisTemplate 操作set類型的數據:
1.set數據存入redis中/** * set存入redis中 * * @param key */ public void setSet(String key) { Set<Object> set = new HashSet<>(); set.add("setKey"); set.add("tesetKey"); for (Object object : set) { redisTemplate.opsForSet().add(key, object); } }
2.從redis當中將set數據取出來:
/** * 從redis中取出set * * @param key * @return */ public Object getSet(String key) { return redisTemplate.opsForSet().members(key); }
- 使用RedisTemplate 操作sortset類型的數據:
1.將sortSet存放到redis當中:/** * sortset存入redis中 * * @param key */ public void setZSet(String key) { Set<Object> set = new HashSet<>(); set.add("setKey"); set.add("tesetKey"); int i = 0; for (Object object : set) { i++; redisTemplate.opsForZSet().add(key, object, i); } }
2.將sortset從redis當中取出來的API有很多:
/** * 從redis中取出sortset * * @param key * @return */ public Object getZSet(String key) { Long size = redisTemplate.opsForZSet().size(key); return redisTemplate.opsForZSet().rangeByScore(key, 0, size); }
- RedisTemplate操作5種基本類型數據,有一些共同的API 比如設置過期時間,和移除key的值,判斷key是否存在
1設置過期時間
/** * * 指定緩存失效時間 * * @param key * 鍵 * * @param time * 時間(秒) * * @return * */ public boolean expire(String key, long time) { try { if (time > 0) { redisTemplate.expire(key, time, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } }
2.檢測是否存在key
:/** * * 判斷key是否存在 * * @param key * 鍵 * * @return true 存在 false不存在 * */ public boolean checkKey(String key) { try { return redisTemplate.hasKey(key); } catch (Exception e) { e.printStackTrace(); return false; } }
3:移除緩存
/** * 移除key * @param key */ public void removeKey(String key) { redisTemplate.delete(key); }
- 掌握redis,首先得掌握reids如何操作5種基本數據類型,5種基本數據類型中 set和sortset的區別需要特別注意,然后就是關於使用RedisTemplate 可能亂碼的問題,以及StringRedisTemplate 的區別,