redis各数据类型应用概述
- redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存、亦可持久化的日志型、key-value数据库,并提供多种语言的API。
- 它是内存存储的数据结构服务器,可用作数据库、高速缓存和消息队列代理。
- 通过数据全部in-momery的方式保证高速访问,同时提供数据落地的功能,这是redis最主要的适用场景。
- reids内置复制、Lua脚本、LRU收回、事物以及不同级别磁盘持久化功能,同时通过redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
- redis支持字符串、哈希表、列表、集合、有序集合、位图、hyperloglogs等数据类型。
- redis最为常用的数据类型:stirng、hash、list、set、sorted set、pub/sub、transactions。
String类型
- string类型就是简单的key-value类型,value不仅仅是string,也可以是数字。
- 常用命令:set、get、decr、incr、mget等。
- 除了提供与memcached一样的get、set、incr、decr 等操作外,redis还提供了下面的一些操作:
(1)获取字符串长度; (2)往字符串append内容; (3)设置和获取字符串的某一段内容; (4)设置及获取字符串的某一位(bit); (5)批量设置一系列字符串的内容;
Hash类型
- hash特别适合用于存储对象。
- 常用命令:hget、hset、hgetall等。
- 应用场景:存储一些结构化的数据,比如用户的昵称、年龄、性别、积分等,存储一个用户信息对象数据。
- 我们举个简单的实例来描述下Hash的应用场景,比如我们存储一个用户信息对象数据,包含以下信息:
(1)用户id为查找的key; (2)存储的value包括姓名、年龄、生日等信息
- 实例解析:
(1)key是用户id,value是一个Map。 (2)这个Map的key是成员的属性名,value是属性值; (3)这样对数据的修改和存取都可以直接通过其内部的Map的key(redis里称内部Map的key为field),也就是key(用户名id)+field(属性名)就可以操作对应属性数据了。
- 注意:
(1)redis提供了接口(hgetall)可以直接取到全部的属性数据,但是如果内部Map的成员很多,那么涉及到遍历整个Map的操作。 (2)由于redis单线程模型的缘故,这个遍历操作可能会比较耗时,而令其他客户端的请求完全响应不到,这点需要注意。
List类型
- list类型实质是一个每个元素都是string类型的双向链表,这使得list既可以用作栈,也可以用作队列。
- list类型经常会被用于消息队列的服务,以完成多程序之间的消息交换。
- 常用命令:lpush、rpush、lpop、rpop、lrange等。
- 应用场景:实现最新消息排行等功能,还有消息队列。
- 简单消息队列举例分析:
(1)假设一个应用程序执行lpush向链表中添加新的元素,我们通常将这样的程序称之为“生产者(producer)”; (2)而另外一个应用程序正在执行rpop操作从链表中取出元素,我们称这样的程序为“消费者(consumer)”; (3)在消费者消费消息的过程中,需要不停调用rpop查看list中是否有待处理消息。每调用一次都会发起一次链接,造成不必要的浪费。 (4)另外,如果生产者速度大于消费者速度,消息队列长度会一直增大,时间久了会占用大量内存空间; (5)所以,可以使用brpop命令,这个命令只有在有元素时返回,没有则会阻塞直到超时返回null。
Set类型
- set类型是string类型的无序集合。
- set集合的概念就是一堆不重复值的组合。
- set元素最大可以包含(2的32次方-1)个元素。
- set内部实现是一个value永远为null的HashMap。
- set对外提供的功能与list类似是一个列表的功能,特殊之处在于set时可以自动排重的。
- 常用命令:sadd、spop、smembers、sunion等。
- 当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择。
- 并且set提供了判断某个成员是否在一个set集合内的重要接口,这个是list不能提供的。
- 利用set数据结构,可以存储一些集合性的数据,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。
- redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能。
Zset类型
- 和set一样,sorted set也是stirng类型元素的集合。不同的是每个元素都会关联一个double类型的score,元素顺序由score决定。
- sorted set是插入有序的,即自动排序。
- 常用命令:zadd、zrange、zrem、zcard等。
- 当你需要一个有序的并且不重复的集合列表时,那么可以选择sorted set数据结构。
- 应用举例:
(1)例如存储全班同学的成绩,其集合value可以是同学的学号,而score就可以是成绩。 (2)排行榜应用,根据得分列出topN的用户等。
如果想要学习交流PHP的朋友,可以关注小编,私信头条号输入【学习交流】获取扣扣加群链接领取学习资料,或者通过搜索微信号【PHPer_】加微信好友拉入微信群。
相关推荐
smartbaby 2020-11-11
ljz0 2020-09-15
王道革 2020-11-25
wangdonghello 2020-11-03
Langeldep 2020-11-16
chenhualong0 2020-11-16
聚合室 2020-11-16
koushr 2020-11-12
MRFENGG 2020-11-11
guoyanga 2020-11-10
fackyou00 2020-11-10
Orangesss 2020-11-03
dongCSDN 2020-10-31
rainandtear 2020-10-30
Quietboy 2020-10-30
liuyulong 2020-10-29
fansili 2020-10-29
温攀峰 2020-10-23