美文网首页
redis数据类型应用场景与示例

redis数据类型应用场景与示例

作者: lois想当大佬 | 来源:发表于2020-04-27 11:28 被阅读0次

一、基础概念
1、定义
redis是一个基于内存的高性能 Key-Value 数据库。

2、特点
a、速度快:因为数据存在内存中,类似于 HashMap ,HashMap 的优势就是查找和操作的时间复杂度都是O (1) 。
b、支持丰富数据类型:支持 String ,List,Hash,Set,Sorted Set五种基础的数据结构。用他的 List 来做 FIFO 双向链表,实现一个轻量级的高性能消息队列服务。
c、单线程模型效率高:c语言实现、纯内存操作、非阻塞io多路复用、单线程避免线程上下文切换、丰富数据结构都使hash结构读取速度快。
d、6种Key 过期策略
e、支持订阅发布 Pub / Sub 功能
f、支持持久化
g、支持高可用

3、存储方式
【全量】RDB 持久化,是指在指定的时间间隔内将内存中的数据集快照写入磁盘。实际操作过程是,fork 一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
【增量】AOF持久化,以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

4、问题思考:
a、如何保证热点数据不被淘汰?
方案:volatile-lfu ,根据最近最少使用淘汰数据,更加符合“热”的概念,频率越高,代表越热。
b、雪崩现象处理。
含义:雪崩是指redis缓存集中过期。
方案:一般需要在过期时间上加一个随机值,使得过期时间分散一些。

5、数据类型应用场景
以下数据demo使用springboot封装的的StringRedisTemplate模板。
maven依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

注入模板类:

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

a、字符串 String:作为常规的key-value缓存应用。例如点赞数、粉丝数、login用户信息。

        // 点赞数520,5s后过期,kv只能是string类型
        stringRedisTemplate.opsForValue().set("likes", "520", 5, TimeUnit.SECONDS);
        String str = stringRedisTemplate.opsForValue().get("likes");
        System.out.println("string likes = " + str);
        Assert.assertEquals("520", stringRedisTemplate.opsForValue().get("likes"));

b、字典Hash:存储对象(因为对象可能会包含很多属性)


image.png
        // hash H、V、hk、hv, 只能是string
        stringRedisTemplate.opsForHash().put("user", "age", "18");
        stringRedisTemplate.opsForHash().put("user", "name", "lois");
        stringRedisTemplate.expire("user", 5, TimeUnit.SECONDS);
        Map<Object,Object> user = stringRedisTemplate.opsForHash().entries("user");
        System.out.println("hash user = " + user);

c、列表List:粉丝列表、消息列表、热点文章列表

        // list kv只能是string
        stringRedisTemplate.opsForList().leftPush("fans", "王小明");
        stringRedisTemplate.opsForList().leftPush("fans", "王小飞");
        stringRedisTemplate.opsForList().leftPush("fans", "王小龙");
        stringRedisTemplate.expire("fans",5,TimeUnit.SECONDS);
        System.out.println("list fans = " + stringRedisTemplate.opsForList().range("fans", 0, -1));

d、集合Set: 求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好等功能。

        // set kv只能是string
        stringRedisTemplate.opsForSet().add("follow1","1", "2", "3","4");
        stringRedisTemplate.expire("follow1", 5, TimeUnit.SECONDS);
        stringRedisTemplate.opsForSet().add("follow2","5", "6", "3","4");
        stringRedisTemplate.expire("follow2", 5, TimeUnit.SECONDS);

        Set intersects = stringRedisTemplate.opsForSet().intersect("follow1","follow2");
        System.out.println("set intersects = " + intersects);

结果:

set intersects = [3, 4]

e、有序集合 SortedSet
排行榜:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,跳跃表按score从小到大保存所有集合元素。使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。

    // zset kv只能是string
        stringRedisTemplate.opsForZSet().add("ranking", "王小明", 3);
        stringRedisTemplate.opsForZSet().add("ranking", "王小飞", 1);
        stringRedisTemplate.opsForZSet().add("ranking", "王小龙", 5);
        stringRedisTemplate.opsForZSet().add("ranking", "王小红", 9);
        stringRedisTemplate.opsForZSet().add("ranking", "王小绿", 7);
        stringRedisTemplate.expire("ranking",5,TimeUnit.SECONDS);
        System.out.println("升序 zset ranking = " + stringRedisTemplate.opsForZSet().range("ranking",0, -1));
        System.out.println("降序 zset ranking = " + stringRedisTemplate.opsForZSet().reverseRange("ranking",0, -1));

结果:

升序 zset ranking = [王小飞, 王小明, 王小龙, 王小绿, 王小红]
降序 zset ranking = [王小红, 王小绿, 王小龙, 王小明, 王小飞]

相关文章

  • redis数据类型应用场景与示例

    一、基础概念1、定义redis是一个基于内存的高性能 Key-Value 数据库。 2、特点a、速度快:因为数据存...

  • Redis缓存总结

    Redis 原理及应用(1)--数据类型及底层实现方式redis学习(八)——redis应用场景 --不错哦 Re...

  • 18 redis 总结

    1,redis 应用场景: 2, 选择配置文件执行server redis 数据类型以及基本操作:Redis一共...

  • redis 详解系列之一(基础知识)

    本文内容 redis概述 redis应用场景 单线程架构简介 全局命令讲解 五种数据类型讲解 redis概述 re...

  • Redis打怪升级,技术干货(壹)

    本文准备从以下几个方面去讲解redis打怪进阶:1)Redis的安装。2)Redis的数据类型及应用场景。 Red...

  • Redis实战

    redis 和 memcached 的区别 1. redis支持更丰富的数据类型(支持更复杂的应用场景):Redi...

  • redis数据类型和应用场景

    redis数据类型和应用场景 redis简介 Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用AN...

  • Redis Learning

    应用场景:redis 适用于小而热的数据 Redis应用场景 Redis作者谈Redis应用场景我们在应用redi...

  • Redis 数据类型与应用场景

    数据类型应用场景说明String各种计数器,比如评论计数器。包含 decr,incr 命令,执行递减与递增操作。L...

  • PHP面试2

    自我介绍api接口安全redis的应用场景mysql优化redis的数据类型mysql存储引擎使用过哪些webse...

网友评论

      本文标题:redis数据类型应用场景与示例

      本文链接:https://www.haomeiwen.com/subject/zroewhtx.html