compile 'org.springframework.boot:spring-boot-starter-data-redis'
使用redis有兩種方法java
1.Jedismysql
Jedis jedis = new Jedis("localhost");
2.RedisTemplategit
@Autowired private RedisTemplate redisTemplate;
若是使用RedisTemplate的話,要在application.properties中配置信息,這裏我使用Jedis比較簡單github
在application.properties文件下web
#redis的springboot的自動配置 # Redis數據庫索引(默認爲0) spring.redis.database=0 # Redis服務器地址 spring.redis.host=127.0.0.1 # Redis服務器鏈接端口 spring.redis.port=6379 # Redis服務器鏈接密碼(默認爲空) spring.redis.password= # 鏈接池最大鏈接數(使用負值表示沒有限制) spring.redis.pool.max-active=8 # 鏈接池最大阻塞等待時間(使用負值表示沒有限制) spring.redis.pool.max-wait=-1 # 鏈接池中的最大空閒鏈接 spring.redis.pool.max-idle=8 # 鏈接池中的最小空閒鏈接 spring.redis.pool.min-idle=0 # 鏈接超時時間(毫秒) spring.redis.timeout=0
package com.test.booleanjava.helloRS.util; import redis.clients.jedis.Jedis; /** * @author booleanjava * Date: 2019/7/2 19:48 * description:redis的工具類 */ 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); } /** * 設置一個有過時時間的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); } /** * 若是不存在就執行操做,用做簡單分佈式鎖 * * @param key * @param value * @return true表示執行,false表示沒有執行 */ public static Boolean setnx(final String key, final String value){ return jedis.setnx(key, value) == 1; } }
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); } }
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,設置了有時限的key"; } @RequestMapping("/del") public String del(String key) { redisTemplate.delete(key); return "hello, del一下redis"; } /** * 作分佈鎖, *先加鎖,寫業務,最後解鎖 * @return */ @RequestMapping("/lock") public String lock() { //加鎖 RedisUtil.setnx(LOCKKEY,LOCKKEY); //寫業務代碼,一人我飲酒醉 //解鎖 RedisUtil.del(LOCKKEY); return "hello, lock一下redis"; } }
https://github.com/blackdogss...redis
互聯網公司大部分一般使用myslq做爲數據庫存儲數據,可是mysql存數據是以影響IO爲代價的,因此mysql是系統的常見瓶頸,爲解決這個問題,redis這種非關係型數據庫就出現了,存在即合理。redis喜歡在內存操做,比mysql在磁盤瞎忙高效多了,所以深受人們喜好。spring
redis有五種數據結構sql
1.String 字符串數據庫
2.Hash哈希緩存
3.List列表
4.Set集合
5.Sorted Set
最經常使用的就是String類型,一般使用它作緩存,減輕直接訪問數據庫的壓力。Hash的話能夠用來作用戶id,List能夠用來作粉絲列表,Set的話能夠作共同好友,Sorted Set能夠作排行榜。
redis處理上面列舉的例子,還有就是能夠作分佈式鎖,在分佈式系統中,接口面臨的是多進程多線程訪問,若是依賴java的鎖是不能解決問題的,由於進程之間不共享內存;利用數據庫加鎖又顯得笨重,所以還得用redis來加鎖。redis怎麼加鎖,主要仍是利用setnx命令,該命令做用是若是key存在就不執行操做,不存在的話就設置value,這種特性就是爲鎖打造的啊。