Redis常用命令
flushdb 清除該資料庫
flushall 清除所有資料庫
keys * 獲取所有的值
incr key 增加1
incrby value 增加value
decr 減少1
decrby 減少value
String型別
append key value 拼接字串
setrange key offset value 替換字串
getrange key start end 截取字串
expire name sconds 幾秒后鍵值過期
exists key 查看是否存在該值
setex (set with expier) 設定過期時間
setnx (set if not exist) 不存在設定
mset 同時設定多個值
mget 同時獲取多個值
getset 先get然后set
List型別
lpush key element 將一個值或多個值,插入到串列頭部(左)
rpush key element 將一個值或多個值,插入到串列尾部(右)
lrange key start stop 獲取list中的值
lpop key 移除list的第一個元素
rpop key 移除list的最后一個元素
lindex key postion 通過下標獲取list中的某個值
llen key 回傳串列長度
lrem key count element 移除指定值
ltrim key start stop 通過下標截取指定長度
rpoplpush source destination 移除串列的最后一個元素,將他移動到心得串列中
lset key index element 將串列中指定下標的值替換為另一個值,更新操作
linsert key before|after pivot element 將某個具體的value插入到串列中某個元素的前面或后面
Set(集合)型別
sadd key member set集合中添加元素
sismember key member 判斷某一個值是否在集合中
scard key 獲取集合的長度
smembers key 查看集合中的所有值
srem key element 移除set集合中指定元素
srandmember key count 隨機抽選指定個數元素
spop key 隨機洗掉一些set集合中的元素
smove source destination member 將指定的值,移動到另一個set的集合
sdiff key1 key2 差集
sinter key1 key2 交集
sunion key1 key2 并集
Hash 型別
Hash
hset key field value set一個具體的key-value
hget key field 獲取一個欄位值
hmset key field set多個值
hgetall key 獲取全部資料
hdel key field 洗掉hash指定key欄位
hlen key 獲取hash表的欄位數量
hexists key field 判斷hash中指定欄位是否存在
hkeys key 只獲得所有的field
hvals key 只獲得所有value
hincrby key field increment 增加指定的值的大小
hsetnx key field value 如果不存在則可以設定
Zset型別
Zset
zadd key number value 添加一個值
zadd key number value number value 添加多個值
zrange key start stop 查詢指定用戶范圍
zrangebyscore key -inf +inf 顯示全部用戶 從小到大
zrevrange key start stop 從大到小進行排序
zrangebyscore key -inf +inf withscores 顯示全部用戶并附帶成績
zrem key member 移除有序集合中的指定元素
zcard key 獲取有序集合的個數
zcount key start stop 獲取指定區間的成員數量
SpringBoot序列化
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
//序列化配置
Jackson2JsonRedisSerializer<Object> jack = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
jack.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用string型別的序列化
template.setKeySerializer(stringRedisSerializer);
//hash的key也采用序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//value序列化方式采用jackson
template.setValueSerializer(jack);
hash的value序列化方式采用jackson
template.setHashValueSerializer(jack);
template.afterPropertiesSet();
return template;
}
RedisUtil
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
/**
14
* Redis工具類
15
* @author YUX
16
* @date 2018年6月7日
17
*/
@Component
public final class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
// =============================common============================
/**
* 26
* 指定快取失效時間
* 27
*
* @param key 鍵
* 28
* @param time 時間(秒)
* 29
* @return 30
*/
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;
}
}
/**
* 44
* 根據key 獲取過期時間
* 45
*
* @param key 鍵 不能為null
* 46
* @return 時間(秒) 回傳0代表為永久有效
* 47
*/
public long getExpire(String key) {
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* 53
* 判斷key是否存在
* 54
*
* @param key 鍵
* 55
* @return true 存在 false不存在
* 56
*/
public boolean hasKey(String key) {
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 67
* 洗掉快取
* 68
*
* @param key 可以傳一個值 或多個
* 69
*/
@SuppressWarnings("unchecked")
public void del(String... key) {
if (key != null && key.length > 0) {
if (key.length == 1) {
redisTemplate.delete(key[0]);
} else {
redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key));
}
}
}
// ============================String=============================
/**
* 83
* 普通快取獲取
* 84
*
* @param key 鍵
* 85
* @return 值
* 86
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 92
* 普通快取放入
* 93
*
* @param key 鍵
* 94
* @param value 值
* 95
* @return true成功 false失敗
* 96
*/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 109
* 普通快取放入并設定時間
* 110
*
* @param key 鍵
* 111
* @param value 值
* 112
* @param time 時間(秒) time要大于0 如果time小于等于0 將設定無限期
* 113
* @return true成功 false 失敗
* 114
*/
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;
}
}
/**
* 130
* 遞增
* 131
*
* @param key 鍵
* 132
* @param delta 要增加幾(大于0)
* 133
* @return 134
*/
public long incr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("遞增因子必須大于0");
}
return redisTemplate.opsForValue().increment(key, delta);
}
/**
* 143
* 遞減
* 144
*
* @param key 鍵
* 145
* @param delta 要減少幾(小于0)
* 146
* @return 147
*/
public long decr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("遞減因子必須大于0");
}
return redisTemplate.opsForValue().increment(key, -delta);
}
// ================================Map=================================
/**
* 157
* HashGet
* 158
*
* @param key 鍵 不能為null
* 159
* @param item 項 不能為null
* 160
* @return 值
* 161
*/
public Object hget(String key, String item) {
return redisTemplate.opsForHash().get(key, item);
}
/**
* 167
* 獲取hashKey對應的所有鍵值
* 168
*
* @param key 鍵
* 169
* @return 對應的多個鍵值
* 170
*/
public Map<Object, Object> hmget(String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* 176
* HashSet
* 177
*
* @param key 鍵
* 178
* @param map 對應多個鍵值
* 179
* @return true 成功 false 失敗
* 180
*/
public boolean hmset(String key, Map<String, Object> map) {
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 192
* HashSet 并設定時間
* 193
*
* @param key 鍵
* 194
* @param map 對應多個鍵值
* 195
* @param time 時間(秒)
* 196
* @return true成功 false失敗
* 197
*/
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;
}
}
/**
* 212
* 向一張hash表中放入資料,如果不存在將創建
* 213
*
* @param key 鍵
* 214
* @param item 項
* 215
* @param value 值
* 216
* @return true 成功 false失敗
* 217
*/
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;
}
}
/**
* 229
* 向一張hash表中放入資料,如果不存在將創建
* 230
*
* @param key 鍵
* 231
* @param item 項
* 232
* @param value 值
* 233
* @param time 時間(秒) 注意:如果已存在的hash表有時間,這里將會替換原有的時間
* 234
* @return true 成功 false失敗
* 235
*/
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;
}
}
/**
* 250
* 洗掉hash表中的值
* 251
*
* @param key 鍵 不能為null
* 252
* @param item 項 可以使多個 不能為null
* 253
*/
public void hdel(String key, Object... item) {
redisTemplate.opsForHash().delete(key, item);
}
/**
* 259
* 判斷hash表中是否有該項的值
* 260
*
* @param key 鍵 不能為null
* 261
* @param item 項 不能為null
* 262
* @return true 存在 false不存在
* 263
*/
public boolean hHasKey(String key, String item) {
return redisTemplate.opsForHash().hasKey(key, item);
}
/**
* 269
* hash遞增 如果不存在,就會創建一個 并把新增后的值回傳
* 270
*
* @param key 鍵
* 271
* @param item 項
* 272
* @param by 要增加幾(大于0)
* 273
* @return 274
*/
public double hincr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, by);
}
/**
* 280
* hash遞減
* 281
*
* @param key 鍵
* 282
* @param item 項
* 283
* @param by 要減少記(小于0)
* 284
* @return 285
*/
public double hdecr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, -by);
}
// ============================set=============================
/**
* 292
* 根據key獲取Set中的所有值
* 293
*
* @param key 鍵
* 294
* @return 295
*/
public Set<Object> sGet(String key) {
try {
return redisTemplate.opsForSet().members(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 306
* 根據value從一個set中查詢,是否存在
* 307
*
* @param key 鍵
* 308
* @param value 值
* 309
* @return true 存在 false不存在
* 310
*/
public boolean sHasKey(String key, Object value) {
try {
return redisTemplate.opsForSet().isMember(key, value);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 321
* 將資料放入set快取
* 322
*
* @param key 鍵
* 323
* @param values 值 可以是多個
* 324
* @return 成功個數
* 325
*/
public long sSet(String key, Object... values) {
try {
return redisTemplate.opsForSet().add(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 336
* 將set資料放入快取
* 337
*
* @param key 鍵
* 338
* @param time 時間(秒)
* 339
* @param values 值 可以是多個
* 340
* @return 成功個數
* 341
*/
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;
}
}
/**
* 355
* 獲取set快取的長度
* 356
*
* @param key 鍵
* 357
* @return 358
*/
public long sGetSetSize(String key) {
try {
return redisTemplate.opsForSet().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 369
* 移除值為value的
* 370
*
* @param key 鍵
* 371
* @param values 值 可以是多個
* 372
* @return 移除的個數
* 373
*/
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=================================
/**
* 386
* 獲取list快取的內容
* 387
*
* @param key 鍵
* 388
* @param start 開始
* 389
* @param end 結束 0 到 -1代表所有值
* 390
* @return 391
*/
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;
}
}
/**
* 402
* 獲取list快取的長度
* 403
*
* @param key 鍵
* 404
* @return 405
*/
public long lGetListSize(String key) {
try {
return redisTemplate.opsForList().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 416
* 通過索引 獲取list中的值
* 417
*
* @param key 鍵
* 418
* @param index 索引 index>=0時, 0 表頭,1 第二個元素,依次類推;index<0時,-1,表尾,-2倒數第二個元素,依次類推
* 419
* @return 420
*/
public Object lGetIndex(String key, long index) {
try {
return redisTemplate.opsForList().index(key, index);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 431
* 將list放入快取
* 432
*
* @param key 鍵
* 433
* @param value 值
* 434
// * @param time 時間(秒)
* 435
* @return 436
*/
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;
}
}
/**
* 467
* 將list放入快取
* 468
*
* @param key 鍵
* 469
* @param value 值
* 470
// * @param time 時間(秒)
* 471
* @return 472
*/
public boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 484
* 將list放入快取
* 485
* <p>
* 486
*
* @param key 鍵
* 487
* @param value 值
* 488
* @param time 時間(秒)
* 489
* @return 490
*/
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;
}
}
/**
* 504
* 根據索引修改list中的某條資料
* 505
*
* @param key 鍵
* 506
* @param index 索引
* 507
* @param value 值
* 508
* @return 509
*/
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;
}
}
/**
* 521
* 移除N個值為value
* 522
*
* @param key 鍵
* 523
* @param count 移除多少個
* 524
* @param value 值
* 525
* @return 移除的個數
* 526
*/
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;
}
}
}
推薦閱讀
2.5萬字詳細講解個人網站的開發程序和專案的部署
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/292484.html
標籤:java
上一篇:LeetCode 128. 最長連續序列【c++/java詳細題解】
下一篇:Spring三級快取
