redis通信协议及五种数据类型

一、Redis Protocol

Redis 即 REmote Dictionary Server (远程字典服务);

而Redis的协议规范是 Redis Serialization Protocol (Redis序列化协议),一种简称为RESP的二进制安全文本协议。

该协议是用于与Redis服务器通信的,用的较多的是Redis-cli通过pipe与Redis服务器联系;

    协议如下:

          客户端以规定格式的形式发送命令给服务器;

          服务器在执行最后一条命令后,返回结果。



E.g.

用SET命令来举例说明RESP协议的格式。

redis> SET mykey "Hello"

"World"

实际发送的请求数据:

*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$5\r\nHello\r\n

实际收到的响应数据:

+World\r\n


二、五种数据类型

redis中,键值对中的Value所能存储的数据类型有五种,分别是String、List、Set、hash、sorted set。

1.String

常用的字符串类型是Redis中最为基础的数据存储类型,是一个由字节组成的序列,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等,是标准的key-value,一般来存字符串,整数和浮点数。

另,Value最多可以容纳的数据长度为512MB。

应用场景:很常见的场景用于统计网站访问数量,当前在线人数等。

常用方法如下图:


2.Set集合

和列表List一样,在执行插入、删除、判断是否存在某元素时,效率很高。而Set集合最大的优势在于可以进行交集并集差集操作,方便不同情况下根据需求获得不同条件下的数据集。

另,Set可包含的最大元素数量是4294967295。

应用场景:1.微信或QQ等社交软件中,利用交集求共同好友。2.利用唯一性,可以统计访问网站的所有独立IP。3.好友推荐的时候根据tag求交集,大于某个threshold(临界值的)就可以推荐。

常用方法如下图:


3.List列表

Redis的List允许用户从序列的两端推入或者弹出元素。

其中LinkedList作为由多个字符串值组成的有序可重复的序列,底层由链表结构实现,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。

另,List中可以包含的最大元素数量是4294967295。

应用场景:1.最新消息排行榜。2.消息队列,以完成多程序之间的消息交换。可以用push操作将任务存在list中(生产者),然后线程在用pop操作将任务取出进行执行。(消费者)

常用方法如下:


4.hash哈希

Redis hash 是一个 string 类型的 field 和 value 的映射表,特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

应用场景:例如存储、读取、修改用户属性(name,age,pwd等)。

常用方法如下:


5.sorted set有序集合

sorted set和set很像,都是字符串的集合,都不允许重复的成员出现在一个set中。

他们之间差别在于有序集合中每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。

并且尽管有序集合中的成员必须是唯一衣的,但是分数(score)却可以重复。

应用场景:可以用于一个大型在线游戏的积分排行榜,每当玩家的分数发生变化时,可以执行zadd更新玩家分数(score),此后在通过zrange获取几分top ten的用户信息。

常用方法如下图:


PS:对key的通用操作如下


三、参考文章

Redis的五种数据类型及方法 - dijia478 - 博客园

Redis 哈希(Hash) | 菜鸟教程

你可能感兴趣的:(redis通信协议及五种数据类型)