在上一篇文章,我们介绍了 Jedis 的使用。为了让 Spring 框架体系能够更加方便的接入 Redis 的功能,Spring 对 Jedis 进行了封装 ==> RedisTemplate。它支持所有的 redis 原生的 api。
需要引入的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在yml/properties文件中进行配置:
redis:
host: 43.105.136.120
port: 6379
在 RedisTemplate中提供了几个常用的接口方法的使用,分别是:
private ValueOperations<K, V> valueOps;
private HashOperations<K, V> hashOps;
private ListOperations<K, V> listOps;
private SetOperations<K, V> setOps;
private ZSetOperations<K, V> zSetOps;
RedisTemplate 中定义了对5种数据结构操作:
redisTemplate.opsForValue(); // 操作字符串
redisTemplate.opsForHash(); // 操作hash
redisTemplate.opsForList(); // 操作list
redisTemplate.opsForSet(); // 操作set
redisTemplate.opsForZSet(); // 操作有序set
注意,StringRedisTemplate 继承自 RedisTemplate,也一样拥有上面这些操作。 关于 StringRedisTemplate 可以参考这篇文章…
通用操作
- 判断是否有 key:redisTemplate.hasKey(key)
- 给 key 添加过期时间:
- redisTemplate.expire(key, timeout, unit)
- 当数据结构为 String 时,redisTemplate.opsForValue().set(key, value, timeout, unit)
- 模糊匹配:Set keys = redisTemplate.keys(key) // website:*
- 删除 key:redisTemplate.delete(key)
1.String 类型
Redis | RedisTemplate rt |
---|---|
set key value | rt.opsForValue().set(“key”,“value”) |
get key | rt.opsForValue().get(“key”) |
strlen key | rt.opsForValue().size(“key”) |
getset key value | rt.opsForValue().getAndSet(“key”,“value”) |
getrange key start end | rt.opsForValue().get(“key”,start,end) |
append key value | rt.opsForValue().append(“key”,“value”) |
PS:关于 redis 的基本命令可以参考这篇文章…
2.Hash 类型
Redis | RedisTemplate rt |
---|---|
hset key field value | rt.opsForHash().put(“key”,“field”,“value”) |
hmset key field1 value1 field2 value2… | rt.opsForHash().putAll(“key”,map) //map是一 个集合对象 |
hexists key field | rt.opsForHash().hasKey(“key”,“field”) |
hgetall key | rt.opsForHash().entries(“key”) //返回Map对象 |
hvals key | rt.opsForHash().values(“key”) //返回List对象 |
hkeys key | rt.opsForHash().keys(“key”) //返回List对象 |
hmget key field1 field2… | rt.opsForHash().multiGet(“key”,keyList) |
hsetnx key field value | rt.opsForHash().putIfAbsent(“key”,“field”,“value”) |
hdel key field1 field2 | rt.opsForHash().delete(“key”,“field1”,“field2”) |
hget key | field rt.opsForHash().get(“key”,“field”) |
3.List 类型
Redis | RedisTemplate rt |
---|---|
lpush list node1 node2 node3… | rt.opsForList().leftPush(“list”,“node”) rt.opsForList().leftPushAll(“list”,list) //list是集 合对象 |
rpush list node1 node2 node3… | rt.opsForList().rightPush(“list”,“node”) rt.opsForList().rightPushAll(“list”,list) //list是集 合对象 |
lindex key index | rt.opsForList().index(“list”, index) |
llen key | rt.opsForList().size(“key”) |
lpop key | rt.opsForList().leftPop(“key”) |
rpop key | rt.opsForList().rightPop(“key”) |
lpushx list node | rt.opsForList().leftPushIfPresent(“list”,“node”) |
rpushx list node | rt.opsForList().rightPushIfPresent(“list”,"node ") |
lrange list start end | rt.opsForList().range(“list”,start,end) |
lrem list count value | rt.opsForList().remove(“list”,count,“value”) |
lset key index value | rt.opsForList().set(“list”,index,“value”) |
4.Set 类型
Redis | RedisTemplate rt |
---|---|
sadd key member1 member2… | rt.boundSetOps(“key”).add(“member1”,“me mber2”,…) rt.opsForSet().add(“key”, set) //set是一个集合 对象 |
scard key | rt.opsForSet().size(“key”) |
sidff key1 key2 | rt.opsForSet().difference(“key1”,“key2”) //返回一个集合对象 |
sinter key1 key2 | rt.opsForSet().intersect(“key1”,“key2”)//同上 |
sunion key1 key2 | rt.opsForSet().union(“key1”,“key2”)//同上 |
sdiffstore des key1 key2 | rt.opsForSet().differenceAndStore(“key1”,“ke y2”,“des”) |
sinter des key1 key2 | rt.opsForSet().intersectAndStore(“key1”,"key2 ",“des”) |
sunionstore des key1 key2 | rt.opsForSet().unionAndStore(“key1”,“key2”," des") |
sismember key member | rt.opsForSet().isMember(“key”,“member”) |
smembers key | rt.opsForSet().members(“key”) |
spop key | rt.opsForSet().pop(“key”) |
srandmember key count | rt.opsForSet().randomMember(“key”,count) |
srem key member1 member2… | rt.opsForSet().remove(“key”,“member1”,“member2”) |
5.ZSet 类型
方法 | 含义 |
---|---|
Boolean add(K key, V value, double score) | 为有序集合添加元素. 如果 value 已经存在,则更新 score 表示权重,用于排序,值越小,排序越靠前(由小到大) key 不存在时,直接新增。成功插入时返回 true,失败时返回 false |
Long zCard(K key) | 获取集合的大小 |
Long size(K key) | 获取集合的大小,底层调用 zCard |
Long rank(K key, Object o) | 获取元素 o 在有序集合中的索引(即在集合中的排名,也可用来判断元素是否存在) |
Double incrementScore(K key, V value, double delta) | 手动设置集合中指定值的权重 |
Double score(K key, Object o) | 获取集合中指定元素的权重 |
Set range(K key, long start, long end) | 获取有序的集合中指定索引范围的值,索引从0开始,-1 表示倒数第一个元素 |
Set rangeByScore(K key, double min, double max) | 根据权重范围查询 |
Set rangeByScore(K key, double min, double max, long offset, long count) | offset 表示偏移量,count 表示需要获取的个数 |
Long count(K key, double min, double max) | 获取权重在 [min,max] 直接的元素个数 |
Long remove(K key, Object… values) | 删除集合中指定的元素(value) |
Long removeRange(K key, long start, long end) | 删除集合中指定索引范围内的元素 |
Long removeRangeByScore(K key, double min, double max) | 删除集合中指定权重范围内的元素 |
Long unionAndStore(K key, K otherKey, K destKey) | 取 Key 和 otherKey 的交集,结果放到 destKey |
Long unionAndStore(K key, Collection<K> otherKeys, K destKey) | 取 Key 和 otherKeys(多个key) 的交集,结果放到 destKey |