久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      詳解SpringBoot集成redis

      詳解SpringBoot集成redis

      今天,日月在這里教大家如何使用springBoot集成redis,說(shuō)實(shí)話比較簡(jiǎn)單,網(wǎng)上也有大把的教程。先套用一下網(wǎng)上的簡(jiǎn)介。
      定義

      REmote DIctionary Server(Redis) 是一個(gè)由Salvatore Sanfilippo寫(xiě)的key-value存儲(chǔ)系統(tǒng)。
      Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。
      它通常被稱(chēng)為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類(lèi)型。
      reids的優(yōu)點(diǎn)

      以下是Redis的一些優(yōu)點(diǎn)。

      異???– Redis非常快,每秒可執(zhí)行大約110000次的設(shè)置(SET)操作,每秒大約可執(zhí)行81000次的讀取/獲取(GET)操作。
      支持豐富的數(shù)據(jù)類(lèi)型 – Redis支持開(kāi)發(fā)人員常用的大多數(shù)數(shù)據(jù)類(lèi)型,例如列表,集合,排序集和散列等等。這使得Redis很容易被用來(lái)解決各種問(wèn)題,因?yàn)槲覀冎滥男﹩?wèn)題可以更好使用地哪些數(shù)據(jù)類(lèi)型來(lái)處理解決。
      操作具有原子性 – 所有Redis操作都是原子操作,這確保如果兩個(gè)客戶端并發(fā)訪問(wèn),Redis服務(wù)器能接收更新的值。
      多實(shí)用工具 – Redis是一個(gè)多實(shí)用工具,可用于多種用例,如:緩存,消息隊(duì)列(Redis本地支持發(fā)布/訂閱),應(yīng)用程序中的任何短期數(shù)據(jù),例如,web應(yīng)用程序中的會(huì)話,網(wǎng)頁(yè)命中計(jì)數(shù)等。

      推薦(免費(fèi)):redis

      Redis 安裝

      Window 下安裝
      下載地址:https://github.com/MSOpenTech/redis/releases。
      Redis 支持 32 位和 64 位。這個(gè)需要根據(jù)你系統(tǒng)平臺(tái)的實(shí)際情況選擇,這里我們下載 Redis-x64-xxx.zip壓縮包到 C 盤(pán),解壓后,將文件夾重新命名為 redis。

      打開(kāi)一個(gè) cmd 窗口 使用cd命令切換目錄到 C:redis
      運(yùn)行 redis-server.exe redis.windows.conf
      如果想方便的話,可以把 redis 的路徑加到系統(tǒng)的環(huán)境變量里,這樣就省得再輸路徑了,后面的那個(gè) redis.windows.conf 可以省略,如果省略,會(huì)啟用默認(rèn)的。輸入之后,會(huì)顯示如下界面:
      詳解SpringBoot集成redis

      集成redis

      我們還是延用上一章的項(xiàng)目:Springboot集成springcloud-config實(shí)現(xiàn)dataSource熱部署

      1、添加依賴(lài)

      <!--集成redis--> <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-redis</artifactId>     <version>1.4.1.RELEASE</version> </dependency> <dependency>     <groupId>com.alibaba</groupId>     <artifactId>fastjson</artifactId>     <version>1.2.3</version> </dependency> <dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-databind</artifactId> </dependency>

      2、在配置中心里添加redis配置

      spring.redis.host=127.0.0.1 #Redis服務(wù)器連接端口 spring.redis.port=6379 #Redis服務(wù)器連接密碼(默認(rèn)為空) spring.redis.password= #連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制) spring.redis.pool.max-active=8 #連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制) spring.redis.pool.max-wait=-1 #連接池中的最大空閑連接 spring.redis.pool.max-idle=8 #連接池中的最小空閑連接 spring.redis.pool.min-idle=0 #連接超時(shí)時(shí)間(毫秒) spring.redis.timeout=30000

      3、配置類(lèi)RedisConfig

      import java.lang.reflect.Method; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import com.fasterxml.jackson.annotation.PropertyAccessor;  import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.databind.ObjectMapper; @Configuration @EnableCaching @RefreshScope public class RedisConfig extends CachingConfigurerSupport{     @Value("${spring.redis.host}")     private String host;     @Value("${spring.redis.port}")     private int port;     @Value("${spring.redis.timeout}")     private int timeout;     @Value("${spring.redis.password}")     private String password;     @Value("${spring.redis.pool.max-active}")     private int maxActive;     @Value("${spring.redis.pool.max-wait}")     private int maxWait;     @Value("${spring.redis.pool.max-idle}")     private int maxIdle;     @Value("${spring.redis.pool.min-idle}")     private int minIdle;          @RefreshScope     @Bean     public KeyGenerator wiselyKeyGenerator(){         return new KeyGenerator() {             @Override             public Object generate(Object target, Method method, Object... params) {                 StringBuilder sb = new StringBuilder();                 sb.append(target.getClass().getName());                 sb.append(method.getName());                 for (Object obj : params) {                     sb.append(obj.toString());                 }                 return sb.toString();             }         };     }          @RefreshScope     @Bean     public JedisConnectionFactory redisConnectionFactory() {         JedisConnectionFactory factory = new JedisConnectionFactory();         factory.setHostName(host);         factory.setPort(port);         factory.setTimeout(timeout); //設(shè)置連接超時(shí)時(shí)間         factory.setPassword(password);         factory.getPoolConfig().setMaxIdle(maxIdle);         factory.getPoolConfig().setMinIdle(minIdle);         factory.getPoolConfig().setMaxTotal(maxActive);         factory.getPoolConfig().setMaxWaitMillis(maxWait);         return factory;     }          @RefreshScope     @Bean     public CacheManager cacheManager(RedisTemplate redisTemplate) {         RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);         // Number of seconds before expiration. Defaults to unlimited (0)         cacheManager.setDefaultExpiration(10); //設(shè)置key-value超時(shí)時(shí)間         return cacheManager;     }          @RefreshScope     @Bean     public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {         StringRedisTemplate template = new StringRedisTemplate(factory);         setSerializer(template); //設(shè)置序列化工具,這樣ReportBean不需要實(shí)現(xiàn)Serializable接口         template.afterPropertiesSet();         return template;     }          @RefreshScope     private void setSerializer(StringRedisTemplate template) {         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);         ObjectMapper om = new ObjectMapper();         om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);         om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);         jackson2JsonRedisSerializer.setObjectMapper(om);         template.setValueSerializer(jackson2JsonRedisSerializer);     } }

      4、RedisUtils類(lèi)

      import java.io.Serializable; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.ListOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.SetOperations; import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Service; @Service public class RedisUtils {     @Autowired     private RedisTemplate redisTemplate;     /**      * 寫(xiě)入緩存      * @param key      * @param value      * @return      */     public boolean set(final String key, Object value) {         boolean result = false;         try {             ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();             operations.set(key, value);             result = true;         } catch (Exception e) {             e.printStackTrace();         }         return result;     }     /**      * 寫(xiě)入緩存設(shè)置時(shí)效時(shí)間      * @param key      * @param value      * @return      */     public boolean set(final String key, Object value, Long expireTime ,TimeUnit timeUnit) {         boolean result = false;         try {             ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();             operations.set(key, value);             redisTemplate.expire(key, expireTime, timeUnit);             result = true;         } catch (Exception e) {             e.printStackTrace();         }         return result;     }     /**      * 批量刪除對(duì)應(yīng)的value      * @param keys      */     public void remove(final String... keys) {         for (String key : keys) {             remove(key);         }     }     /**      * 批量刪除key      * @param pattern      */     public void removePattern(final String pattern) {         Set<Serializable> keys = redisTemplate.keys(pattern);         if (keys.size() > 0){             redisTemplate.delete(keys);         }     }     /**      * 刪除對(duì)應(yīng)的value      * @param key      */     public void remove(final String key) {         if (exists(key)) {             redisTemplate.delete(key);         }     }     /**      * 判斷緩存中是否有對(duì)應(yīng)的value      * @param key      * @return      */     public boolean exists(final String key) {         return redisTemplate.hasKey(key);     }     /**      * 讀取緩存      * @param key      * @return      */     public Object get(final String key) {         Object result = null;         ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();         result = operations.get(key);         return result;     }     /**      * 哈希 添加      * @param key      * @param hashKey      * @param value      */     public void hmSet(String key, Object hashKey, Object value){         HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();         hash.put(key,hashKey,value);     }     /**      * 哈希獲取數(shù)據(jù)      * @param key      * @param hashKey      * @return      */     public Object hmGet(String key, Object hashKey){         HashOperations<String, Object, Object>  hash = redisTemplate.opsForHash();         return hash.get(key,hashKey);     }     /**      * 列表添加      * @param k      * @param v      */     public void lPush(String k,Object v){         ListOperations<String, Object> list = redisTemplate.opsForList();         list.rightPush(k,v);     }     /**      * 列表獲取      * @param k      * @param l      * @param l1      * @return      */     public List<Object> lRange(String k, long l, long l1){         ListOperations<String, Object> list = redisTemplate.opsForList();         return list.range(k,l,l1);     }     /**      * 集合添加      * @param key      * @param value      */     public void add(String key,Object value){         SetOperations<String, Object> set = redisTemplate.opsForSet();         set.add(key,value);     }     /**      * 集合獲取      * @param key      * @return      */     public Set<Object> setMembers(String key){         SetOperations<String, Object> set = redisTemplate.opsForSet();         return set.members(key);     }     /**      * 有序集合添加      * @param key      * @param value      * @param scoure      */     public void zAdd(String key,Object value,double scoure){         ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();         zset.add(key,value,scoure);     }     /**      * 有序集合獲取      * @param key      * @param scoure      * @param scoure1      * @return      */     public Set<Object> rangeByScore(String key,double scoure,double scoure1){         ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();         return zset.rangeByScore(key, scoure, scoure1);     }

      5、測(cè)試,修改controller

      import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.chenqi.springboot.redis.RedisUtils; import com.chenqi.springboot.service.TestService; @RestController public class SpringBootController {          public static final Logger log = LoggerFactory.getLogger(SpringBootController.class);          @Autowired     TestService testService;          @Autowired     private RedisUtils redisUtils;     @RequestMapping(value = "/hello/{id}")     public String hello(@PathVariable(value = "id") String id){         //查詢緩存中是否存在         boolean hasKey = redisUtils.exists(id);         String str = "";         if(hasKey){             //獲取緩存             Object object =  redisUtils.get(id);             log.info("從緩存獲取的數(shù)據(jù)"+ object);             str = object.toString();         }else{             //從數(shù)據(jù)庫(kù)中獲取信息             log.info("從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)");             str = testService.test();             //數(shù)據(jù)插入緩存(set中的參數(shù)含義:key值,user對(duì)象,緩存存在時(shí)間10(long類(lèi)型),時(shí)間單位)             redisUtils.set(id,str,10L,TimeUnit.MINUTES);             log.info("數(shù)據(jù)插入緩存" + str);         }         return str;     } }

      啟動(dòng)項(xiàng)目,第一次訪問(wèn):http://localhost:8002/hello/111
      詳解SpringBoot集成redis
      詳解SpringBoot集成redis
      通過(guò)控制臺(tái)輸出,我們可以看到是從數(shù)據(jù)庫(kù)中獲取的數(shù)據(jù),并且存入了redis緩存中。

      我們?cè)俅嗡⑿聻g覽器
      詳解SpringBoot集成redis
      可以看到,第二次是從緩存中讀取的,我們?cè)囋嚥粩嗨⑿聻g覽器
      詳解SpringBoot集成redis
      可以看到,之后都是從緩存中獲取的。

      到此我們的redis就配置好了。

      SpringBoot集成Redis-demo下載
      急需demo的兄弟就自行下載吧,不急可以留言郵箱,一般48小時(shí)內(nèi)會(huì)發(fā)。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)