24

最全Redis基础知识

 4 years ago
source link: https://segmentfault.com/a/1190000022013609
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

NoSQL概述

什么是NoSQL

NoSQL不仅仅是SQL,它是Not Only SQL 的缩写,也是众多非关系型数据库的统称NoSQL和关系型数据库一样,也是用来存储数据的仓库。

为什么需要NoSQL?

随着互联网的高速发展,数据量、访问量呈爆发式式增长。比如12306中国铁路票务系统。

一年售出车票有30多亿张;

网上售票比例超过了80%;

互联网高峰日售出车票达到了1282多万张;

高峰时每秒售票超出1000张;

网站高峰日访问量超过了1600亿次……

12306售票系统

已成为全球最大的票务交易系统

中国人民彻夜排队买票已成为历史

这么多的数据都是需要存储的,然而传统的关系型数据库面对这些海量数据的存储,以及实现高访问量、高并发读/写,就会显的力不从心,尤其是当面对超大规模、高并发、高吞吐量的大型动态网站的时候,就会暴露出很多难以克服的问题,影响用户体验。为了满足对海量数据的高速存储需求,实现高并发、高吞吐量,NoSQL应运而生。NoSQL的出现可以解决传统关系型数据库所不能解决的问题。

NoSQL特点

  1. 容易扩展,方便使用,数据之间没有关系。
  2. 数据模型非常灵活,无需提前为要存储的数据建立字段类型,随时可以存储自定义的数据格式。
  3. 适合大数据量、高性能的存储。
  4. 具有高并发读/写、高可用性。

Redis概述

Redis由来

2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,没多久该公司的创始人Sanfilippo对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。

什么是Redis

Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的、使用C语言编写、支持网络、可基于内存亦可持久化的Key-Value数据库,并提供多种语言的API。

Redis能读的速度是110000次/s,写的速度是81000次/s 。

Redis为什么快

  1. 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
  2. 数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
  3. 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
  4. 使用多路I/O复用模型,非阻塞IO;

Redis的安装和使用

Windows下安装

下载地址: https://github.com/MSOpenTech...

Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip解压后,将文件夹重新命名为 redis。

1460000022013613

打开文件夹,内容如下:

1460000022013612

双击redis-server.exe,启动服务端,输入之后,会显示如下界面:

1460000022013614

这时候启动一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。

切换到 redis 目录下运行:

redis-cli.exe -h 127.0.0.1 -p 6379

Linux 下安装

下载地址: http://redis.io/download ,下载最新稳定版本。

本教程使用的最新文档版本为 2.8.17,下载并安装:

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make

make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

下面启动redis服务.

$ cd src
$ ./redis-server

注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。

$ cd src
$ ./redis-server ../redis.conf

redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:

$ cd src
$ ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

Ubuntu 下安装

在 Ubuntu 系统安装 Redis 可以使用以下命令:

$sudo apt-get update
$sudo apt-get install redis-server

启动 Redis

$ redis-server

查看 redis 是否启动?

$ redis-cli

以上命令将打开以下终端:

redis 127.0.0.1:6379>

127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

redis 127.0.0.1:6379> ping
PONG

以上说明我们已经成功安装了redis。

Redis的数据结构

Redis 字符串(String)

概述

字符串类型是Redis中最为基础的数据存储类型。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

常用命令

  • 赋值

1460000022013615

  • 取值

1460000022013616

  • 删除

del key:删除指定的key

1460000022013618

  • 数值增减

1460000022013617

Redis 哈希(Hash)

概述

Hash类型可以看出具有String key 和String value 的map容器。所以该类型非常适合于存储值为对象的信息。如username、password和age等。每一个hash可以存储4294967295个键值对

常用命令

  • 赋值

1460000022013619

  • 取值

1460000022013621

1460000022013620

  • 删除

1460000022013622

  • 其他

1460000022013623

1460000022013624

Redis 列表(List)

概述

List类型是按照插入顺序排序的双向链表。从元素插入和删除的效率视角来看,如果我们在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了大量的数据,该操作也可以在常量时间内完成。

常用命令

  • 两端添加

1460000022013625

  • 查看列表

1460000022013627

  • 两端弹出

1460000022013626

1460000022013629

  • 获取列表中元素的个数

1460000022013628

Redis 集合(Set)

概述

Set类型为没有排序的字符集合。Set集合中不允许出现重复的元素。Set类型在功能上还存在一个非常重要的特性,即集合的聚合操作效率极高。

常用命令

  • 添加/删除元素

1460000022013630

1460000022013632

  • 获得集合中的元素

1460000022013631

  • 集合的差集运算 A-B

1460000022013633

  • 集合的交集运算 A∩B

1460000022013634

  • 集合中的并集运算 A∪B

1460000022013635

Redis 有序集合(sorted set)

概述

有序集合和Set类型即为相似,都不允许重复的成员出现在一个Set中。它们之间的主要差别是有序集合中的每一个成员都会有一个score与之关联,通过score来为集合中的成员进行从小到大的排序。

常用命令

  • 添加元素

1460000022013636

  • 获得元素

1460000022013637

1460000022013638

  • 删除元素

1460000022013639

  • 范围查询

1460000022013640

1460000022013641

Redis特性

多数据库

一个Redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号。

消息订阅与发布

  1. subscribe channel:订阅频道。例如subscribe mychat,订阅mychat这个频道
  2. psubscribe channel :批量订阅频道。例如psubscribe s ,订阅以s开头的频道。
  3. publish channel content:在指定的频道中发布消息,如punlish mychat ‘today is a newday’

Redis事务

Redis作为NoSQL数据库也提供了事务机制。

特点:

  1. 在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其他客户端请求提供任何服务,从而保证了事务中的所有命令被原子的执行。
  2. 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,其后的命令仍然被继续执行。

Redis持久化

Redis的高性能是由于其将所有的数据都存储在了内存中,为了使Redis在重启之后仍能保证不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。

Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用,也可以结合使用。

  1. RDB持久化(默认)

在指定的时间间隔内将内存中的数据集快照写入磁盘。

  1. AOF持久化

以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

Key值过期

Redis的应用场景

  1. 缓存(最多使用)
  2. 聊天室的在线好友列表 发布/订阅
  3. 任务队列(秒杀、抢购) 消息队列、(先进先出、后进先出) (List)
  4. 应用排行榜(有序集合)
  5. 网站访问统计(Set)
  6. 数据过期处理(可以精确到毫秒)
  7. 分布式集群框架中的session分离。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK