RedisTemplate常用函数解析和使用

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);
    }
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值