RedisUtil写法,好用
Posted wangquanyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RedisUtil写法,好用相关的知识,希望对你有一定的参考价值。
代码:
1 import org.springframework.beans.factory.annotation.Autowired; 2 import org.springframework.data.redis.core.RedisTemplate; 3 import org.springframework.stereotype.Component; 4 import org.springframework.util.CollectionUtils; 5 6 import java.util.List; 7 import java.util.Map; 8 import java.util.Set; 9 import java.util.concurrent.TimeUnit; 10 11 @Component 12 public final class RedisUtil 13 @Autowired 14 private RedisTemplate<String, Object> redisTemplate; 15 16 // =============================common============================ 17 18 /** 19 * 指定缓存失效时间 20 * 21 * @param key 键 22 * @param time 时间(秒) 23 */ 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 /** 38 * 根据key 获取过期时间 39 * 40 * @param key 键 不能为null 41 * @return 时间(秒) 返回0代表为永久有效 42 */ 43 44 public long getExpire(String key) 45 return redisTemplate.getExpire(key, TimeUnit.SECONDS); 46 47 48 /** 49 * 判断key是否存在 50 * 51 * @param key 键 52 * @return true 存在 false不存在 53 */ 54 55 public boolean hasKey(String key) 56 try 57 return redisTemplate.hasKey(key); 58 catch (Exception e) 59 e.printStackTrace(); 60 return false; 61 62 63 64 /** 65 * 删除缓存 66 * 67 * @param key 可以传一个值 或多个 68 */ 69 70 @SuppressWarnings("unchecked") 71 public void del(String... key) 72 if (key != null && key.length > 0) 73 if (key.length == 1) 74 redisTemplate.delete(key[0]); 75 else 76 redisTemplate.delete(CollectionUtils.arrayToList(key)); 77 78 79 80 81 82 // ============================String============================= 83 84 /** 85 * 普通缓存获取 86 * 87 * @param key 键 88 * @return 值 89 */ 90 public Object get(String key) 91 return key == null ? null : redisTemplate.opsForValue().get(key); 92 93 94 /** 95 * 普通缓存放入 96 * 97 * @param key 键 98 * @param value 值 99 * @return true成功 false失败 100 */ 101 public boolean set(String key, Object value) 102 try 103 redisTemplate.opsForValue().set(key, value); 104 return true; 105 catch (Exception e) 106 e.printStackTrace(); 107 return false; 108 109 110 111 /** 112 * 普通缓存放入并设置时间 113 * 114 * @param key 键 115 * @param value 值 116 * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 117 * @return true成功 false 失败 118 */ 119 public boolean set(String key, Object value, long time) 120 try 121 if (time > 0) 122 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); 123 else 124 set(key, value); 125 126 return true; 127 catch (Exception e) 128 e.printStackTrace(); 129 return false; 130 131 132 133 /** 134 * 递增 135 * 136 * @param key 键 137 * @param delta 要增加几(大于0) 138 */ 139 140 public long incr(String key, long delta) 141 if (delta < 0) 142 throw new RuntimeException("递增因子必须大于0"); 143 144 return redisTemplate.opsForValue().increment(key, delta); 145 146 147 /** 148 * 递减 149 * 150 * @param key 键 151 * @param delta 要减少几(小于0) 152 */ 153 154 public long decr(String key, long delta) 155 if (delta < 0) 156 throw new RuntimeException("递减因子必须大于0"); 157 158 return redisTemplate.opsForValue().increment(key, -delta); 159 160 161 // ================================Map================================= 162 163 /** 164 * HashGet 165 * 166 * @param key 键 不能为null 167 * @param item 项 不能为null 168 * @return 值 169 */ 170 171 public Object hget(String key, String item) 172 return redisTemplate.opsForHash().get(key, item); 173 174 175 /** 176 * 获取hashKey对应的所有键值 177 * 178 * @param key 键 179 * @return 对应的多个键值 180 */ 181 182 public Map<Object, Object> hmget(String key) 183 return redisTemplate.opsForHash().entries(key); 184 185 186 /** 187 * HashSet 188 * 189 * @param key 键 190 * @param map 对应多个键值 191 * @return true 成功 false 失败 192 */ 193 194 public boolean hmset(String key, Map<String, Object> map) 195 try 196 redisTemplate.opsForHash().putAll(key, map); 197 return true; 198 catch (Exception e) 199 e.printStackTrace(); 200 return false; 201 202 203 204 /** 205 * HashSet 并设置时间 206 * 207 * @param key 键 208 * @param map 对应多个键值 209 * @param time 时间(秒) 210 * @return true成功 false失败 211 */ 212 213 public boolean hmset(String key, Map<String, Object> map, long time) 214 try 215 redisTemplate.opsForHash().putAll(key, map); 216 if (time > 0) 217 expire(key, time); 218 219 return true; 220 catch (Exception e) 221 e.printStackTrace(); 222 return false; 223 224 225 226 227 /** 228 * 向一张hash表中放入数据,如果不存在将创建 229 * 230 * @param key 键 231 * @param item 项 232 * @param value 值 233 * @return true 成功 false失败 234 */ 235 236 public boolean hset(String key, String item, Object value) 237 try 238 redisTemplate.opsForHash().put(key, item, value); 239 return true; 240 catch (Exception e) 241 e.printStackTrace(); 242 return false; 243 244 245 246 /** 247 * 向一张hash表中放入数据,如果不存在将创建 248 * 249 * @param key 键 250 * @param item 项 251 * @param value 值 252 * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 253 * @return true 成功 false失败 254 */ 255 256 public boolean hset(String key, String item, Object value, long time) 257 try 258 redisTemplate.opsForHash().put(key, item, value); 259 if (time > 0) 260 expire(key, time); 261 262 return true; 263 catch (Exception e) 264 e.printStackTrace(); 265 return false; 266 267 268 269 /** 270 * 删除hash表中的值 271 * 272 * @param key 键 不能为null 273 * @param item 项 可以使多个 不能为null 274 */ 275 276 public void hdel(String key, Object... item) 277 redisTemplate.opsForHash().delete(key, item); 278 279 280 /** 281 * 判断hash表中是否有该项的值 282 * 283 * @param key 键 不能为null 284 * @param item 项 不能为null 285 * @return true 存在 false不存在 286 */ 287 288 public boolean hHasKey(String key, String item) 289 return redisTemplate.opsForHash().hasKey(key, item); 290 291 292 /** 293 * hash递增 如果不存在,就会创建一个 并把新增后的值返回 294 * 295 * @param key 键 296 * @param item 项 297 * @param by 要增加几(大于0) 298 */ 299 300 public double hincr(String key, String item, double by) 301 return redisTemplate.opsForHash().increment(key, item, by); 302 303 304 /** 305 * hash递减 306 * 307 * @param key 键 308 * @param item 项 309 * @param by 要减少记(小于0) 310 */ 311 312 public double hdecr(String key, String item, double by) 313 return redisTemplate.opsForHash().increment(key, item, -by); 314 315 316 // ============================set============================= 317 318 /** 319 * 根据key获取Set中的所有值 320 * 321 * @param key 键 322 */ 323 324 public Set<Object> sGet(String key) 325 try 326 return redisTemplate.opsForSet().members(key); 327 catch (Exception e) 328 e.printStackTrace(); 329 return null; 330 331 332 333 /** 334 * 根据value从一个set中查询,是否存在 335 * 336 * @param key 键 337 * @param value 值 338 * @return true 存在 false不存在 339 */ 340 341 public boolean sHasKey(String key, Object value) 342 try 343 return redisTemplate.opsForSet().isMember(key, value); 344 catch (Exception e) 345 e.printStackTrace(); 346 return false; 347 348 349 350 /** 351 * 将数据放入set缓存 352 * 353 * @param key 键 354 * @param values 值 可以是多个 355 * @return 成功个数 356 */ 357 358 public long sSet(String key, Object... values) 359 try 360 return redisTemplate.opsForSet().add(key, values); 361 catch (Exception e) 362 e.printStackTrace(); 363 return 0; 364 365 366 367 /** 368 * 将set数据放入缓存 369 * 370 * @param key 键 371 * @param time 时间(秒) 372 * @param values 值 可以是多个 373 * @return 成功个数 374 */ 375 376 public long sSetAndTime(String key, long time, Object... values) 377 try 378 Long count = redisTemplate.opsForSet().add(key, values); 379 if (time > 0) 380 expire(key, time); 381 return count; 382 catch (Exception e) 383 e.printStackTrace(); 384 return 0; 385 386 387 388 /** 389 * 获取set缓存的长度 390 * 391 * @param key 键 392 */ 393 394 public long sGetSetSize(String key) 395 try 396 return redisTemplate.opsForSet().size(key); 397 catch (Exception e) 398 e.printStackTrace(); 399 return 0; 400 401 402 403 /** 404 * 移除值为value的 405 * 406 * @param key 键 407 * @param values 值 可以是多个 408 * @return 移除的个数 409 */ 410 411 public long setRemove(String key, Object... values) 412 try 413 Long count = redisTemplate.opsForSet().remove(key, values); 414 return count; 415 catch (Exception e) 416 e.printStackTrace(); 417 return 0; 418 419 420 421 // ===============================list================================= 422 423 /** 424 * 获取list缓存的内容 425 * 426 * @param key 键 427 * @param start 开始 428 * @param end 结束 0 到 -1代表所有值 429 */ 430 431 public List<Object> lGet(String key, long start, long end) 432 try 433 return redisTemplate.opsForList().range(key, start, end); 434 catch (Exception e) 435 e.printStackTrace(); 436 return null; 437 438 439 440 /** 441 * 获取list缓存的长度 442 * 443 * @param key 键 444 */ 445 446 public long lGetListSize(String key) 447 try 448 return redisTemplate.opsForList().size(key); 449 catch (Exception e) 450 e.printStackTrace(); 451 return 0; 452 453 454 455 /** 456 * 通过索引 获取list中的值 457 * 458 * @param key 键 459 * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 460 */ 461 462 public Object lGetIndex(String key, long index) 463 try 464 return redisTemplate.opsForList().index(key, index); 465 catch (Exception e) 466 e.printStackTrace(); 467 return null; 468 469 470 471 /** 472 * 将list放入缓存 473 * 474 * @param key 键 475 * @param value 值 476 * @return 477 */ 478 479 public boolean lSet(String key, Object value) 480 try 481 redisTemplate.opsForList().rightPush(key, value); 482 return true; 483 catch (Exception e) 484 e.printStackTrace(); 485 return false; 486 487 488 489 /** 490 * 将list放入缓存 491 * 492 * @param key 键 493 * @param value 值 494 * @param time 时间(秒) 495 * @return 496 */ 497 498 public boolean lSet(String key, Object value, long time) 499 try 500 redisTemplate.opsForList().rightPush(key, value); 501 if (time > 0) 502 expire(key, time); 503 return true; 504 catch (Exception e) 505 e.printStackTrace(); 506 return false; 507 508 509 510 /** 511 * 将list放入缓存 512 * 513 * @param key 键 514 * @param value 值 515 */ 516 517 public boolean lSet(String key, List<Object> value) 518 try 519 redisTemplate.opsForList().rightPushAll(key, value); 520 return true; 521 catch (Exception e) 522 e.printStackTrace(); 523 return false; 524 525 526 527 /** 528 * 将list放入缓存 529 * 530 * @param key 键 531 * @param value 值 532 * @param time 时间(秒) 533 */ 534 535 public boolean lSet(String key, List<Object> value, long time) 536 try 537 redisTemplate.opsForList().rightPushAll(key, value); 538 if (time > 0) 539 expire(key, time); 540 return true; 541 catch (Exception e) 542 e.printStackTrace(); 543 return false; 544 545 546 547 /** 548 * 根据索引修改list中的某条数据 549 * 550 * @param key 键 551 * @param index 索引 552 * @param value 值 553 */ 554 555 public boolean lUpdateIndex(String key, long index, Object value) 556 try 557 redisTemplate.opsForList().set(key, index, value); 558 return true; 559 catch (Exception e) 560 e.printStackTrace(); 561 return false; 562 563 564 565 /** 566 * 移除N个值为value 567 * 568 * @param key 键 569 * @param count 移除多少个 570 * @param value 值 571 * @return 移除的个数 572 */ 573 574 public long lRemove(String key, long count, Object value) 575 try 576 Long remove = redisTemplate.opsForList().remove(key, count, value); 577 return remove; 578 catch (Exception e) 579 e.printStackTrace(); 580 return 0; 581 582 583
配置文件写法:
1 #springboot整合redis相关配置 2 spring: 3 # 环境 dev|test|prod 4 profiles: 5 active: dev 6 servlet: 7 multipart: 8 max-file-size: 100MB 9 max-request-size: 100MB 10 enabled: true 11 redis: 12 database: 0 # Redis服务器数据库 13 host: 192.168.1.202 # Redis服务器地址 14 port: 6379 # Redis服务器连接端口 15 password: # Redis服务器连接密码(默认为空) 16 timeout: 6000ms # 连接超时时间(毫秒) 17 jedis: 18 pool: 19 max-active: 200 # 连接池最大连接数(使用负值表示没有限制) 20 max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) 21 max-idle: 10 # 连接池中的最大空闲连接 22 min-idle: 0 # 连接池中的最小空闲连接
RedisConfig 配置代码:
1 import org.springframework.context.annotation.Bean; 2 import org.springframework.context.annotation.Configuration; 3 import org.springframework.data.redis.connection.RedisConnectionFactory; 4 import org.springframework.data.redis.core.RedisTemplate; 5 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; 6 import org.springframework.data.redis.serializer.StringRedisSerializer; 7 import com.fasterxml.jackson.annotation.JsonAutoDetect; 8 import com.fasterxml.jackson.annotation.PropertyAccessor; 9 import com.fasterxml.jackson.databind.ObjectMapper; 10 11 @Configuration 12 public class RedisConfig 13 14 @Bean 15 @SuppressWarnings("all") 16 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) 17 18 RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); 19 20 template.setConnectionFactory(factory); 21 22 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); 23 24 ObjectMapper om = new ObjectMapper(); 25 26 om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); 27 28 om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); 29 30 jackson2JsonRedisSerializer.setObjectMapper(om); 31 32 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); 33 34 // key采用String的序列化方式 35 36 template.setKeySerializer(stringRedisSerializer); 37 38 // hash的key也采用String的序列化方式 39 40 template.setHashKeySerializer(stringRedisSerializer); 41 42 // value序列化方式采用jackson 43 44 template.setValueSerializer(jackson2JsonRedisSerializer); 45 46 // hash的value序列化方式采用jackson 47 template.setHashValueSerializer(jackson2JsonRedisSerializer); 48 49 template.afterPropertiesSet(); 50 51 return template; 52 53 54 55
以上是关于RedisUtil写法,好用的主要内容,如果未能解决你的问题,请参考以下文章