RedisTemplate 提供的API 是比较丰富的, 所以要想完全熟练掌握所有API 的特性,并不太容易, 而且也没有太大必要。 RedisTemplate 提供的API 大都和redis-cli 命令行支持的命令类似,而且SDR 源码中注释比较清楚,所以我们无须记忆所有API 的特点, 只需掌握如何使用方式即可, 当需要用某种类型时, 翻阅一下源码的API 说明即可.
1. 常用API
根据API 使用的范围 可将RedisTemplate 提供的API 大致可以分为三种:
- delete/expire…: 对任意类型的key的通用操作, 如删除key,设置过期时间等
- opsForxxx(): 针对特定类型API, 返回针对Redis特定类型的操作对象,返回的操作对象只能对这一种类型的任意key进行操作
- boundXXXOperations: 针对特定Key API, 返回针对Redis特定类型的某个key的操作对象,返回对象只能对这一个key进行操作
1.1 opsFor API
RedisTemplate 提供了一组opsForxxx的API,会返回相应的数据类型对应的操作方法。Redis有五种基本数据类型,因此对应于五种不同的API。
| 方法签名 || 描述 |
| :— | :— |
| public ValueOperations<K, V> opsForValue() | 返回String类型的操作对象 |
| public ListOperations<K, V> opsForList() | 返回List类型的操作对象 |
| public SetOperations<K, V> opsForSet() | 返回Set类型的操作对象 |
| public <HK, HV> HashOperations<K, HK, HV> opsForHash() | 返回Set类型的操作对象 |
| public ZSetOperations<K, V> opsForZSet() | 返回ZSet类型的操作对象 |
| public ClusterOperations<K, V> opsForCluster() | 返回集群的相关操作对象 |
| public GeoOperations<K, V> opsForGeo() | 返回对Geo 类型的操作对象 |
1.2 boundXXOptions API
对redis的每个操作都离不开key,因此RedisTemplate提供了绑定key的API,这样获取到绑定key的操作之后,使用api就无须再指明key了。
方法签名 | 描述 |
---|---|
public BoundValueOperations<K, V> boundValueOps(K key) | 返回绑定固定key的, String类型的操作对象 |
public BoundListOperations<K, V> boundListOps(K key) | 返回绑定固定key的,list 类型的操作对象 |
public BoundSetOperations<K, V> boundSetOps(K key) | 返回绑定固定key的, Set类型的操作对象 |
public <HK, HV> BoundHashOperations<K, HK, HV> boundHashOps(K key) | 返回绑定固定ke的, hash类型的操作对象 |
public BoundZSetOperations<K, V> boundZSetOps(K key) | 返回固定key的, ZSet类型的操作 |
public BoundGeoOperations<K, V> boundGeoOps(K key) | 返回绑定固定key的, geo 类型的操作 |
1.3 其它API
RedisTemplate 还有很多其他的API,如expire, delete 等,这些都比较简单,笔者这里只简单列举几个.
方法签名 | 方法描述 |
---|---|
public Boolean delete(K key) | 删除一个任意类型的key |
public Long delete(Collection keys) | 删除多个任意类型的key |
public Boolean expire(K key, long timeout, TimeUnit unit) | 设置key 过期时间 |
public Boolean expireAt(K key, Date date) | 设置key 在某个具体时间点过期 |
public Boolean hasKey(K key) | 判断key 是否存在 |
public void rename(K oldKey, K newKey) | 重命名key |
public DataType type(K key) | 获取key的类型 |
public K randomKey() | 随机返回一个key |
… | … |
2. API 测试
RedisTemplate 常用API 使用方式比较简单,源码中文档写的也很清楚, 笔者这里只简单介绍一下使用方式, 具体API 特性还需在使用时自己确定.
2.1 通用key API
@Test
public void test_commons(){
// 判断redis中是否有相应的key
Boolean hasHost = redisTemplate.hasKey("host");
// 删除key
Boolean del = redisTemplate.delete("host");
}
2.2 特定类型API-opsFor
@Test
public void test_ops(){
ValueOperations stringOps = redisTemplate.opsForValue();
stringOps.set("string", "127.0.0.1");
ListOperations listOps = redisTemplate.opsForList();
listOps.leftPush("list", "127.0.0.1");
HashOperations hashOps = redisTemplate.opsForHash();
hashOps.put("hash","hosts", "127.0.0.1");
}
2.2 特定keyAPI-boundXXOprations
@Test
public void test_bound(){
BoundSetOperations booksOps = redisTemplate.boundSetOps("books");
booksOps.add("java", "linux");
BoundHashOperations dictOps = redisTemplate.boundHashOps("dict");
dictOps.put("A",65);
dictOps.put("B",66);
dictOps.put("C",67);
}