摘要:喜歡在內(nèi)存操作,比在磁盤(pán)瞎忙高效多了,因此深受人們喜愛(ài)。數(shù)據(jù)結(jié)構(gòu)有五種數(shù)據(jù)結(jié)構(gòu)字符串哈希列表集合最常用的就是類(lèi)型,通常使用它做緩存,減輕直接訪問(wèn)數(shù)據(jù)庫(kù)的壓力。的話可以用來(lái)做用戶,可以用來(lái)做粉絲列表,的話可以做共同好友,可以做排行榜。
引入依賴
compile "org.springframework.boot:spring-boot-starter-data-redis"
使用redis有兩種方法
1.Jedis
Jedis jedis = new Jedis("localhost");
2.RedisTemplate
@Autowired private RedisTemplate redisTemplate;
如果使用RedisTemplate的話,要在application.properties中配置信息,這里我使用Jedis比較簡(jiǎn)單
redis的自動(dòng)配置在application.properties文件下
#redis的springboot的自動(dòng)配置 # Redis數(shù)據(jù)庫(kù)索引(默認(rèn)為0) spring.redis.database=0 # Redis服務(wù)器地址 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=0Jedis使用
package com.test.booleanjava.helloRS.util; import redis.clients.jedis.Jedis; /** * @author booleanjava * Date: 2019/7/2 19:48 * description:redis的工具類(lèi) */ public class RedisUtil { static Jedis jedis = new Jedis("localhost"); /** * 插入key,如果存在就更新 * @param key * @param value * @return */ public static String set(String key, String value){ return jedis.set(key, value); } /** * 獲取key的值 * @param key * @return */ public static String get(String key) { return jedis.get(key); } /** * 刪除key * @param key * @return */ public static Long del(String key){ return jedis.del(key); } /** * 設(shè)置一個(gè)有過(guò)期時(shí)間的key(秒) * @param key * @param seconds * @param value * @return */ public static String setex(final String key, final int seconds, final String value){ return jedis.setex(key, seconds, value); } /** * 如果不存在就執(zhí)行操作,用作簡(jiǎn)單分布式鎖 * * @param key * @param value * @return true表示執(zhí)行,false表示沒(méi)有執(zhí)行 */ public static Boolean setnx(final String key, final String value){ return jedis.setnx(key, value) == 1; } }RedisTemplates使用
package com.test.booleanjava.helloRS.util; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; /** * @author boolean * Date: 2019/7/2 19:48 * description: */ @Component public class Redisplus { @Autowired private RedisTemplate redisTemplate; public void set(String key, String value){ redisTemplate.opsForValue().set(key, value); } }測(cè)試
package com.test.booleanjava.helloRS.controller; import com.test.booleanjava.helloRS.entity.User; import com.test.booleanjava.helloRS.util.Redisplus; import com.test.booleanjava.helloRS.service.IUserService; import com.test.booleanjava.helloRS.util.RedisUtil; import com.test.base.core.util.LogUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; /** * @author booleanjava * Date: 2019/7/2 19:48 * description: */ @RestController @RequestMapping("/helloRS/redisHello") public class RedisHello { private final static Logger logger = LoggerFactory.getLogger(RedisHello.class); private final static String USERKEY = "com.test.booleanjava.helloRS.controller.setex"; private final static String LOCKKEY = "com.test.booleanjava.helloRS.controller.lock"; @Autowired private IUserService iUserService; @Autowired private Redisplus redisplus; @Autowired private RedisTemplate redisTemplate; RedisSerializer redisSerializer =new StringRedisSerializer(); @RequestMapping("/hello") public String hello(){ LogUtil.info("redis的展示:[{}]", redisTemplate); return "hello, redis"; } @RequestMapping("/set") public String set(){ Date date = new Date(); redisTemplate.setKeySerializer(redisSerializer); redisTemplate.opsForValue().set("q", "1"); redisTemplate.opsForValue().get("q"); System.out.println(redisTemplate.opsForValue().get("q")); RedisUtil.set("a1", String.valueOf(1)); logger.info("redis的展示:[{}]", redisTemplate); return "hello, set一下redis"; } @RequestMapping("/setex") public String setex( ){ // String key = "1min"; // int seconds = 10; // String value = "陳"; // RedisUtil.setex(key, seconds, value); // String rs = RedisUtil.get(key); // logger.info("獲取的值:[{}]", rs); String value = RedisUtil.get(USERKEY); if (value != null) { logger.info("緩存的user值:[{}]", value); return value; } User user = iUserService.query().eq("name", "chen").one(); logger.info("user的值:[{}]",user.toString()); if (user != null ) { RedisUtil.setex(USERKEY, 60, user.toString()); } return "hello,booleanjava,設(shè)置了有時(shí)限的key"; } @RequestMapping("/del") public String del(String key) { redisTemplate.delete(key); return "hello, del一下redis"; } /** * 做分布鎖, *先加鎖,寫(xiě)業(yè)務(wù),最后解鎖 * @return */ @RequestMapping("/lock") public String lock() { //加鎖 RedisUtil.setnx(LOCKKEY,LOCKKEY); //寫(xiě)業(yè)務(wù)代碼,一人我飲酒醉 //解鎖 RedisUtil.del(LOCKKEY); return "hello, lock一下redis"; } }源碼
https://github.com/blackdogss...
深入 背景互聯(lián)網(wǎng)公司大部分通常使用myslq作為數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),但是mysql存數(shù)據(jù)是以影響IO為代價(jià)的,所以mysql是系統(tǒng)的常見(jiàn)瓶頸,為解決這個(gè)問(wèn)題,redis這種非關(guān)系型數(shù)據(jù)庫(kù)就出現(xiàn)了,存在即合理。redis喜歡在內(nèi)存操作,比mysql在磁盤(pán)瞎忙高效多了,因此深受人們喜愛(ài)。
數(shù)據(jù)結(jié)構(gòu)redis有五種數(shù)據(jù)結(jié)構(gòu)
1.String 字符串
2.Hash哈希
3.List列表
4.Set集合
5.Sorted Set
最常用的就是String類(lèi)型,通常使用它做緩存,減輕直接訪問(wèn)數(shù)據(jù)庫(kù)的壓力。Hash的話可以用來(lái)做用戶id,List可以用來(lái)做粉絲列表,Set的話可以做共同好友,Sorted Set可以做排行榜。
分布式鎖redis處理上面列舉的例子,還有就是可以做分布式鎖,在分布式系統(tǒng)中,接口面臨的是多進(jìn)程多線程訪問(wèn),如果依賴java的鎖是不能解決問(wèn)題的,因?yàn)檫M(jìn)程之間不共享內(nèi)存;利用數(shù)據(jù)庫(kù)加鎖又顯得笨重,因此還得用redis來(lái)加鎖。redis怎么加鎖,主要還是利用setnx命令,該命令作用是如果key存在就不執(zhí)行操作,不存在的話就設(shè)置value,這種特性就是為鎖打造的啊。
公眾號(hào)文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75225.html
摘要:一概括,如果使用開(kāi)發(fā)一個(gè)的應(yīng)用創(chuàng)建一個(gè)項(xiàng)目并且導(dǎo)入相關(guān)包。創(chuàng)建一個(gè)編寫(xiě)一個(gè)控制類(lèi)需要一個(gè)部署應(yīng)用的服務(wù)器如,特點(diǎn)設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。啟動(dòng)器可以和位于同一個(gè)包下,或者位于的上一級(jí)包中,但是不能放到的平級(jí)以及子包下。 一,Spring Boot 介紹 Spring Boot不是一個(gè)新的框架,默認(rèn)配置了多種框架使用方式,使用SpringBoot很容易創(chuàng)建一個(gè)獨(dú)立運(yùn)...
摘要:經(jīng)過(guò)上述兩步的操作,你可以訪問(wèn)數(shù)據(jù)了。數(shù)據(jù)訪問(wèn)層通過(guò)來(lái)訪問(wèn)分鐘過(guò)期單元測(cè)試啟動(dòng)單元測(cè)試,你發(fā)現(xiàn)控制臺(tái)打印了單元測(cè)試通過(guò)源碼下載參考資料 這篇文章主要介紹springboot整合redis 引入依賴 在pom文件中添加redis依賴: org.springframework.boot spring-boot-starter-data-redis 配置數(shù)據(jù)源 spri...
摘要:使用嵌入式容器,應(yīng)用無(wú)需達(dá)成包。自動(dòng)依賴與版本控制。準(zhǔn)生產(chǎn)環(huán)境的運(yùn)行時(shí)應(yīng)用監(jiān)控。告訴開(kāi)啟自動(dòng)配置功能,這樣自動(dòng)配置才能生效。其組成為為的底層注解,表明給容器中導(dǎo)入一個(gè)組件,導(dǎo)入的組建由類(lèi)提供。 Spring Boot——入門(mén) spring boot簡(jiǎn)化了spring的開(kāi)發(fā),是J2EE一站式解決方案。 Spring Boot 的優(yōu)缺點(diǎn) 優(yōu)點(diǎn) 快速創(chuàng)建獨(dú)立運(yùn)行的服務(wù),與主流框架集成。 使...
摘要:開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問(wèn)題前后端分離二使用完美處理權(quán)限問(wèn)題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...
閱讀 3235·2021-11-08 13:21
閱讀 1213·2021-08-12 13:28
閱讀 1421·2019-08-30 14:23
閱讀 1941·2019-08-30 11:09
閱讀 853·2019-08-29 13:22
閱讀 2703·2019-08-29 13:12
閱讀 2564·2019-08-26 17:04
閱讀 2273·2019-08-26 13:22