redis的使用及应用场景

文章目录

    • 1.redis的特征
    • 2.redis的5种常见的数据结构
    • 3.redis的使用场景
    • 4.根据key查询redis值的真实存储结构

1.redis的特征

内存级别高速缓存。

k -v 键值对存储。

单线程 串行化(worker)。

io模型 epoll。

二进制安全的存储,字节的存储(客户端需要确定统一编码)。

value有类型,每个类型具有本地方法。

底层是使用C写的,实际数据的存储结构都可以从C文件看到。

2.redis的5种常见的数据结构

这几种数据的存储结构,数据库底层对于value的存储是基于数据结构的,可以参考redis源码进行了解(涉及到C语言)
5种常用value类型应用场景。

String 、list、hash、set、sorted set zset

redis的使用及应用场景_第1张图片

3.redis的使用场景

redis

value有类型,每个类型具有本地方法

当redis中的value是数组list时,我们可以通过本地方法获取redis中数组中下标为x的值。

String:存储字符串、数值、bitmap

字符串场景:session共享、uuid、VFS in mem ( 内存虚拟文件存储系统 小文件)

数值场景:限流器、点击率,浏览量统计。

bitmap场景:二进制操作。

二进制操作涉及到: AND(与)、 OR(或)、 NOT(非)、 XOR(异或)

按位与运算符(&)
参加运算的两个数据,按二进制位进行“与”运算。
运算规则:0&0=0;  0&1=0;   1&0=0;    1&1=1;
    即:两位同时为“1”,结果才为“1”,否则为0
      
按位或运算符(|)
参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0|0=0;  0|1=1;  1|0=1;   1|1=1;
    即 :参加运算的两个对象只要有一个为1,其值为1。
    
非运算(~)
参加运算的一个数据,按二进制位进行取反
运算规则:1取0,0取1 ~1 = 0, ~0 = 1 ~(10001) = 01110

异或运算符(^)
参加运算的两个数据,按二进制位进行“异或”运算。
运算规则:0^0=0;  0^1=1;  1^0=1;   1^1=0;
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

用户统计:

  1. 任意时间窗 统计用户的登录。

    00000000000100 ,登录为1,未登录为0

    通过setbit设置是0-365天否登录,通过bitcount可以统计一个时间段内的登记次数(一天只记录一次)。
    redis的使用及应用场景_第2张图片

  2. 计算活跃用户,某年,某月,某天。

    日活量

    周活跃量bitop 做或运算 ,将周一至周天的活跃数据做或运算得到一个周活量的bit。

redis的使用及应用场景_第3张图片

  1. 类似12306 抢票,进行矩阵运算

    假设一辆高铁从武汉到北京,途经上海、广州。

    当一个人去买票时,说出自己的出发点,和目的地,然后再问有无座次时。这在抢票时是一个高频操作。如何用最快的方式计算出来,这个就需要用到二进制的一些算法,可以快速运算结果,比如or或运算就可以算出剩余坐票。

在这里插入图片描述
4. 权限 777 rwx 421 000 = 0 111=7

linux服务的权限 777 rwx 就是由12 个二进制位表示

list 数组

存入:有序

同向存取:栈

异向:队列

数组 :index

LTRIM: 保留热数据

场景:

评论 : 分页,利用栈后进先出的特性,最新的评论最在上面。

redis的使用及应用场景_第4张图片

hash

存储map类型的数据。

set

无序不重复的集合,可用于去重。

sorted set(zset)

可排序的集合,可用于排名、分页等。

4.根据key查询redis值的真实存储结构

前面讲了5种redis的值类型存储,实际底层的存储又基于数据结构实现了这五种类型的存储。

可以通过以下命令查看值存储的实际数据编码结构。

object encoding key

你可能感兴趣的:(消息中间件)