1. 程式人生 > 其它 >Vue(10)——Vue元件二(data選項、區域性元件、元件通訊)

Vue(10)——Vue元件二(data選項、區域性元件、元件通訊)

redis簡介

redis是一個開源的、高效能的key-value非關係型資料庫,是為了解決高併發、高擴充套件,大資料儲存等系列問題而產生的資料庫解決方案。

redis提供了五種資料型別:

  1. string(字串)
  2. list(雙向連結串列)
  3. dict(hash表)
  4. set(集合)
  5. zset(排序set)

redis優點

  1. 讀寫速度快,它把資料都讀取到記憶體中操作。
  2. 支援資料持久化到硬碟當中。
  3. 提供了豐富的資料結構。
  4. 所有操作都是原子性,支援事務。要麼全部執行,要麼不執行。
  5. 支援主從複製,主句會自動將資料同步到從機,可以進行讀寫分離。

spring boot 整合redis

redis環境: vmware執行centos7。

  1. 匯入依賴座標
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 配置
    客戶端配置選擇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
  1. 測試是否配置成功
@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>

結果如下,說明已經整合成功

  1. 重新裝配RedisTemplate
    檢視原始碼,可知spring容器中已經自動生成了一個RedisTemplate和StringRedisTemplate例項,我們可以通過原始碼上的@ConditionalOnMissingBean,自己寫個配置類,覆蓋原始碼中的bean.

  2. 具體操作

    1. 寫配置類
      @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;
      	}
      }
      
      
    2. 寫序列化類
      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);
      	}
      }
      
    3. 封裝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);
      		}
      
      	}
      
    4. 執行測試類
      @Test
      void test1(){
      	System.out.println(redisUtil.hasKey("cc"));
      	System.out.println(redisUtil.del("cc"));
      	redisUtil.set("bb",serverConfig);
      }