【Redis系列】Redis概要及其数据类型

来源:互联网 发布:淘宝达人秀是什么 编辑:程序博客网 时间:2024/05/16 14:55

Redis概要

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
官网上给出的解释是:

Redis is an open source (BSD licensed), in-memory data structure
store, used as database, cache and message broker. It supports data
structures such as strings, hashes, lists, sets, sorted sets with
range queries, bitmaps, hyperloglogs and geospatial indexes with
radius queries. Redis has built-in replication, Lua scripting, LRU
eviction, transactions and different levels of on-disk persistence,
and provides high availability via Redis Sentinel and automatic
partitioning with Redis Cluster.

也就是说,它是一个开源的,在内存中通过数据结构存储,作为数据库缓存,和消息代理。

Redis是一个开源(BSD许可),在内存中数据结构存储,作为数据库,缓存和消息代理。它支持数据结构如字符串,哈希,列表,集合(无序),有序集合。使用内置的复制,Lua脚本等和不同层次的磁盘上的持久性,并提供高可用性通过redis sentinel 和自动划分Redis集群。

其中,Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。

关键词:数据类型,缓存,消息代理,持久化,集群。本篇聊一聊第一个关键词。

数据类型

结构

redis是通过键来访问数据的。它是一个key-value类型的NoSQL数据库。支持五种key-value数据类型。今天做一个梳理,除了一些常用的命令之外,其他的日后忘记了就回来查一下就可以了。

这里写图片描述

命令

我将数据的类型命令操作按照其实现的功能进行了分类。如下图。
这里写图片描述

其具体的使用方法解释有一个API。数据类型API

使用场景:

1.String类型:

String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。

2.Hash——字典

存储、读取、修改用户属性。

在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时,通常需要将字符串(JSON)取出来,然后进行反序列化,修改某一项的值,再序列化成字符串(JSON)存储回去。简单修改一个属性就干这么多事情,消耗必定是很大的,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而 Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。

3.List——列表

最新消息排行
消息队列

List 既可以做队列,也可以做栈。使用 List 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一个应用就是消息队列,可以利用 List 的 *PUSH 操作,将任务存在 List 中,然后工作线程再用 POP 操作将任务取出进行执行。Redis 还提供了操作 List 中某一段元素的 API,你可以直接查询,删除 List 中某一段的元素。

4.Set——集合

共同好友、二度好友
利用唯一性,可以统计访问网站的所有独立 IP
好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐


Set 就是一个集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

5.Sorted Set——有序集合

带有权重的元素,比如一个游戏的用户得分排行榜
比较复杂的数据结构

和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。

总结:

本篇博客我们简单介绍了一下redis。并着重介绍了redis的第一个关键字 数据类型。主要介绍了其命令和使用场景。后续会继续推出redis相关的博客,敬请持续关注。

0 0
原创粉丝点击