Redis数据类型与相关使用场景

前言

Redis数据类型一共8种,其中广为人知的有5种:

string、list、set、zset和hash

另外,还有3种特殊的数据类型:

Geospacial、hyperloglog和bitmap

1.string

string类型可以用作计数器,比如博客访问量,因为redis在计算时是单线程的,所以线程是绝对安全的:

    /**
     * 自增时只能是整数和整数相加,或者浮点数和浮点数相加,不能整数和浮点数混淆
     */
    public void comput() {
        stringRedisTemplate.opsForValue().set("number", "5.2");
        stringRedisTemplate.opsForValue().increment("number", 1.0);
        stringRedisTemplate.opsForValue().increment("number", 1.0);
        System.out.println(stringRedisTemplate.opsForValue().get("number"));
    }

  

2.list

list具有有序的特点,可以用于实现简单的消息队列:

  /**
     * 实现简单的消息队列功能,记得初始化时要清空
     */
    public void list() {
        stringRedisTemplate.opsForList().getOperations().delete("arr");
        stringRedisTemplate.opsForList().leftPush("arr", "1");
        stringRedisTemplate.opsForList().leftPush("arr", "2");
        stringRedisTemplate.opsForList().leftPush("arr", "3");
        stringRedisTemplate.opsForList().leftPush("arr", "4");
        stringRedisTemplate.opsForList().rightPop("arr");
        System.out.println(stringRedisTemplate.opsForList().rightPop("arr"));
        System.out.println(stringRedisTemplate.opsForList().rightPop("arr"));
        System.out.println(stringRedisTemplate.opsForList().rightPop("arr"));
    }

  

3.set

set可以进行交集、并集、补集和差集等操作,可以用于找 公共好友:

     //首先数据清空       
stringRedisTemplate.opsForSet().getOperations().delete("小明"); stringRedisTemplate.opsForSet().getOperations().delete("小海"); stringRedisTemplate.opsForSet().add("小明", "1"); stringRedisTemplate.opsForSet().add("小明", "2"); stringRedisTemplate.opsForSet().add("小明", "5"); stringRedisTemplate.opsForSet().add("小海", "1"); stringRedisTemplate.opsForSet().add("小海", "2"); stringRedisTemplate.opsForSet().add("小海", "3"); //并集,所有好友 Set<String> allFriends = stringRedisTemplate.opsForSet().union("小明", "小海"); //交集,共同好友 Set<String> sameFriends = stringRedisTemplate.opsForSet().intersect("小明", "小海"); //差集,独有好友 Set<String> privateFriends = stringRedisTemplate.opsForSet().difference("小明", "小海");

  

4.zset

zset又叫sortedset,具有有序的特点,可以用于排行榜:

    /**
     * 实现排行榜功能
     */
    public void sort() {
        stringRedisTemplate.opsForZSet().getOperations().delete("排行榜");
        stringRedisTemplate.opsForZSet().incrementScore("排行榜", "张三", 10);
        stringRedisTemplate.opsForZSet().incrementScore("排行榜", "李四", 8);
        stringRedisTemplate.opsForZSet().incrementScore("排行榜", "王五", 11);
        stringRedisTemplate.opsForZSet().incrementScore("排行榜", "张三", 10);
        //榜单前三名
        Set<ZSetOperations.TypedTuple<String>> sort = stringRedisTemplate.opsForZSet().reverseRangeWithScores("排行榜", 0, 2);
    }

  

5.hash

redission分布式锁有对redis hash的运用,实现了锁的可重入;

posted @ 2023-01-15 22:50  HexThinking  阅读(53)  评论(1编辑  收藏  举报