一、 添加Spring.Redis依赖

注:由于Redis需要应用于所有应用,故安装在最顶层

  1. <!-- 整合redis-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-redis</artifactId>
  5. </dependency>

二、配置Redis

Redis是提供给各个微服务的,所以要将配置添加至各微服务的YAML配置文件中。
注: 由于是Spring框架下的,所以必须安装在Spring YAML配置级下,如图:
image.png

  1. #端口号
  2. server:
  3. port: 8200
  4. #服务注册名称
  5. spring:
  6. application:
  7. name: phone-server
  8. # REDIS (RedisProperties)
  9. # Redis数据库索引(默认为0)
  10. redis:
  11. database: 1
  12. # Redis服务器地址
  13. host: 118.25.178.111
  14. # Redis服务器连接端口
  15. port: 6380
  16. # Redis服务器连接密码(默认为空)
  17. password:
  18. # 连接池最大连接数(使用负值表示没有限制)
  19. jedis:
  20. pool:
  21. max-active: 8
  22. # 连接池最大阻塞等待时间(使用负值表示没有限制)
  23. max-wait: -1
  24. # 连接池中的最大空闲连接
  25. max-idle: 8
  26. # 连接池中的最小空闲连接
  27. min-idle: 0
  28. # 连接超时时间(毫秒)
  29. timeout: 10000
  30. #注册中心地址
  31. eureka:
  32. client:
  33. serviceUrl:
  34. defaultZone: http://localhost:8100/eureka/

三、 添加RedisUtil工具类

注:此工具类要放到各个微服务中,因为微服务是通过YALML配置进行注入的,如果放在Common中,则无法实现注入。而且,各个服务的配置可能不一样,甚至使用不同服务器的Redis所以无法公用。
image.png

  1. package com.yhh.phone.utils;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.data.redis.core.RedisTemplate;
  4. import org.springframework.stereotype.Component;
  5. import org.springframework.util.CollectionUtils;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Set;
  9. import java.util.concurrent.TimeUnit;
  10. /**
  11. * 基于spring和redis的redisTemplate工具类
  12. * @author xb
  13. */
  14. @Component
  15. public class RedisUtil {
  16. @Autowired
  17. private RedisTemplate redisTemplate;
  18. //=============================common============================
  19. /**
  20. * 指定缓存失效时间
  21. * @param key 键
  22. * @param time 时间(秒)
  23. * @return
  24. */
  25. public boolean expire(String key,long time){
  26. try {
  27. if(time>0){
  28. redisTemplate.expire(key, time, TimeUnit.SECONDS);
  29. }
  30. return true;
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. return false;
  34. }
  35. }
  36. /**
  37. * 根据key 获取过期时间
  38. * @param key 键 不能为null
  39. * @return 时间(秒) 返回0代表为永久有效
  40. */
  41. public long getExpire(String key){
  42. return redisTemplate.getExpire(key,TimeUnit.SECONDS);
  43. }
  44. /**
  45. * 判断key是否存在
  46. * @param key 键
  47. * @return true 存在 false不存在
  48. */
  49. public boolean hasKey(String key){
  50. try {
  51. return redisTemplate.hasKey(key);
  52. } catch (Exception e) {
  53. e.printStackTrace();
  54. return false;
  55. }
  56. }
  57. /**
  58. * 删除缓存
  59. * @param key 可以传一个值 或多个
  60. */
  61. @SuppressWarnings("unchecked")
  62. public void del(String ... key){
  63. if(key!=null&&key.length>0){
  64. if(key.length==1){
  65. redisTemplate.delete(key[0]);
  66. }else{
  67. redisTemplate.delete(CollectionUtils.arrayToList(key));
  68. }
  69. }
  70. }
  71. //============================String=============================
  72. /**
  73. * 普通缓存获取
  74. * @param key 键
  75. * @return 值
  76. */
  77. public Object get(String key){
  78. return key==null?null:redisTemplate.opsForValue().get(key);
  79. }
  80. /**
  81. * 普通缓存放入
  82. * @param key 键
  83. * @param value 值
  84. * @return true成功 false失败
  85. */
  86. public boolean set(String key,Object value) {
  87. try {
  88. redisTemplate.opsForValue().set(key, value);
  89. return true;
  90. } catch (Exception e) {
  91. e.printStackTrace();
  92. return false;
  93. }
  94. }
  95. /**
  96. * 普通缓存放入并设置时间
  97. * @param key 键
  98. * @param value 值
  99. * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
  100. * @return true成功 false 失败
  101. */
  102. public boolean set(String key,Object value,long time){
  103. try {
  104. if(time>0){
  105. redisTemplate.opsForValue().set(key, value, time,
  106. TimeUnit.SECONDS);
  107. }else{
  108. set(key, value);
  109. }
  110. return true;
  111. } catch (Exception e) {
  112. e.printStackTrace();
  113. return false;
  114. }
  115. }
  116. /**
  117. * 递增
  118. * @param key 键
  119. * @param by 要增加几(大于0)
  120. * @return
  121. */
  122. public long incr(String key, long by){
  123. if(by<0){
  124. throw new RuntimeException("递增因子必须大于0");
  125. }
  126. return redisTemplate.opsForValue().increment(key, by);
  127. }
  128. /**
  129. * 递减
  130. * @param key 键
  131. * @param by 要减少几(小于0)
  132. * @return
  133. */
  134. public long decr(String key, long by){
  135. if(by<0){
  136. throw new RuntimeException("递减因子必须大于0");
  137. }
  138. return redisTemplate.opsForValue().increment(key, -by);
  139. }
  140. //================================Map=================================
  141. /**
  142. * HashGet
  143. * @param key 键 不能为null
  144. * @param item 项 不能为null
  145. * @return 值
  146. */
  147. public Object hget(String key,String item){
  148. return redisTemplate.opsForHash().get(key, item);
  149. }
  150. /**
  151. * 获取hashKey对应的所有键值
  152. * @param key 键
  153. * @return 对应的多个键值
  154. */
  155. public Map<Object,Object> hmget(String key){
  156. return redisTemplate.opsForHash().entries(key);
  157. }
  158. /**
  159. * HashSet
  160. * @param key 键
  161. * @param map 对应多个键值
  162. * @return true 成功 false 失败
  163. */
  164. public boolean hmset(String key, Map<String,Object> map){
  165. try {
  166. redisTemplate.opsForHash().putAll(key, map);
  167. return true;
  168. } catch (Exception e) {
  169. e.printStackTrace();
  170. return false;
  171. }
  172. }
  173. /**
  174. * HashSet 并设置时间
  175. * @param key 键
  176. * @param map 对应多个键值
  177. * @param time 时间(秒)
  178. * @return true成功 false失败
  179. */
  180. public boolean hmset(String key, Map<String,Object> map, long time){
  181. try {
  182. redisTemplate.opsForHash().putAll(key, map);
  183. if(time>0){
  184. expire(key, time);
  185. }
  186. return true;
  187. } catch (Exception e) {
  188. e.printStackTrace();
  189. return false;
  190. }
  191. }
  192. /**
  193. * 向一张hash表中放入数据,如果不存在将创建
  194. * @param key 键
  195. * @param item 项
  196. * @param value 值
  197. * @return true 成功 false失败
  198. */
  199. public boolean hset(String key,String item,Object value) {
  200. try {
  201. redisTemplate.opsForHash().put(key, item, value);
  202. return true;
  203. } catch (Exception e) {
  204. e.printStackTrace();
  205. return false;
  206. }
  207. }
  208. /**
  209. * 向一张hash表中放入数据,如果不存在将创建
  210. * @param key 键
  211. * @param item 项
  212. * @param value 值
  213. * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
  214. * @return true 成功 false失败
  215. */
  216. public boolean hset(String key,String item,Object value,long time) {
  217. try {
  218. redisTemplate.opsForHash().put(key, item, value);
  219. if(time>0){
  220. expire(key, time);
  221. }
  222. return true;
  223. } catch (Exception e) {
  224. e.printStackTrace();
  225. return false;
  226. }
  227. }
  228. /**
  229. * 删除hash表中的值
  230. * @param key 键 不能为null
  231. * @param item 项 可以使多个 不能为null
  232. */
  233. public void hdel(String key, Object... item){
  234. redisTemplate.opsForHash().delete(key,item);
  235. }
  236. /**
  237. * 判断hash表中是否有该项的值
  238. * @param key 键 不能为null
  239. * @param item 项 不能为null
  240. * @return true 存在 false不存在
  241. */
  242. public boolean hHasKey(String key, String item){
  243. return redisTemplate.opsForHash().hasKey(key, item);
  244. }
  245. /**
  246. * hash递增 如果不存在,就会创建一个 并把新增后的值返回
  247. * @param key 键
  248. * @param item 项
  249. * @param by 要增加几(大于0)
  250. * @return
  251. */
  252. public long hincr(String key, String item,long by){
  253. return redisTemplate.opsForHash().increment(key, item, by);
  254. }
  255. /**
  256. * hash递减
  257. * @param key 键
  258. * @param item 项
  259. * @param by 要减少记(小于0)
  260. * @return
  261. */
  262. public long hdecr(String key, String item,long by){
  263. return redisTemplate.opsForHash().increment(key, item,-by);
  264. }
  265. //============================set=============================
  266. /**
  267. * 根据key获取Set中的所有值
  268. * @param key 键
  269. * @return
  270. */
  271. public Set<Object> sGet(String key){
  272. try {
  273. return redisTemplate.opsForSet().members(key);
  274. } catch (Exception e) {
  275. e.printStackTrace();
  276. return null;
  277. }
  278. }
  279. /**
  280. * 根据value从一个set中查询,是否存在
  281. * @param key 键
  282. * @param value 值
  283. * @return true 存在 false不存在
  284. */
  285. public boolean sHasKey(String key,Object value){
  286. try {
  287. return redisTemplate.opsForSet().isMember(key, value);
  288. } catch (Exception e) {
  289. e.printStackTrace();
  290. return false;
  291. }
  292. }
  293. /**
  294. * 将数据放入set缓存
  295. * @param key 键
  296. * @param values 值 可以是多个
  297. * @return 成功个数
  298. */
  299. public long sSet(String key, Object...values) {
  300. try {
  301. return redisTemplate.opsForSet().add(key, values);
  302. } catch (Exception e) {
  303. e.printStackTrace();
  304. return 0;
  305. }
  306. }
  307. /**
  308. * 将set数据放入缓存
  309. * @param key 键
  310. * @param time 时间(秒)
  311. * @param values 值 可以是多个
  312. * @return 成功个数
  313. */
  314. public long sSetAndTime(String key,long time,Object...values) {
  315. try {
  316. Long count = redisTemplate.opsForSet().add(key, values);
  317. if(time>0) expire(key, time);
  318. return count;
  319. } catch (Exception e) {
  320. e.printStackTrace();
  321. return 0;
  322. }
  323. }
  324. /**
  325. * 获取set缓存的长度
  326. * @param key 键
  327. * @return
  328. */
  329. public long sGetSetSize(String key){
  330. try {
  331. return redisTemplate.opsForSet().size(key);
  332. } catch (Exception e) {
  333. e.printStackTrace();
  334. return 0;
  335. }
  336. }
  337. /**
  338. * 移除值为value的
  339. * @param key 键
  340. * @param values 值 可以是多个
  341. * @return 移除的个数
  342. */
  343. public long setRemove(String key, Object ...values) {
  344. try {
  345. Long count = redisTemplate.opsForSet().remove(key, values);
  346. return count;
  347. } catch (Exception e) {
  348. e.printStackTrace();
  349. return 0;
  350. }
  351. }
  352. //===============================list=================================
  353. /**
  354. * 获取list缓存的内容
  355. * @param key 键
  356. * @param start 开始
  357. * @param end 结束 0 到 -1代表所有值
  358. * @return
  359. */
  360. public List<Object> lGet(String key, long start, long end){
  361. try {
  362. return redisTemplate.opsForList().range(key, start, end);
  363. } catch (Exception e) {
  364. e.printStackTrace();
  365. return null;
  366. }
  367. }
  368. /**
  369. * 获取list缓存的长度
  370. * @param key 键
  371. * @return
  372. */
  373. public long lGetListSize(String key){
  374. try {
  375. return redisTemplate.opsForList().size(key);
  376. } catch (Exception e) {
  377. e.printStackTrace();
  378. return 0;
  379. }
  380. }
  381. /**
  382. * 通过索引 获取list中的值
  383. * @param key 键
  384. * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,
  385. 表尾,-2倒数第二个元素,依次类推
  386. * @return
  387. */
  388. public Object lGetIndex(String key,long index){
  389. try {
  390. return redisTemplate.opsForList().index(key, index);
  391. } catch (Exception e) {
  392. e.printStackTrace();
  393. return null;
  394. }
  395. }
  396. /**
  397. * 将list放入缓存
  398. * @param key 键
  399. * @param value 值
  400. * @return
  401. */
  402. public boolean lSet(String key, Object value) {
  403. try {
  404. redisTemplate.opsForList().rightPush(key, value);
  405. return true;
  406. } catch (Exception e) {
  407. e.printStackTrace();
  408. return false;
  409. }
  410. }
  411. /**
  412. * 将list放入缓存
  413. * @param key 键
  414. * @param value 值
  415. * @param time 时间(秒)
  416. * @return
  417. */
  418. public boolean lSet(String key, Object value, long time) {
  419. try {
  420. redisTemplate.opsForList().rightPush(key, value);
  421. if (time > 0) expire(key, time);
  422. return true;
  423. } catch (Exception e) {
  424. e.printStackTrace();
  425. return false;
  426. }
  427. }
  428. /**
  429. * 将list放入缓存
  430. * @param key 键
  431. * @param value 值
  432. * @return
  433. */
  434. public boolean lSet(String key, List<Object> value) {
  435. try {
  436. redisTemplate.opsForList().rightPushAll(key, value);
  437. return true;
  438. } catch (Exception e) {
  439. e.printStackTrace();
  440. return false;
  441. }
  442. }
  443. /**
  444. 2.6 缓存注册码到redis
  445. * 将list放入缓存
  446. * @param key 键
  447. * @param value 值
  448. * @param time 时间(秒)
  449. * @return
  450. */
  451. public boolean lSet(String key, List<Object> value, long time) {
  452. try {
  453. redisTemplate.opsForList().rightPushAll(key, value);
  454. if (time > 0) expire(key, time);
  455. return true;
  456. } catch (Exception e) {
  457. e.printStackTrace();
  458. return false;
  459. }
  460. }
  461. /**
  462. * 根据索引修改list中的某条数据
  463. * @param key 键
  464. * @param index 索引
  465. * @param value 值
  466. * @return
  467. */
  468. public boolean lUpdateIndex(String key, long index,Object value) {
  469. try {
  470. redisTemplate.opsForList().set(key, index, value);
  471. return true;
  472. } catch (Exception e) {
  473. e.printStackTrace();
  474. return false;
  475. }
  476. }
  477. /**
  478. * 移除N个值为value
  479. * @param key 键
  480. * @param count 移除多少个
  481. * @param value 值
  482. * @return 移除的个数
  483. */
  484. public long lRemove(String key,long count,Object value) {
  485. try {
  486. Long remove = redisTemplate.opsForList().remove(key, count, value);
  487. return remove;
  488. } catch (Exception e) {
  489. e.printStackTrace();
  490. return 0;
  491. }
  492. }
  493. }

四、 调用Redis

image.png