美文网首页
redis的重新认识以及阿里redis的介绍

redis的重新认识以及阿里redis的介绍

作者: PENG先森_晓宇 | 来源:发表于2019-09-29 10:28 被阅读0次

之前对redis的误区:以为redis是一个大的整体,所有的数据都存储到redis中,但是实际并不是这样。redis有database的概念(redis可理解为mysql)。

redis的database类似于mysql。mysql存数据需要首先新建数据库,然后在数据库中建表,然后数据存到表中。redis也一样,需要先选择数据库,然后在数据库中存放key。

只不过redis的数据库在redis服务开启时就建成功了,默认为16个database,redis下,数据库是由一个整数索引标识,database下表从0-15。

可以看到redis的配置文件中有database配置项,注释中写着默认database为0,也就是说我们客户端实例化redis时如果不指定database的话,默认的redis操作都是在database为0的数据库内操作。

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。

127.0.0.1:6379> set a 1  //默认下标为0的database
OK
127.0.0.1:6379> get a
"1"
127.0.0.1:6379> select 1 //切换到下标为1的database
OK
127.0.0.1:6379[1]> get a //每个database间数据是不共享的,类似于mysql的database
(nil)

flushdb是清楚当前库中的所有数据

127.0.0.1:6379[1]> flushdb //清空database为1的所有数据
OK
127.0.0.1:6379[1]> keys *
(empty list or set)

flushall是清空所有库的数据。如果发现还有数据,说明此数据在删除又自动生成的。

127.0.0.1:6379> flushall
OK



database中的key都是存放到槽中的,每个database里面有2^14个槽(单节点)。每个槽能存放多少需要根据redis的内存和key的大小来判断,比如redis为4G内存,则每个槽能存放的容量就是4G/16384。key的定位规则是根据CRC-16(key)%16384的值来判断属于哪个槽。

每个redis的database中的2的14次个槽是针对单节点redis来说的,如果是cluster集群的话,比如有2个master节点,2master节点都使用redis的database为0的数据库,此时2的14次个槽会被俩节点的database为0的数据库均匀分割。


redis set key:key1冒号的用法

我们正常使用redis存储是

Redis::set('company','zuoxin');

但是现在存储时候可以使用冒号:来存储

Redis::set('company:count',36);
Redis::set('company:employer','xiaoyu');
Redis::set('company:area',100);

:的作用就是相当于是分组,将key冒号前缀相同的key放到一个已前缀命名目录下,这样便于查找,在rdm中显示如下

image

阿里的集群版redis架构图

image

最下层架构和redis cluster架构很像,采用主备,分片存储,一共4个节点,2个master节点,2个slave节点。一共16384个槽均匀分到2个master节点上。

redis clutser使用CRC-16(key)%16384来定位key属于哪个槽,一个槽里面可以放多个key。而阿里的redis中的proxy层的作用就是对key进行hash,然后根据结果放到相应的槽内。

阿里集群版redis如果想是用lua代码的话(eval()函数),要确保key在同一个slot中。而laravel的中的redis队列就是正好使用lua代码的eval()函数,如果你正好使用laravel的redis队列,该集群将不适合你。

但是我们可以使用阿里的标准版的双副本实例,该实例是俩节点,同样是主备节点,可以实现高可用。但是该种实例不要求key在同一个slot中,所以可以使用。

相关文章

网友评论

      本文标题:redis的重新认识以及阿里redis的介绍

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