redis哨兵模式整合spring boot

Dear 丶 2022-11-12 09:47 199阅读 0赞

1、配置文件配置

  1. spring:
  2. redis:
  3. password: 123456
  4. sentinel:
  5. master: mymaster #当前监控的名字
  6. nodes: 10.18.33.88:26379,10.18.33.88:36379,10.18.33.88:46379 #哨兵节点

2、创建配置类

  1. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  2. import com.fasterxml.jackson.annotation.PropertyAccessor;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.data.redis.connection.RedisConnectionFactory;
  8. import org.springframework.data.redis.connection.RedisNode;
  9. import org.springframework.data.redis.connection.RedisPassword;
  10. import org.springframework.data.redis.connection.RedisSentinelConfiguration;
  11. import org.springframework.data.redis.core.RedisTemplate;
  12. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  13. import org.springframework.data.redis.serializer.StringRedisSerializer;
  14. @Configuration
  15. public class RedisConfigSentinel {
  16. @Value("${spring.redis.sentinel.master}")
  17. private String sentinelMaster;
  18. @Value("${spring.redis.sentinel.nodes}")
  19. private String sentinelNodes;
  20. @Value("${spring.redis.password}")
  21. private String redisPassword;
  22. /**
  23. * 实例化哨兵配置
  24. * @return
  25. */
  26. @Bean
  27. public RedisSentinelConfiguration sentinelConfiguration() {
  28. RedisSentinelConfiguration rsc = new RedisSentinelConfiguration();
  29. rsc.setMaster(sentinelMaster);
  30. rsc.setPassword(RedisPassword.of(redisPassword));
  31. String[] node = sentinelNodes.split(",");
  32. for (int i = 0; i < node.length; i++) {
  33. String[] add = node[i].split(":");
  34. RedisNode redisNode = new RedisNode(add[0], Integer.parseInt(add[1]));
  35. rsc.addSentinel(redisNode);
  36. }
  37. return rsc;
  38. }
  39. /**
  40. * 实例化 RedisTemplate 对象
  41. *
  42. * @return
  43. */
  44. @Bean("redisTemplate")
  45. public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory,
  46. RedisSentinelConfiguration sentinelConfiguration) {
  47. RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
  48. redisTemplate.setConnectionFactory(redisConnectionFactory);
  49. // 使用Jackson2JsonRedisSerialize 替换默认序列化
  50. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
  51. ObjectMapper objectMapper = new ObjectMapper();
  52. objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  53. objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  54. jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
  55. // 设置value的序列化规则和 key的序列化规则
  56. redisTemplate.setKeySerializer(new StringRedisSerializer());
  57. redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
  58. redisTemplate.afterPropertiesSet();
  59. // 开启事物
  60. redisTemplate.setEnableTransactionSupport(false);
  61. return redisTemplate;
  62. }
  63. }

3、创建redis 使用工具类

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.data.redis.core.*;
  3. import org.springframework.stereotype.Component;
  4. import java.io.Serializable;
  5. import java.util.List;
  6. import java.util.Set;
  7. import java.util.concurrent.TimeUnit;
  8. @Component
  9. public class RedisUtils {
  10. @Autowired
  11. private RedisTemplate redisTemplate;
  12. private static double size = Math.pow(2, 32);
  13. /**
  14. * 写入缓存
  15. *
  16. * @param key
  17. * @param offset 位 8Bit=1Byte
  18. * @return
  19. */
  20. public boolean setBit(String key, long offset, boolean isShow) {
  21. boolean result = false;
  22. try {
  23. ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
  24. operations.setBit(key, offset, isShow);
  25. result = true;
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. return result;
  30. }
  31. /**
  32. * 写入缓存
  33. *
  34. * @param key
  35. * @param offset
  36. * @return
  37. */
  38. public boolean getBit(String key, long offset) {
  39. boolean result = false;
  40. try {
  41. ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
  42. result = operations.getBit(key, offset);
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45. }
  46. return result;
  47. }
  48. /**
  49. * 写入缓存
  50. *
  51. * @param key
  52. * @param value
  53. * @return
  54. */
  55. public boolean set(final String key, Object value) {
  56. boolean result = false;
  57. try {
  58. ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
  59. operations.set(key, value);
  60. result = true;
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. }
  64. return result;
  65. }
  66. /**
  67. * 写入缓存设置时效时间
  68. *
  69. * @param key
  70. * @param value
  71. * @return
  72. */
  73. public boolean set(final String key, Object value, Long expireTime) {
  74. boolean result = false;
  75. try {
  76. ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
  77. operations.set(key, value);
  78. redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
  79. result = true;
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. }
  83. return result;
  84. }
  85. /**
  86. * 批量删除对应的value
  87. *
  88. * @param keys
  89. */
  90. public void remove(final String... keys) {
  91. for (String key : keys) {
  92. remove(key);
  93. }
  94. }
  95. /**
  96. * 删除对应的value
  97. *
  98. * @param key
  99. */
  100. public void remove(final String key) {
  101. if (exists(key)) {
  102. redisTemplate.delete(key);
  103. }
  104. }
  105. /**
  106. * 判断缓存中是否有对应的value
  107. *
  108. * @param key
  109. * @return
  110. */
  111. public boolean exists(final String key) {
  112. return redisTemplate.hasKey(key);
  113. }
  114. /**
  115. * 读取缓存
  116. *
  117. * @param key
  118. * @return
  119. */
  120. public Object get(final String key) {
  121. Object result = null;
  122. ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
  123. result = operations.get(key);
  124. return result;
  125. }
  126. /**
  127. * 哈希 添加
  128. *
  129. * @param key
  130. * @param hashKey
  131. * @param value
  132. */
  133. public void hmSet(String key, Object hashKey, Object value) {
  134. HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
  135. hash.put(key, hashKey, value);
  136. }
  137. /**
  138. * 哈希获取数据
  139. *
  140. * @param key
  141. * @param hashKey
  142. * @return
  143. */
  144. public Object hmGet(String key, Object hashKey) {
  145. HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
  146. return hash.get(key, hashKey);
  147. }
  148. /**
  149. * 列表添加
  150. *
  151. * @param k
  152. * @param v
  153. */
  154. public void lPush(String k, Object v) {
  155. ListOperations<String, Object> list = redisTemplate.opsForList();
  156. list.rightPush(k, v);
  157. }
  158. /**
  159. * 列表获取
  160. *
  161. * @param k
  162. * @param l
  163. * @param l1
  164. * @return
  165. */
  166. public List<Object> lRange(String k, long l, long l1) {
  167. ListOperations<String, Object> list = redisTemplate.opsForList();
  168. return list.range(k, l, l1);
  169. }
  170. /**
  171. * 集合添加
  172. *
  173. * @param key
  174. * @param value
  175. */
  176. public void add(String key, Object value) {
  177. SetOperations<String, Object> set = redisTemplate.opsForSet();
  178. set.add(key, value);
  179. }
  180. /**
  181. * 集合获取
  182. *
  183. * @param key
  184. * @return
  185. */
  186. public Set<Object> setMembers(String key) {
  187. SetOperations<String, Object> set = redisTemplate.opsForSet();
  188. return set.members(key);
  189. }
  190. /**
  191. * 有序集合添加
  192. *
  193. * @param key
  194. * @param value
  195. * @param scoure
  196. */
  197. public void zAdd(String key, Object value, double scoure) {
  198. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  199. zset.add(key, value, scoure);
  200. }
  201. /**
  202. * 有序集合获取
  203. *
  204. * @param key
  205. * @param scoure
  206. * @param scoure1
  207. * @return
  208. */
  209. public Set<Object> rangeByScore(String key, double scoure, double scoure1) {
  210. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  211. redisTemplate.opsForValue();
  212. return zset.rangeByScore(key, scoure, scoure1);
  213. }
  214. //第一次加载的时候将数据加载到redis中
  215. public void saveDataToRedis(String name) {
  216. double index = Math.abs(name.hashCode() % size);
  217. long indexLong = new Double(index).longValue();
  218. boolean availableUsers = setBit("availableUsers", indexLong, true);
  219. }
  220. //第一次加载的时候将数据加载到redis中
  221. public boolean getDataToRedis(String name) {
  222. double index = Math.abs(name.hashCode() % size);
  223. long indexLong = new Double(index).longValue();
  224. return getBit("availableUsers", indexLong);
  225. }
  226. /**
  227. * 有序集合获取排名
  228. *
  229. * @param key 集合名称
  230. * @param value 值
  231. */
  232. public Long zRank(String key, Object value) {
  233. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  234. return zset.rank(key,value);
  235. }
  236. /**
  237. * 有序集合获取排名
  238. *
  239. * @param key
  240. */
  241. public Set<ZSetOperations.TypedTuple<Object>> zRankWithScore(String key, long start,long end) {
  242. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  243. Set<ZSetOperations.TypedTuple<Object>> ret = zset.rangeWithScores(key,start,end);
  244. return ret;
  245. }
  246. /**
  247. * 有序集合添加
  248. *
  249. * @param key
  250. * @param value
  251. */
  252. public Double zSetScore(String key, Object value) {
  253. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  254. return zset.score(key,value);
  255. }
  256. /**
  257. * 有序集合添加分数
  258. *
  259. * @param key
  260. * @param value
  261. * @param scoure
  262. */
  263. public void incrementScore(String key, Object value, double scoure) {
  264. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  265. zset.incrementScore(key, value, scoure);
  266. }
  267. /**
  268. * 有序集合获取排名
  269. *
  270. * @param key
  271. */
  272. public Set<ZSetOperations.TypedTuple<Object>> reverseZRankWithScore(String key, long start,long end) {
  273. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  274. Set<ZSetOperations.TypedTuple<Object>> ret = zset.reverseRangeByScoreWithScores(key,start,end);
  275. return ret;
  276. }
  277. /**
  278. * 有序集合获取排名
  279. *
  280. * @param key
  281. */
  282. public Set<ZSetOperations.TypedTuple<Object>> reverseZRankWithRank(String key, long start, long end) {
  283. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  284. Set<ZSetOperations.TypedTuple<Object>> ret = zset.reverseRangeWithScores(key, start, end);
  285. return ret;
  286. }
  287. }

4、建立测试

  1. @Controller
  2. @RequestMapping(value = "/test1")
  3. public class TestController {
  4. @Autowired
  5. private RedisUtils redisUtils;
  6. @RequestMapping(value = "/toStr")
  7. @ResponseBody
  8. public String getStr() {
  9. redisUtils.set("key","test");
  10. System.out.println(redisUtils.get("key"));
  11. return "str";
  12. }
  13. }

发表评论

表情:
评论列表 (有 0 条评论,199人围观)

还没有评论,来说两句吧...

相关阅读