Vue(10)——Vue元件二(data選項、區域性元件、元件通訊)
阿新 • • 發佈:2022-04-07
redis簡介
redis是一個開源的、高效能的key-value非關係型資料庫,是為了解決高併發、高擴充套件,大資料儲存等系列問題而產生的資料庫解決方案。
redis提供了五種資料型別:
- string(字串)
- list(雙向連結串列)
- dict(hash表)
- set(集合)
- zset(排序set)
redis優點
- 讀寫速度快,它把資料都讀取到記憶體中操作。
- 支援資料持久化到硬碟當中。
- 提供了豐富的資料結構。
- 所有操作都是原子性,支援事務。要麼全部執行,要麼不執行。
- 支援主從複製,主句會自動將資料同步到從機,可以進行讀寫分離。
spring boot 整合redis
redis環境: vmware執行centos7。
- 匯入依賴座標
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置
客戶端配置選擇lettuce,因為redis start中引用的是它
spring: redis: # Redis資料庫索引(預設為0) database: 2 # Redis伺服器地址 host: 192.162.163.3 # Redis伺服器連線埠 port: 6379 # Redis伺服器連線密碼(預設為空) password: 123456 # 連線超時時間(毫秒) timeout: 5000 lettuce: pool: # 連線池最大連線數(使用負值表示沒有限制) max-active: 200 # 連線池最大阻塞等待時間(使用負值表示沒有限制) max-wait: 10000 # 連線池中的最大空閒連線 max-idle: 200 # 連線池中的最小空閒連線 min-idle: 0
- 測試是否配置成功
@Autowired
StringRedisTemplate redisTemplate;
@Test
void test1(){
redisTemplate.opsForValue().set("cc","二狗蛋");
}
此時會報錯,Error creating bean with name 'redisConnectionFactory'
原因:因為lettuce,依賴commons-pool2,所以引入該包即可。
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
結果如下,說明已經整合成功
-
重新裝配RedisTemplate
檢視原始碼,可知spring容器中已經自動生成了一個RedisTemplate和StringRedisTemplate例項,我們可以通過原始碼上的@ConditionalOnMissingBean,自己寫個配置類,覆蓋原始碼中的bean. -
具體操作
- 寫配置類
@Configuration public class RedisConfig { /** * 自定義redisTemplate,就不會使用預設的redisTemplate */ @Bean(name = "redisTemplate") public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){ RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>(); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class); FastJson2JsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJson2JsonRedisSerializer<>(Object.class); redisTemplate.setConnectionFactory(redisConnectionFactory); //redis開啟事務 redisTemplate.setEnableTransactionSupport(true); redisTemplate.setKeySerializer(stringRedisSerializer); //使用Fastjson2JsonRedisSerializer來序列化和反序列化redis的value值 redisTemplate.setValueSerializer(fastJsonRedisSerializer); redisTemplate.setHashKeySerializer(stringRedisSerializer); redisTemplate.setHashValueSerializer(fastJsonRedisSerializer); redisTemplate.setDefaultSerializer(stringRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } }
- 寫序列化類
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> { private Class<T> clazz; static { ParserConfig.getGlobalInstance().setAutoTypeSupport(true); //如果遇到反序列化autoType is not support錯誤,請新增並修改一下包名到bean檔案路徑 //ParserConfig.getGlobalInstance().addAccept("com.example.redisdemo.domain"); } public FastJson2JsonRedisSerializer(Class<T> clazz){ super(); this.clazz = clazz; } @Override public byte[] serialize(T t) throws SerializationException { if (t ==null) { return new byte[0]; } return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(StandardCharsets.UTF_8); } @Override public T deserialize(byte[] bytes) throws SerializationException { if (bytes == null || bytes.length <= 0){ return null; } String str = new String(bytes,StandardCharsets.UTF_8); return JSON.parseObject(str,clazz); } }
- 封裝redis工具類(簡單實現,可以自己補充)
@Component public class RedisUtil { @Autowired private RedisTemplate<String, Object> redisTemplate; /** * 判斷是否存在 * @param key * @return */ public Boolean hasKey(String key) { Boolean flag = false; if (StringUtils.hasText(key)){ flag = redisTemplate.hasKey(key); } return flag; } /** * 新增 * @param key * @param value */ public void set(String key,Object value){ redisTemplate.opsForValue().set(key,value); } /** * 獲取 * @param key * @return */ public Object get(String key){ return redisTemplate.opsForValue().get(key); } /** * 刪除 * @param key * @return */ public Boolean del(String key){ return redisTemplate.delete(key); } }
- 執行測試類
@Test void test1(){ System.out.println(redisUtil.hasKey("cc")); System.out.println(redisUtil.del("cc")); redisUtil.set("bb",serverConfig); }
- 寫配置類