RedisTemplate常用函数解析和使用
1.String
操作函数
void set(K var1, V var2);
void set(K var1, V var2, long var3, TimeUnit var5);
// 是否存在值或者key
@Nullable
Boolean setIfAbsent(K var1, V var2);
// 同时设置多个键值
void multiSet(Map<? extends K, ? extends V> var1);
//t同时判断多个键值
@Nullable
Boolean multiSetIfAbsent(Map<? extends K, ? extends V> var1);
@Nullable
V get(Object var1);
// 设置键值并返回原来的键值
@Nullable
V getAndSet(K var1, V var2);
@Nullable
List<V> multiGet(Collection<K> var1);
@Nullable
Long increment(K var1, long var2);
@Nullable
Double increment(K var1, double var2);
@Nullable
Integer append(K var1, String var2);
@Nullable
String get(K var1, long var2, long var4);
// 设置键值加偏移量(原来的键值)
void set(K var1, V var2, long var3);
@Nullable
Long size(K var1);
@Nullable
Boolean setBit(K var1, long var2, boolean var4);
@Nullable
Boolean getBit(K var1, long var2);
RedisOperations<K, V> getOperations();
测试代码
@Resource
private RedisTemplate<String,Object> redisTemplate;
@Test
public void string(){
//set(name,value,time,timeUnit,offset(偏移量))
User user = new User("你好",20);
redisTemplate.opsForValue().set(user.getUsername(),user);
System.out.println(redisTemplate.opsForValue().get(user.getUsername()));
redisTemplate.opsForValue().set(user.getUsername(),user,4,TimeUnit.HOURS);
System.out.println(redisTemplate.opsForValue().get(user.getUsername()));
String name = "increment";
Long i = 10L;
redisTemplate.opsForValue().set(name,i);
redisTemplate.opsForValue().increment(name,i);
}
2.List
常用函数
//返回存储在键中的列表的指定元素。偏移开始和停止是基于零的索引,其中0是列表的第一个元素(列表的头部),1是下一个元素,-1最后一个。
@Nullable
List<V> range(K key, long start, long end);
//修剪现有列表,使其只包含指定的指定范围的元素,起始和停止都是基于0的索引
void trim(K key, long start, long end);
@Nullable
Long size(K key);
//返回的结果为推送操作后的列表的长度
@Nullable
Long leftPush(K key, V start);
@Nullable
Long leftPushAll(K key, V... start);
@Nullable
Long leftPushAll(K key, Collection<V> start);
//只有存在key对应的列表才能将这个value值插入到key所对应的列表中
@Nullable
Long leftPushIfPresent(K key, V start);
//把value值放到key对应列表中pivot值的左面,如果pivot值存在的话
@Nullable
Long leftPush(K key, V pivot, V value);
@Nullable
Long rightPush(K key, V start);
@Nullable
Long rightPushAll(K key, V... start);
@Nullable
Long rightPushAll(K key, Collection<V> start);
@Nullable
Long rightPushIfPresent(K key, V start);
//把value值放到key对应列表中pivot值的右面,如果pivot值存在的话
@Nullable
Long rightPush(K key, V pivot, V value);
void set(K key, long start, V value);
@Nullable
Long remove(K key, long start, Object object);
// 根据下标获取列表中的值
@Nullable
V index(K key, long start);
//弹出左边值。
@Nullable
V leftPop(K key);
@Nullable
V leftPop(K key, long start, TimeUnit end);
@Nullable
V rightPop(K key);
@Nullable
V rightPop(K key, long start, TimeUnit end);
// 用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回
@Nullable
V rightPopAndLeftPush(K key, K start);
@Nullable
V rightPopAndLeftPush(K key, K start, long var3, TimeUnit var5);
RedisOperations<K, V> getOperations();
测试代码
@Test
public void list(){
String name = "my:listRight";
ArrayList<User> list = new ArrayList<>();
User user1 = new User("你好",20);
User user2 = new User("谢谢",23);
list.add(user1);
list.add(user2);
redisTemplate.opsForList().rightPushAll(name,user1);
redisTemplate.opsForList().rightPushAll(name,user2);
redisTemplate.opsForList().leftPop(name);
System.out.println(redisTemplate.opsForList().range(name, 0, -1));
}
3.Hash
常用函数
// 删除给定的哈希hashKeys(成功为1)
Long delete(H key, Object... hashKey);
// 删除给定的哈希hashKeys (Object为map的name)
Boolean hasKey(H key, Object hashKey);
// 从键中的哈希获取给定hashKey的值
@Nullable
HV get(H key, Object hashKey);
// 从哈希中获取给定hashKey的值
List<HV> multiGet(H key, Collection<HK> hashKey);
通过给定的delta增加散列hashKey的值(整型)
Long increment(H key, HK hashKey, long delta);
// 通过给定的delta增加散列hashKey的值(浮点数)
Double increment(H key, HK hashKey, double delta);
// 获取key所对应的散列表的key
Set<HK> keys(H key);
// 获取key所对应的散列表的大小个数
Long size(H key);
// 使用m中提供的多个散列字段设置到key对应的散列表中
void putAll(H key, Map<? extends HK, ? extends HV> hashKey);
// 设置散列hashKey的值
void put(H key, HK hashKey, HV value);
// 仅当hashKey不存在时才设置散列hashKey的值。
Boolean putIfAbsent(H key, HK hashKey, HV value);
// 获取整个哈希存储的值根据密钥
List<HV> hashKeys(H key);
// 获取整个哈希存储根据密钥
Map<HK, HV> entries(H key);
// 使用Cursor在key的hash中迭代,相当于迭代器。
Cursor<Entry<HK, HV>> scan(H key, ScanOptions hashKey);
RedisOperations<H, ?> getOperations();
void set(K key, V hashKey);
void set(K key, V hashKey, long timeout, TimeUnit unit);
// 设置键值加偏移量(原来的键值)
void set(K key, V hashKey, long offset);
// 是否存在值或者key
@Nullable
Boolean setIfAbsent(K key, V hashKey);
// 同时设置多个键值
void multiSet(Map<? extends K, ? extends V> m);
//t同时判断多个键值
@Nullable
Boolean multiSetIfAbsent(Map<? extends K, ? extends V> m);
测试方法
@Test
public void hash(){
String name = "my:hash";
Map<String,Object> testMap = new HashMap();
testMap.put("name","jack");
testMap.put("age",27);
testMap.put("class","1");
redisTemplate.opsForHash().putAll(name,testMap);
//删除某个键值
System.out.println(redisTemplate.opsForHash().delete(name, "name"));
//得到某个键值
System.out.println(redisTemplate.opsForHash().get(name, "age"));
//得到整个键值
System.out.println(redisTemplate.opsForHash().entries(name));
// 得到键值的key
System.out.println(redisTemplate.opsForHash().keys(name));
}
4.Set
常用函数
// 无序集合中添加元素,返回添加个数
@Nullable
Long add(K key, V... value);
// 移除集合中一个或多个成员
@Nullable
Long remove(K key, Object... value);
// 移除并返回集合中的一个随机元素
@Nullable
V pop(K key);
@Nullable
List<V> pop(K key, long value);
// 将 value 元素从 source 集合移动到 destination 集合
@Nullable
Boolean move(K source, V value, K destination);
@Nullable
Long size(K key);
// 判断 value 元素是否是集合 key 的成员
@Nullable
Boolean isMember(K key, Object value);
// 返回集合中的所有成员
@Nullable
Set<V> members(K key);
// key对应的无序集合与otherKey对应的无序集合求交集
@Nullable
Set<V> intersect(K key, K otherKey);
// key对应的无序集合与多个otherKey对应的无序集合求交集
@Nullable
Set<V> intersect(K key, Collection<K> otherKey);
// key对应的无序集合与多个otherKey对应的无序集合求交集存储到destKey无序集合中
@Nullable
Long intersectAndStore(K key, K otherKey, K destKey);
@Nullable
Long intersectAndStore(K key, Collection<K> otherKey, K destKey);
// key无序集合与otherKey无序集合的并集
@Nullable
Set<V> union(K key, K otherKey);
@Nullable
Set<V> union(K key, Collection<K> otherKey);
@Nullable
Long unionAndStore(K key, K otherKey, K destKey);
@Nullable
Long unionAndStore(K key, Collection<K> otherKey, K destKey);
// key无序集合与otherKey无序集合的差集
@Nullable
Set<V> difference(K key, K otherKey);
@Nullable
Set<V> difference(K key, Collection<K> otherKey);
@Nullable
Long differenceAndStore(K key, K otherKey, K destKey);
@Nullable
Long differenceAndStore(K key, Collection<K> otherKey, K destKey);
// 随机获取key无序集合中的一个元素
V randomMember(K key);
// 获取多个key无序集合中的元素(去重),count表示个数
@Nullable
Set<V> distinctRandomMembers(K key, long count);
// 获取多个key无序集合中的元素,count表示个数
@Nullable
List<V> randomMembers(K key, long count);
Cursor<V> scan(K key, ScanOptions value);
测试
@Test
public void set(){
String name = "my:set";
String[] starArrays = new String[]{"star1","star2","star3"};
//放入会去重
redisTemplate.opsForSet().add(name,starArrays);
//是否包含member
System.out.println(redisTemplate.opsForSet().isMember(name, "star2"));
//包含的所有member
System.out.println(redisTemplate.opsForSet().members(name));
//随机获取value
System.out.println(redisTemplate.opsForSet().randomMembers(name, 2));
}
5.ZSet
- Redis 有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员。
- 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
- 有序集合的成员是唯一的,但分数(score)却可以重复。
常用函数
// 新增一个有序集合,存在的话为false,不存在的话为true
@Nullable
Boolean add(K key, V value, double score);
@Nullable
Long add(K key, Set<ZSetOperations.TypedTuple<V>> value);
// 从有序集合中移除一个或者多个元素
@Nullable
Long remove(K key, Object... value);
// 增加元素的score值,并返回增加后的值
@Nullable
Double incrementScore(K key, V value, double score);
// 返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列
@Nullable
Long rank(K key, Object value);
@Nullable
Long reverseRank(K key, Object value);
// 通过索引区间返回有序集合成指定区间内的成员,
@Nullable
Set<V> range(K key, long start, long end);
@Nullable
Set<ZSetOperations.TypedTuple<V>> rangeWithScores(K key, long start, long end);
@Nullable
Set<V> rangeByScore(K key, double min, double max);
@Nullable
Set<ZSetOperations.TypedTuple<V>> rangeByScoreWithScores(K key, double min, double max);
@Nullable
Set<V> rangeByScore(K key, double min, double max, long start, long end);
@Nullable
Set<ZSetOperations.TypedTuple<V>> rangeByScoreWithScores(K key, double min, double max, long start, long end);
@Nullable
Set<V> reverseRange(K key, long start, long end);
@Nullable
Set<ZSetOperations.TypedTuple<V>> reverseRangeWithScores(K key, long start, long end);
@Nullable
Set<V> reverseRangeByScore(K key, double min, double max);
@Nullable
Set<ZSetOperations.TypedTuple<V>> reverseRangeByScoreWithScores(K key, double min, double max);
@Nullable
Set<V> reverseRangeByScore(K key, double min, double max, long start, long end);
@Nullable
Set<ZSetOperations.TypedTuple<V>> reverseRangeByScoreWithScores(K key, double min, double max, long start, long end);
@Nullable
Long count(K key, double min, double max);
@Nullable
Long size(K key);
@Nullable
Long zCard(K key);
@Nullable
Double score(K key, Object value);
@Nullable
Long removeRange(K key, long min, long max);
@Nullable
Long removeRangeByScore(K key, double min, double max);
@Nullable
Long unionAndStore(K key, K value, K score);
@Nullable
Long unionAndStore(K key, Collection<K> value, K score);
@Nullable
Long intersectAndStore(K key, K value, K score);
@Nullable
Long intersectAndStore(K key, Collection<K> value, K score);
Cursor<ZSetOperations.TypedTuple<V>> scan(K key, ScanOptions value);
@Nullable
Set<V> rangeByLex(K key, Range value);
@Nullable
Set<V> rangeByLex(K key, Range value, Limit score);
测试
@Test
public void zSet(){
String name = "my:zset";
String[] arrays = new String[]{};
ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple("name1",1.0);
ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple("name1",2.0);
ZSetOperations.TypedTuple<Object> objectTypedTuple3 = new DefaultTypedTuple("name2",2.0);
Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<>();
tuples.add(objectTypedTuple1);
tuples.add(objectTypedTuple2);
tuples.add(objectTypedTuple3);
redisTemplate.opsForZSet().add(name,tuples);
}