javascript
SpringBoot(六):SpringBoot整合Redis
From: https://blog.csdn.net/plei_yue/article/details/79362372
前言
在本篇文章中將SpringBoot整合Redis,使用的是RedisTemplate,分別實現了SpringBoot與redis的單機版、集群版、哨兵模式的整合。
Maven依賴
<!-- 整合redis -->
??????? <dependency>
??????????? <groupId>org.springframework.boot</groupId>
??????????? <artifactId>spring-boot-starter-data-redis</artifactId>
??????? </dependency>
??? 1
??? 2
??? 3
??? 4
??? 5
項目下載及目錄結構
1.[SpringBoot整合Redis實例]
(http://download.csdn.net/download/plei_yue/10257285)
這里寫圖片描述
2.Redis安裝和相關配置參考
修改配置文件
創建一個redis.properties配置文件。
#Matser的ip地址 ?
redis.hostName=192.168.177.128
#端口號 ?
redis.port=6382
#如果有密碼 ?
redis.password=
#客戶端超時時間單位是毫秒 默認是2000
redis.timeout=10000 ?
#最大空閑數 ?
redis.maxIdle=300 ?
#連接池的最大數據庫連接數。設為0表示無限制,如果是jedis 2.4以后用redis.maxTotal ?
#redis.maxActive=600 ?
#控制一個pool可分配多少個jedis實例,用來替換上面的redis.maxActive,如果是jedis 2.4以后用該屬性 ?
redis.maxTotal=1000 ?
#最大建立連接等待時間。如果超過此時間將接到異常。設為-1表示無限制。 ?
redis.maxWaitMillis=1000 ?
#連接的最小空閑時間 默認1800000毫秒(30分鐘) ?
redis.minEvictableIdleTimeMillis=300000 ?
#每次釋放連接的最大數目,默認3 ?
redis.numTestsPerEvictionRun=1024 ?
#逐出掃描的時間間隔(毫秒) 如果為負數,則不運行逐出線程, 默認-1 ?
redis.timeBetweenEvictionRunsMillis=30000 ?
#是否在從池中取出連接前進行檢驗,如果檢驗失敗,則從池中去除連接并嘗試取出另一個 ?
redis.testOnBorrow=true ?
#在空閑時檢查有效性, 默認false ?
redis.testWhileIdle=true ?
#redis集群配置???? ?
spring.redis.cluster.nodes=192.168.177.128:7001,192.168.177.128:7002,192.168.177.128:7003,192.168.177.128:7004,192.168.177.128:7005,192.168.177.128:7006
spring.redis.cluster.max-redirects=3
#哨兵模式
#redis.sentinel.host1=192.168.177.128
#redis.sentinel.port1=26379
#redis.sentinel.host2=172.20.1.231 ?
#redis.sentinel.port2=26379
??? 1
??? 2
??? 3
??? 4
??? 5
??? 6
??? 7
??? 8
??? 9
??? 10
??? 11
??? 12
??? 13
??? 14
??? 15
??? 16
??? 17
??? 18
??? 19
??? 20
??? 21
??? 22
??? 23
??? 24
??? 25
??? 26
??? 27
??? 28
??? 29
??? 30
??? 31
??? 32
??? 33
??? 34
??? 35
??? 36
??? 37
??? 38
封裝RedisTemplate的RedisUtil類
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.CollectionUtils;
public class RedisUtil {
private RedisTemplate<String, Object> redisTemplate; ?
??? public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { ?
??????? this.redisTemplate = redisTemplate; ?
??? } ?
??? //=============================common============================ ?
??? /**
???? * 指定緩存失效時間
???? * @param key 鍵
???? * @param time 時間(秒)
???? * @return
???? */ ?
??? public boolean expire(String key,long time){ ?
??????? try { ?
??????????? if(time>0){ ?
??????????????? redisTemplate.expire(key, time, TimeUnit.SECONDS); ?
??????????? } ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 根據key 獲取過期時間
???? * @param key 鍵 不能為null
???? * @return 時間(秒) 返回0代表為永久有效
???? */ ?
??? public long getExpire(String key){ ?
??????? return redisTemplate.getExpire(key,TimeUnit.SECONDS); ?
??? } ?
??? /**
???? * 判斷key是否存在
???? * @param key 鍵
???? * @return true 存在 false不存在
???? */ ?
??? public boolean hasKey(String key){ ?
??????? try { ?
??????????? return redisTemplate.hasKey(key); ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 刪除緩存
???? * @param key 可以傳一個值 或多個
???? */ ?
??? @SuppressWarnings("unchecked") ?
??? public void del(String ... key){ ?
??????? if(key!=null&&key.length>0){ ?
??????????? if(key.length==1){ ?
??????????????? redisTemplate.delete(key[0]); ?
??????????? }else{ ?
??????????????? redisTemplate.delete(CollectionUtils.arrayToList(key)); ?
??????????? } ?
??????? } ?
??? } ?
??? //============================String============================= ?
??? /**
???? * 普通緩存獲取
???? * @param key 鍵
???? * @return 值
???? */ ?
??? public Object get(String key){ ?
??????? return key==null?null:redisTemplate.opsForValue().get(key); ?
??? } ?
??? /**
???? * 普通緩存放入
???? * @param key 鍵
???? * @param value 值
???? * @return true成功 false失敗
???? */ ?
??? public boolean set(String key,Object value) { ?
???????? try { ?
??????????? redisTemplate.opsForValue().set(key, value); ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 普通緩存放入并設置時間
???? * @param key 鍵
???? * @param value 值
???? * @param time 時間(秒) time要大于0 如果time小于等于0 將設置無限期
???? * @return true成功 false 失敗
???? */ ?
??? public boolean set(String key,Object value,long time){ ?
??????? try { ?
??????????? if(time>0){ ?
??????????????? redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); ?
??????????? }else{ ?
??????????????? set(key, value); ?
??????????? } ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 遞增
???? * @param key 鍵
???? * @param by 要增加幾(大于0)
???? * @return
???? */ ?
??? public long incr(String key, long delta){?? ?
??????? if(delta<0){ ?
??????????? throw new RuntimeException("遞增因子必須大于0"); ?
??????? } ?
??????? return redisTemplate.opsForValue().increment(key, delta); ?
??? } ?
??? /**
???? * 遞減
???? * @param key 鍵
???? * @param by 要減少幾(小于0)
???? * @return
???? */ ?
??? public long decr(String key, long delta){?? ?
??????? if(delta<0){ ?
??????????? throw new RuntimeException("遞減因子必須大于0"); ?
??????? } ?
??????? return redisTemplate.opsForValue().increment(key, -delta);?? ?
??? }?? ?
??? //================================Map================================= ?
??? /**
???? * HashGet
???? * @param key 鍵 不能為null
???? * @param item 項 不能為null
???? * @return 值
???? */ ?
??? public Object hget(String key,String item){ ?
??????? return redisTemplate.opsForHash().get(key, item); ?
??? } ?
??? /**
???? * 獲取hashKey對應的所有鍵值
???? * @param key 鍵
???? * @return 對應的多個鍵值
???? */ ?
??? public Map<Object,Object> hmget(String key){ ?
??????? return redisTemplate.opsForHash().entries(key); ?
??? } ?
??? /**
???? * HashSet
???? * @param key 鍵
???? * @param map 對應多個鍵值
???? * @return true 成功 false 失敗
???? */ ?
??? public boolean hmset(String key, Map<String,Object> map){?? ?
??????? try { ?
??????????? redisTemplate.opsForHash().putAll(key, map); ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * HashSet 并設置時間
???? * @param key 鍵
???? * @param map 對應多個鍵值
???? * @param time 時間(秒)
???? * @return true成功 false失敗
???? */ ?
??? public boolean hmset(String key, Map<String,Object> map, long time){?? ?
??????? try { ?
??????????? redisTemplate.opsForHash().putAll(key, map); ?
??????????? if(time>0){ ?
??????????????? expire(key, time); ?
??????????? } ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 向一張hash表中放入數據,如果不存在將創建
???? * @param key 鍵
???? * @param item 項
???? * @param value 值
???? * @return true 成功 false失敗
???? */ ?
??? public boolean hset(String key,String item,Object value) { ?
???????? try { ?
??????????? redisTemplate.opsForHash().put(key, item, value); ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 向一張hash表中放入數據,如果不存在將創建
???? * @param key 鍵
???? * @param item 項
???? * @param value 值
???? * @param time 時間(秒)? 注意:如果已存在的hash表有時間,這里將會替換原有的時間
???? * @return true 成功 false失敗
???? */ ?
??? public boolean hset(String key,String item,Object value,long time) { ?
???????? try { ?
??????????? redisTemplate.opsForHash().put(key, item, value); ?
??????????? if(time>0){ ?
??????????????? expire(key, time); ?
??????????? } ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 刪除hash表中的值
???? * @param key 鍵 不能為null
???? * @param item 項 可以使多個 不能為null
???? */ ?
??? public void hdel(String key, Object... item){?? ?
??????? redisTemplate.opsForHash().delete(key,item); ?
??? }? ?
??? /**
???? * 判斷hash表中是否有該項的值
???? * @param key 鍵 不能為null
???? * @param item 項 不能為null
???? * @return true 存在 false不存在
???? */ ?
??? public boolean hHasKey(String key, String item){ ?
??????? return redisTemplate.opsForHash().hasKey(key, item); ?
??? }? ?
??? /**
???? * hash遞增 如果不存在,就會創建一個 并把新增后的值返回
???? * @param key 鍵
???? * @param item 項
???? * @param by 要增加幾(大于0)
???? * @return
???? */ ?
??? public double hincr(String key, String item,double by){?? ?
??????? return redisTemplate.opsForHash().increment(key, item, by); ?
??? } ?
??? /**
???? * hash遞減
???? * @param key 鍵
???? * @param item 項
???? * @param by 要減少記(小于0)
???? * @return
???? */ ?
??? public double hdecr(String key, String item,double by){?? ?
??????? return redisTemplate.opsForHash().increment(key, item,-by);?? ?
??? }?? ?
??? //============================set============================= ?
??? /**
???? * 根據key獲取Set中的所有值
???? * @param key 鍵
???? * @return
???? */ ?
??? public Set<Object> sGet(String key){ ?
??????? try { ?
??????????? return redisTemplate.opsForSet().members(key); ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return null; ?
??????? } ?
??? } ?
??? /**
???? * 根據value從一個set中查詢,是否存在
???? * @param key 鍵
???? * @param value 值
???? * @return true 存在 false不存在
???? */ ?
??? public boolean sHasKey(String key,Object value){ ?
??????? try { ?
??????????? return redisTemplate.opsForSet().isMember(key, value); ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 將數據放入set緩存
???? * @param key 鍵
???? * @param values 值 可以是多個
???? * @return 成功個數
???? */ ?
??? public long sSet(String key, Object...values) { ?
??????? try { ?
??????????? return redisTemplate.opsForSet().add(key, values); ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return 0; ?
??????? } ?
??? } ?
??? /**
???? * 將set數據放入緩存
???? * @param key 鍵
???? * @param time 時間(秒)
???? * @param values 值 可以是多個
???? * @return 成功個數
???? */ ?
??? public long sSetAndTime(String key,long time,Object...values) { ?
??????? try { ?
??????????? Long count = redisTemplate.opsForSet().add(key, values); ?
??????????? if(time>0) expire(key, time); ?
??????????? return count; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return 0; ?
??????? } ?
??? } ?
??? /**
???? * 獲取set緩存的長度
???? * @param key 鍵
???? * @return
???? */ ?
??? public long sGetSetSize(String key){ ?
??????? try { ?
??????????? return redisTemplate.opsForSet().size(key); ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return 0; ?
??????? } ?
??? } ?
??? /**
???? * 移除值為value的
???? * @param key 鍵
???? * @param values 值 可以是多個
???? * @return 移除的個數
???? */ ?
??? public long setRemove(String key, Object ...values) { ?
??????? try { ?
??????????? Long count = redisTemplate.opsForSet().remove(key, values); ?
??????????? return count; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return 0; ?
??????? } ?
??? } ?
??? //===============================list================================= ?
??? /**
???? * 獲取list緩存的內容
???? * @param key 鍵
???? * @param start 開始
???? * @param end 結束? 0 到 -1代表所有值
???? * @return
???? */ ?
??? public List<Object> lGet(String key,long start, long end){ ?
??????? try { ?
??????????? return redisTemplate.opsForList().range(key, start, end); ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return null; ?
??????? } ?
??? } ?
??? /**
???? * 獲取list緩存的長度
???? * @param key 鍵
???? * @return
???? */ ?
??? public long lGetListSize(String key){ ?
??????? try { ?
??????????? return redisTemplate.opsForList().size(key); ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return 0; ?
??????? } ?
??? } ?
??? /**
???? * 通過索引 獲取list中的值
???? * @param key 鍵
???? * @param index 索引? index>=0時, 0 表頭,1 第二個元素,依次類推;index<0時,-1,表尾,-2倒數第二個元素,依次類推
???? * @return
???? */ ?
??? public Object lGetIndex(String key,long index){ ?
??????? try { ?
??????????? return redisTemplate.opsForList().index(key, index); ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return null; ?
??????? } ?
??? } ?
??? /**
???? * 將list放入緩存
???? * @param key 鍵
???? * @param value 值
???? * @param time 時間(秒)
???? * @return
???? */ ?
??? public boolean lSet(String key, Object value) { ?
??????? try { ?
??????????? redisTemplate.opsForList().rightPush(key, value); ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 將list放入緩存
???? * @param key 鍵
???? * @param value 值
???? * @param time 時間(秒)
???? * @return
???? */ ?
??? public boolean lSet(String key, Object value, long time) { ?
??????? try { ?
??????????? redisTemplate.opsForList().rightPush(key, value); ?
??????????? if (time > 0) expire(key, time); ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 將list放入緩存
???? * @param key 鍵
???? * @param value 值
???? * @param time 時間(秒)
???? * @return
???? */ ?
??? public boolean lSet(String key, List<Object> value) { ?
??????? try { ?
??????????? redisTemplate.opsForList().rightPushAll(key, value); ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 將list放入緩存
???? * @param key 鍵
???? * @param value 值
???? * @param time 時間(秒)
???? * @return
???? */ ?
??? public boolean lSet(String key, List<Object> value, long time) { ?
??????? try { ?
??????????? redisTemplate.opsForList().rightPushAll(key, value); ?
??????????? if (time > 0) expire(key, time); ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? } ?
??? /**
???? * 根據索引修改list中的某條數據
???? * @param key 鍵
???? * @param index 索引
???? * @param value 值
???? * @return
???? */ ?
??? public boolean lUpdateIndex(String key, long index,Object value) { ?
??????? try { ?
??????????? redisTemplate.opsForList().set(key, index, value); ?
??????????? return true; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return false; ?
??????? } ?
??? }? ?
??? /**
???? * 移除N個值為value ?
???? * @param key 鍵
???? * @param count 移除多少個
???? * @param value 值
???? * @return 移除的個數
???? */ ?
??? public long lRemove(String key,long count,Object value) { ?
??????? try { ?
??????????? Long remove = redisTemplate.opsForList().remove(key, count, value); ?
??????????? return remove; ?
??????? } catch (Exception e) { ?
??????????? e.printStackTrace(); ?
??????????? return 0; ?
??????? } ?
??? } ?
}
??? 1
??? 2
??? 3
??? 4
??? 5
??? 6
??? 7
??? 8
??? 9
??? 10
??? 11
??? 12
??? 13
??? 14
??? 15
??? 16
??? 17
??? 18
??? 19
??? 20
??? 21
??? 22
??? 23
??? 24
??? 25
??? 26
??? 27
??? 28
??? 29
??? 30
??? 31
??? 32
??? 33
??? 34
??? 35
??? 36
??? 37
??? 38
??? 39
??? 40
??? 41
??? 42
??? 43
??? 44
??? 45
??? 46
??? 47
??? 48
??? 49
??? 50
??? 51
??? 52
??? 53
??? 54
??? 55
??? 56
??? 57
??? 58
??? 59
??? 60
??? 61
??? 62
??? 63
??? 64
??? 65
??? 66
??? 67
??? 68
??? 69
??? 70
??? 71
??? 72
??? 73
??? 74
??? 75
??? 76
??? 77
??? 78
??? 79
??? 80
??? 81
??? 82
??? 83
??? 84
??? 85
??? 86
??? 87
??? 88
??? 89
??? 90
??? 91
??? 92
??? 93
??? 94
??? 95
??? 96
??? 97
??? 98
??? 99
??? 100
??? 101
??? 102
??? 103
??? 104
??? 105
??? 106
??? 107
??? 108
??? 109
??? 110
??? 111
??? 112
??? 113
??? 114
??? 115
??? 116
??? 117
??? 118
??? 119
??? 120
??? 121
??? 122
??? 123
??? 124
??? 125
??? 126
??? 127
??? 128
??? 129
??? 130
??? 131
??? 132
??? 133
??? 134
??? 135
??? 136
??? 137
??? 138
??? 139
??? 140
??? 141
??? 142
??? 143
??? 144
??? 145
??? 146
??? 147
??? 148
??? 149
??? 150
??? 151
??? 152
??? 153
??? 154
??? 155
??? 156
??? 157
??? 158
??? 159
??? 160
??? 161
??? 162
??? 163
??? 164
??? 165
??? 166
??? 167
??? 168
??? 169
??? 170
??? 171
??? 172
??? 173
??? 174
??? 175
??? 176
??? 177
??? 178
??? 179
??? 180
??? 181
??? 182
??? 183
??? 184
??? 185
??? 186
??? 187
??? 188
??? 189
??? 190
??? 191
??? 192
??? 193
??? 194
??? 195
??? 196
??? 197
??? 198
??? 199
??? 200
??? 201
??? 202
??? 203
??? 204
??? 205
??? 206
??? 207
??? 208
??? 209
??? 210
??? 211
??? 212
??? 213
??? 214
??? 215
??? 216
??? 217
??? 218
??? 219
??? 220
??? 221
??? 222
??? 223
??? 224
??? 225
??? 226
??? 227
??? 228
??? 229
??? 230
??? 231
??? 232
??? 233
??? 234
??? 235
??? 236
??? 237
??? 238
??? 239
??? 240
??? 241
??? 242
??? 243
??? 244
??? 245
??? 246
??? 247
??? 248
??? 249
??? 250
??? 251
??? 252
??? 253
??? 254
??? 255
??? 256
??? 257
??? 258
??? 259
??? 260
??? 261
??? 262
??? 263
??? 264
??? 265
??? 266
??? 267
??? 268
??? 269
??? 270
??? 271
??? 272
??? 273
??? 274
??? 275
??? 276
??? 277
??? 278
??? 279
??? 280
??? 281
??? 282
??? 283
??? 284
??? 285
??? 286
??? 287
??? 288
??? 289
??? 290
??? 291
??? 292
??? 293
??? 294
??? 295
??? 296
??? 297
??? 298
??? 299
??? 300
??? 301
??? 302
??? 303
??? 304
??? 305
??? 306
??? 307
??? 308
??? 309
??? 310
??? 311
??? 312
??? 313
??? 314
??? 315
??? 316
??? 317
??? 318
??? 319
??? 320
??? 321
??? 322
??? 323
??? 324
??? 325
??? 326
??? 327
??? 328
??? 329
??? 330
??? 331
??? 332
??? 333
??? 334
??? 335
??? 336
??? 337
??? 338
??? 339
??? 340
??? 341
??? 342
??? 343
??? 344
??? 345
??? 346
??? 347
??? 348
??? 349
??? 350
??? 351
??? 352
??? 353
??? 354
??? 355
??? 356
??? 357
??? 358
??? 359
??? 360
??? 361
??? 362
??? 363
??? 364
??? 365
??? 366
??? 367
??? 368
??? 369
??? 370
??? 371
??? 372
??? 373
??? 374
??? 375
??? 376
??? 377
??? 378
??? 379
??? 380
??? 381
??? 382
??? 383
??? 384
??? 385
??? 386
??? 387
??? 388
??? 389
??? 390
??? 391
??? 392
??? 393
??? 394
??? 395
??? 396
??? 397
??? 398
??? 399
??? 400
??? 401
??? 402
??? 403
??? 404
??? 405
??? 406
??? 407
??? 408
??? 409
??? 410
??? 411
??? 412
??? 413
??? 414
??? 415
??? 416
??? 417
??? 418
??? 419
??? 420
??? 421
??? 422
??? 423
??? 424
??? 425
??? 426
??? 427
??? 428
??? 429
??? 430
??? 431
??? 432
??? 433
??? 434
??? 435
??? 436
??? 437
??? 438
??? 439
??? 440
??? 441
??? 442
??? 443
??? 444
??? 445
??? 446
??? 447
??? 448
??? 449
??? 450
??? 451
??? 452
??? 453
??? 454
??? 455
??? 456
??? 457
??? 458
??? 459
??? 460
??? 461
??? 462
??? 463
??? 464
??? 465
??? 466
??? 467
??? 468
??? 469
??? 470
??? 471
??? 472
??? 473
??? 474
??? 475
??? 476
??? 477
??? 478
??? 479
??? 480
??? 481
??? 482
??? 483
??? 484
??? 485
??? 486
??? 487
??? 488
??? 489
??? 490
??? 491
??? 492
??? 493
??? 494
??? 495
??? 496
??? 497
??? 498
??? 499
??? 500
??? 501
??? 502
??? 503
??? 504
??? 505
??? 506
??? 507
??? 508
??? 509
??? 510
??? 511
??? 512
??? 513
??? 514
??? 515
??? 516
??? 517
??? 518
??? 519
??? 520
??? 521
??? 522
??? 523
??? 524
SpringBoot整合單機版redis
如果我們只需要整合redis的單機版,只要在redis.conf中進行如下配置
@Configuration
@PropertySource("classpath:config/redis.properties")
public class RedisConfig {
??? @Value("${redis.maxIdle}")
??? private Integer maxIdle;
??? @Value("${redis.maxTotal}")
??? private Integer maxTotal;
??? @Value("${redis.maxWaitMillis}")
??? private Integer maxWaitMillis;
??? @Value("${redis.minEvictableIdleTimeMillis}")
??? private Integer minEvictableIdleTimeMillis;
??? @Value("${redis.numTestsPerEvictionRun}")
??? private Integer numTestsPerEvictionRun;
??? @Value("${redis.timeBetweenEvictionRunsMillis}")
??? private long timeBetweenEvictionRunsMillis;
??? @Value("${redis.testOnBorrow}")
??? private boolean testOnBorrow;
??? @Value("${redis.testWhileIdle}")
??? private boolean testWhileIdle;
??? @Value("${spring.redis.cluster.nodes}")
??? private String clusterNodes;
??? @Value("${spring.redis.cluster.max-redirects}")
??? private Integer mmaxRedirectsac;
??? /**
???? * JedisPoolConfig 連接池
???? * @return
???? */
??? @Bean
??? public JedisPoolConfig jedisPoolConfig() {
??????? JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
??????? // 最大空閑數
??????? jedisPoolConfig.setMaxIdle(maxIdle);
??????? // 連接池的最大數據庫連接數
??????? jedisPoolConfig.setMaxTotal(maxTotal);
??????? // 最大建立連接等待時間
??????? jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
??????? // 逐出連接的最小空閑時間 默認1800000毫秒(30分鐘)
??????? jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
??????? // 每次逐出檢查時 逐出的最大數目 如果為負數就是 : 1/abs(n), 默認3
??????? jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
??????? // 逐出掃描的時間間隔(毫秒) 如果為負數,則不運行逐出線程, 默認-1
??????? jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
??????? // 是否在從池中取出連接前進行檢驗,如果檢驗失敗,則從池中去除連接并嘗試取出另一個
??????? jedisPoolConfig.setTestOnBorrow(testOnBorrow);
??????? // 在空閑時檢查有效性, 默認false
??????? jedisPoolConfig.setTestWhileIdle(testWhileIdle);
??????? return jedisPoolConfig;
??? }
??? /**
???? * 單機版配置
??? * @Title: JedisConnectionFactory
??? * @param @param jedisPoolConfig
??? * @param @return
??? * @return JedisConnectionFactory
??? * @autor lpl
??? * @date 2018年2月24日
??? * @throws
???? */
??? @Bean
??? public JedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig){
??????? JedisConnectionFactory JedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);
??????? //連接池 ?
??????? JedisConnectionFactory.setPoolConfig(jedisPoolConfig); ?
??????? //IP地址 ?
??????? JedisConnectionFactory.setHostName("192.168.177.128"); ?
??????? //端口號 ?
??????? JedisConnectionFactory.setPort(6379); ?
??????? //如果Redis設置有密碼 ?
??????? //JedisConnectionFactory.setPassword(password); ?
??????? //客戶端超時時間單位是毫秒 ?
??????? JedisConnectionFactory.setTimeout(5000); ?
??????? return JedisConnectionFactory;
??? }
??? /**
???? * 實例化 RedisTemplate 對象
???? *
???? * @return
???? */
??? @Bean
??? public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
??????? RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
??????? initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
??????? return redisTemplate;
??? }
??? /**
???? * 設置數據存入 redis 的序列化方式,并開啟事務
???? *
???? * @param redisTemplate
???? * @param factory
???? */
??? private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
??????? //如果不配置Serializer,那么存儲的時候缺省使用String,如果用User類型存儲,那么會提示錯誤User can't cast to String! ?
??????? redisTemplate.setKeySerializer(new StringRedisSerializer());
??????? redisTemplate.setHashKeySerializer(new StringRedisSerializer());
??????? redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
??????? redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
??????? // 開啟事務
??????? redisTemplate.setEnableTransactionSupport(true);
??????? redisTemplate.setConnectionFactory(factory);
??? }
??? /**
???? * 注入封裝RedisTemplate
??? * @Title: redisUtil
??? * @return RedisUtil
??? * @autor lpl
??? * @date 2017年12月21日
??? * @throws
???? */
??? @Bean(name = "redisUtil")
??? public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
??????? RedisUtil redisUtil = new RedisUtil();
??????? redisUtil.setRedisTemplate(redisTemplate);
??????? return redisUtil;
??? }
??? 1
??? 2
??? 3
??? 4
??? 5
??? 6
??? 7
??? 8
??? 9
??? 10
??? 11
??? 12
??? 13
??? 14
??? 15
??? 16
??? 17
??? 18
??? 19
??? 20
??? 21
??? 22
??? 23
??? 24
??? 25
??? 26
??? 27
??? 28
??? 29
??? 30
??? 31
??? 32
??? 33
??? 34
??? 35
??? 36
??? 37
??? 38
??? 39
??? 40
??? 41
??? 42
??? 43
??? 44
??? 45
??? 46
??? 47
??? 48
??? 49
??? 50
??? 51
??? 52
??? 53
??? 54
??? 55
??? 56
??? 57
??? 58
??? 59
??? 60
??? 61
??? 62
??? 63
??? 64
??? 65
??? 66
??? 67
??? 68
??? 69
??? 70
??? 71
??? 72
??? 73
??? 74
??? 75
??? 76
??? 77
??? 78
??? 79
??? 80
??? 81
??? 82
??? 83
??? 84
??? 85
??? 86
??? 87
??? 88
??? 89
??? 90
??? 91
??? 92
??? 93
??? 94
??? 95
??? 96
??? 97
??? 98
??? 99
??? 100
??? 101
??? 102
??? 103
??? 104
??? 105
??? 106
??? 107
??? 108
??? 109
??? 110
??? 111
??? 112
??? 113
??? 114
??? 115
??? 116
??? 117
??? 118
??? 119
??? 120
??? 121
??? 122
??? 123
??? 124
??? 125
??? 126
??? 127
SpringBoot整合Redis-Cluster集群
@Configuration
@PropertySource("classpath:config/redis.properties")
public class RedisConfig {
??? @Value("${redis.maxIdle}")
??? private Integer maxIdle;
??? @Value("${redis.maxTotal}")
??? private Integer maxTotal;
??? @Value("${redis.maxWaitMillis}")
??? private Integer maxWaitMillis;
??? @Value("${redis.minEvictableIdleTimeMillis}")
??? private Integer minEvictableIdleTimeMillis;
??? @Value("${redis.numTestsPerEvictionRun}")
??? private Integer numTestsPerEvictionRun;
??? @Value("${redis.timeBetweenEvictionRunsMillis}")
??? private long timeBetweenEvictionRunsMillis;
??? @Value("${redis.testOnBorrow}")
??? private boolean testOnBorrow;
??? @Value("${redis.testWhileIdle}")
??? private boolean testWhileIdle;
??? @Value("${spring.redis.cluster.nodes}")
??? private String clusterNodes;
??? @Value("${spring.redis.cluster.max-redirects}")
??? private Integer mmaxRedirectsac;
??? /**
???? * JedisPoolConfig 連接池
???? * @return
???? */
??? @Bean
??? public JedisPoolConfig jedisPoolConfig() {
??????? JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
??????? // 最大空閑數
??????? jedisPoolConfig.setMaxIdle(maxIdle);
??????? // 連接池的最大數據庫連接數
??????? jedisPoolConfig.setMaxTotal(maxTotal);
??????? // 最大建立連接等待時間
??????? jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
??????? // 逐出連接的最小空閑時間 默認1800000毫秒(30分鐘)
??????? jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
??????? // 每次逐出檢查時 逐出的最大數目 如果為負數就是 : 1/abs(n), 默認3
??????? jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
??????? // 逐出掃描的時間間隔(毫秒) 如果為負數,則不運行逐出線程, 默認-1
??????? jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
??????? // 是否在從池中取出連接前進行檢驗,如果檢驗失敗,則從池中去除連接并嘗試取出另一個
??????? jedisPoolConfig.setTestOnBorrow(testOnBorrow);
??????? // 在空閑時檢查有效性, 默認false
??????? jedisPoolConfig.setTestWhileIdle(testWhileIdle);
??????? return jedisPoolConfig;
??? }
??? /**
???? * Redis集群的配置
??? * @return RedisClusterConfiguration
??? * @autor lpl
??? * @date 2017年12月22日
??? * @throws
???? */
??? @Bean
??? public RedisClusterConfiguration redisClusterConfiguration(){
??????? RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
??????? //Set<RedisNode> clusterNodes
??????? String[] serverArray = clusterNodes.split(",");
??????? Set<RedisNode> nodes = new HashSet<RedisNode>();
??????? for(String ipPort:serverArray){
??????????? String[] ipAndPort = ipPort.split(":");
??????????? nodes.add(new RedisNode(ipAndPort[0].trim(),Integer.valueOf(ipAndPort[1])));
??????? }
??????? redisClusterConfiguration.setClusterNodes(nodes);
??????? redisClusterConfiguration.setMaxRedirects(mmaxRedirectsac);
??????? return redisClusterConfiguration;
??? }
??? /**
???? * 配置工廠
??? * @Title: JedisConnectionFactory
??? * @param @param jedisPoolConfig
??? * @param @return
??? * @return JedisConnectionFactory
??? * @autor lpl
??? * @date 2017年12月22日
??? * @throws
???? */
??? @Bean
??? public JedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig,RedisClusterConfiguration redisClusterConfiguration){
??????? JedisConnectionFactory JedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration,jedisPoolConfig);
??????? return JedisConnectionFactory;
??? }
??? /**
???? * 實例化 RedisTemplate 對象
???? *
???? * @return
???? */
??? @Bean
??? public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
??????? RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
??????? initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
??????? return redisTemplate;
??? }
??? /**
???? * 設置數據存入 redis 的序列化方式,并開啟事務
???? *
???? * @param redisTemplate
???? * @param factory
???? */
??? private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
??????? //如果不配置Serializer,那么存儲的時候缺省使用String,如果用User類型存儲,那么會提示錯誤User can't cast to String! ?
??????? redisTemplate.setKeySerializer(new StringRedisSerializer());
??????? redisTemplate.setHashKeySerializer(new StringRedisSerializer());
??????? redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
??????? redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
??????? // 開啟事務
??????? redisTemplate.setEnableTransactionSupport(true);
??????? redisTemplate.setConnectionFactory(factory);
??? }
??? /**
???? * 注入封裝RedisTemplate
??? * @Title: redisUtil
??? * @return RedisUtil
??? * @autor lpl
??? * @date 2017年12月21日
??? * @throws
???? */
??? @Bean(name = "redisUtil")
??? public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
??????? RedisUtil redisUtil = new RedisUtil();
??????? redisUtil.setRedisTemplate(redisTemplate);
??????? return redisUtil;
??? }
??? 1
??? 2
??? 3
??? 4
??? 5
??? 6
??? 7
??? 8
??? 9
??? 10
??? 11
??? 12
??? 13
??? 14
??? 15
??? 16
??? 17
??? 18
??? 19
??? 20
??? 21
??? 22
??? 23
??? 24
??? 25
??? 26
??? 27
??? 28
??? 29
??? 30
??? 31
??? 32
??? 33
??? 34
??? 35
??? 36
??? 37
??? 38
??? 39
??? 40
??? 41
??? 42
??? 43
??? 44
??? 45
??? 46
??? 47
??? 48
??? 49
??? 50
??? 51
??? 52
??? 53
??? 54
??? 55
??? 56
??? 57
??? 58
??? 59
??? 60
??? 61
??? 62
??? 63
??? 64
??? 65
??? 66
??? 67
??? 68
??? 69
??? 70
??? 71
??? 72
??? 73
??? 74
??? 75
??? 76
??? 77
??? 78
??? 79
??? 80
??? 81
??? 82
??? 83
??? 84
??? 85
??? 86
??? 87
??? 88
??? 89
??? 90
??? 91
??? 92
??? 93
??? 94
??? 95
??? 96
??? 97
??? 98
??? 99
??? 100
??? 101
??? 102
??? 103
??? 104
??? 105
??? 106
??? 107
??? 108
??? 109
??? 110
??? 111
??? 112
??? 113
??? 114
??? 115
??? 116
??? 117
??? 118
??? 119
??? 120
??? 121
??? 122
??? 123
??? 124
??? 125
??? 126
??? 127
??? 128
??? 129
??? 130
??? 131
??? 132
??? 133
??? 134
??? 135
??? 136
??? 137
??? 138
??? 139
??? 140
??? 141
??? 142
??? 143
SpringBoot整合Redis的哨兵模式
@Configuration
@PropertySource("classpath:config/redis.properties")
public class RedisConfig {
??? @Value("${redis.maxIdle}")
??? private Integer maxIdle;
??? @Value("${redis.maxTotal}")
??? private Integer maxTotal;
??? @Value("${redis.maxWaitMillis}")
??? private Integer maxWaitMillis;
??? @Value("${redis.minEvictableIdleTimeMillis}")
??? private Integer minEvictableIdleTimeMillis;
??? @Value("${redis.numTestsPerEvictionRun}")
??? private Integer numTestsPerEvictionRun;
??? @Value("${redis.timeBetweenEvictionRunsMillis}")
??? private long timeBetweenEvictionRunsMillis;
??? @Value("${redis.testOnBorrow}")
??? private boolean testOnBorrow;
??? @Value("${redis.testWhileIdle}")
??? private boolean testWhileIdle;
??? @Value("${spring.redis.cluster.nodes}")
??? private String clusterNodes;
??? @Value("${spring.redis.cluster.max-redirects}")
??? private Integer mmaxRedirectsac;
??? /**
???? * JedisPoolConfig 連接池
???? * @return
???? */
??? @Bean
??? public JedisPoolConfig jedisPoolConfig() {
??????? JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
??????? // 最大空閑數
??????? jedisPoolConfig.setMaxIdle(maxIdle);
??????? // 連接池的最大數據庫連接數
??????? jedisPoolConfig.setMaxTotal(maxTotal);
??????? // 最大建立連接等待時間
??????? jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
??????? // 逐出連接的最小空閑時間 默認1800000毫秒(30分鐘)
??????? jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
??????? // 每次逐出檢查時 逐出的最大數目 如果為負數就是 : 1/abs(n), 默認3
??????? jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
??????? // 逐出掃描的時間間隔(毫秒) 如果為負數,則不運行逐出線程, 默認-1
??????? jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
??????? // 是否在從池中取出連接前進行檢驗,如果檢驗失敗,則從池中去除連接并嘗試取出另一個
??????? jedisPoolConfig.setTestOnBorrow(testOnBorrow);
??????? // 在空閑時檢查有效性, 默認false
??????? jedisPoolConfig.setTestWhileIdle(testWhileIdle);
??????? return jedisPoolConfig;
??? }
/**
???? * 配置redis的哨兵
??? * @return RedisSentinelConfiguration
??? * @autor lpl
??? * @date 2017年12月21日
??? * @throws
???? */
??? @Bean
??? public RedisSentinelConfiguration sentinelConfiguration(){
??????? RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
??????? //配置matser的名稱
??????? RedisNode redisNode = new RedisNode(hostName, port);
??????? redisNode.setName("mymaster");
??????? redisSentinelConfiguration.master(redisNode);
??????? //配置redis的哨兵sentinel
??????? RedisNode senRedisNode = new RedisNode(senHost1,senPort1);
??????? Set<RedisNode> redisNodeSet = new HashSet<>();
??????? redisNodeSet.add(senRedisNode);
??????? redisSentinelConfiguration.setSentinels(redisNodeSet);
??????? return redisSentinelConfiguration;
??? }
??? /**
???? * 配置工廠
???? * @param jedisPoolConfig
???? * @return
???? */
??? @Bean
??? public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig,RedisSentinelConfiguration sentinelConfig) {? ?
??????? JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(sentinelConfig,jedisPoolConfig);
??????? return jedisConnectionFactory;
??? }
/**
???? * 實例化 RedisTemplate 對象
???? *
???? * @return
???? */
??? @Bean
??? public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
??????? RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
??????? initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
??????? return redisTemplate;
??? }
??? /**
???? * 設置數據存入 redis 的序列化方式,并開啟事務
???? *
???? * @param redisTemplate
???? * @param factory
???? */
??? private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
??????? //如果不配置Serializer,那么存儲的時候缺省使用String,如果用User類型存儲,那么會提示錯誤User can't cast to String! ?
??????? redisTemplate.setKeySerializer(new StringRedisSerializer());
??????? redisTemplate.setHashKeySerializer(new StringRedisSerializer());
??????? redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
??????? redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
??????? // 開啟事務
??????? redisTemplate.setEnableTransactionSupport(true);
??????? redisTemplate.setConnectionFactory(factory);
??? }
??? /**
???? * 封裝RedisTemplate
??? * @Title: redisUtil
??? * @return RedisUtil
??? * @autor lpl
??? * @date 2017年12月21日
??? * @throws
???? */
??? @Bean(name = "redisUtil")
??? public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
??????? RedisUtil redisUtil = new RedisUtil();
??????? redisUtil.setRedisTemplate(redisTemplate);
??????? return redisUtil;
??? }
?
總結
以上是生活随笔為你收集整理的SpringBoot(六):SpringBoot整合Redis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看服务器当前的负载信息
- 下一篇: Linux sudo找不到命令:修改s