1. 首页
  2. IT资讯

Redis 内存数据库 管理文档

软件下载地址

下载地址

官网只有linux版本

http://www.redis.cn/

下载windows版本redis

https://github.com/MicrosoftArchive/redis/releases

下载redis可视化工具Redis Desktop Manager

https://github.com/uglide/RedisDesktopManager/releases

软件安装登录

Windows 环境

开启服务+连接客户端工具

双击 redis-server.exe redis即可开启服务。

该程序需一直开启不能关闭,也可进行后面的加到windows服务中。

可以使用自带的客户端工具进行测试,双击打开 redis-cli.exe

下载3.0.5版本,3.2.100不稳定还有病毒

我在github上下载的zip压缩文件。 下载完成后,在E盘【Program Files】目录下新建文件夹【Redis】,右键解压Redis ZIP包,把所有文件解压到redis文件夹中。

文件介绍:

redis-benchmark.exe #基准测试

redis-check-aof.exe # aof

redischeck-dump.exe # dump

redis-cli.exe # 客户端

redis-server.exe # 服务器

redis.windows.conf # 配置文件

Linux 环境

安装

下载,解压,编译:

$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz

$ tar xzf redis-4.0.6.tar.gz

$ cd redis-4.0.6

$ make

$ make install

二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:

$ src/redis-server

你可以使用内置的客户端命令redis-cli进行使用:

$ src/redis-cli

redis> set foo bar

OK

redis> get foo

“bar”

加为windows服务

如果需要把redis增加为windows的服务,脚本如下:

1、在redis的目录下执行(执行后就作为windows服务了)

C:UsersAdministrator>e:

E:>cd redis

E:redis>redis-server –service-install redis.windows.conf

[20208] 08 Jan 11:08:56.909 # Granting read/write access to ‘NT AUTHORITYNetwor

kService’ on: “E:redis” “E:redis”

[20208] 08 Jan 11:08:56.909 # Redis successfully installed as a service.

2、安装好后需要手动启动redis

C:UsersAdministrator>e:

E:>cd redis

E:redis>redis-server –service-start

[21048] 08 Jan 11:10:26.625 # Redis service successfully started.

3、停止服务

C:UsersAdministrator>e:

E:>cd redis

E:redis>redis-server –service-stop

4、卸载redis服务

C:UsersAdministrator>e:

E:>cd redis

E:redis>redis-server –service-uninstall

远程服务器登录

C:UsersThinkPad>F:

F:>cd F:redisredis安装文档及安装包Redis-x64-3.0.504

F:redisredis安装文档及安装包Redis-x64-3.0.504>redis-cli.exe -h xx.xx.xx.155 -p 6379

xx.xx.xx.155:6379> get foo

“abc” xx.xx.xx.155:6379> ping

PONG

redis 数据备份与恢复

save备份

1. redis 127.0.0.1:6379> SAVE 
2. OK

该命令将在 redis 安装目录中创建dump.rdb文件。

恢复数据

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用CONFIG命令,如下所示:

1. redis 127.0.0.1:6379> CONFIG GET dir
2. 1) "dir"
3. 2) "/usr/local/redis/bin"

以上命令CONFIG GET dir输出的 redis 安装目录为 /usr/local/redis/bin

Bgsave 异步备份

创建 redis 备份文件也可以使用命令BGSAVE,该命令在后台执行。

1. 127.0.0.1:6379> BGSAVE
2. Background saving started

redis 客户端连接数

查看最大连接数

Redis2.4 中,最大连接数是被直接硬编码在代码里面的,而在2.6版本中这个值变成可配置的。

maxclients 的默认值是 10000,你也可以在 redis.conf 中对这个值进行修改。

1. config get maxclients
2. 1) "maxclients"
3. 2) "10000"

修改最大连接数

以下实例我们在服务启动时设置最大连接数为 100000

1. redis-server --maxclients 100000

redis数据持久化

持久化两种方式:

半持久化模式:快照

全持久化模式:AOF

半持久化模式:快照

第一种方法filesnapshotting:默认redis是会以快照的形式将数据持久化到磁盘的(一个二进 制文件,dump.rdb,这个文件名字可以指定),在配置文件中的格式是:save N M表示在N秒之内,redis至少发生M次修改则redis抓快照到磁盘。当然我们也可以手动执行save或者bgsave(异步)做快照。

xx.xx.xx.155:6379> set a17 17

OK xx.xx.xx.155:6379> save

或者异步保存 bgsave

全持久化模式:AOF

还有一种持久化方法是Append-onlyfilesnapshotting方法在redis异常死掉时, 最近的数据会丢失(丢失数据的多少视你save策略的配置),所以这是它最大的缺点,当业务量很大时,丢失的数据是很多的。Append-only方法可 以做到全部数据不丢失,但redis的性能就要差些。AOF就可以做到全程持久化,只需要在配置文件中开启(默认是no),appendonly yes开启AOF之后,redis每执行一个修改数据的命令,都会把它添加到aof文件中,当redis重启时,将会读取AOF文件进行“重放”以恢复到 redis关闭前的最后时刻。

开启AOF方式:

方法1、可以修改redis.windows.conf文件的第521行内容,然后重启redis服务

appendonly yes

方法2、此处可以动态在redis-cli中不停机运行命令:CONFIG SET APPENDONLY YES

持久化配置

RDB持久化配置

Redis会将数据集的快照dumpdump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.conf文件之后,我们搜索save,可以看到下面的配置信息:

save 900 1#900(15分钟)之后,如果至少有1key发生变化,则dump内存快照。

save 300 10#300(5分钟)之后,如果至少有10key发生变化,则dump内存快照。

save 60 10000 #60(1分钟)之后,如果至少有10000key发生变化,则dump内存快照。

AOF持久化配置

Redis的配置文件中存在三种同步方式,它们分别是:

appendfsync always #每次有数据修改发生时都会写入AOF文件。

appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。

appendfsync no #从不同步。高效但是数据不会被持久化。

配置从库的持久化aof方式:

关闭自动snapshot

#save 900 1

#save 300 10

#save 60 10000

开启AOF方式:

方法1、可以修改redis.windows.conf文件的第521行内容,然后重启redis服务

appendonly yes

方法2、此处可以动态在redis-cli中不停机运行命令:CONFIG SET APPENDONLY YES

redis主从复制架构

主从复制配置

从库默认设置为只读状态,即主从为读写分离架构

先打开三个终端,然后起三个实例,分别用三个 client 去连接它们:

$ ./redis-server –port 10000

$ ./redis-cli -p 10000

端口10000的做 master

slave 01

$ ./redis-server –port 10001

$ ./redis-cli -p 10001

slave 02

$ ./redis-server –port 10002

$ ./redis-cli -p 10002

上面只是让它们的实例启动了并用客户端去连接它,并没有设置主从关系。

slave 01 slave 02 上执行下面的命令:slaveof 后面接主服务器IP和端口

127.0.0.1:10001> slaveof 127.0.0.1 10000

127.0.0.1:10002>slaveof 127.0.0.1 10000

这样就设置好了主从关系。我们来试试有没有效果。

127.0.0.1:10001> get testkey001

(nil)

这个时候是没有值的。

master 上执行:

127.0.0.1:10000> set testkey001 testvalue001

OK

然后看看 slave 上有没有:

127.0.0.1:10001> get testkey001

“testvalue001”

127.0.0.1:10001>

127.0.0.1:10002> get testkey001

“testvalue001”

主从切换

修改从服务器的redis.conf,添加slaveof xx.xx.xx.1556379

运行过程中,通过redis-cli中命令可以动态不停机切换主从

主:slaveof no one

从:slaveof xx.xx.xx.1526379

redis数据分片(分区)架构

分片(Sharding或者Partitioning),也通常被称为分区

分区就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集。

Redis 集群是自动分片和高可用的首选方式。

为什么分片?

Redis中的分片主要有两个目的:

· 允许用多台机器的内存存放更大的数据集。如果没有分片,那么你只能存放单台机器内存的最大值的数据集。

· 允许用多核和多台机器提高计算能力和网络带宽。

常见的分片方式:

1、按照范围分片

2、哈希分片,例如一致性哈希

常见的分片的实现:

①客户端分片

②在代理中做分片,比如:twemproxy

③查询路由:就是发送查询到一个随机实例,这个实例会保证转发你的查询到正确的节点,redis集群在客户端的帮助下,实现了查询路由的一种混合形式,请求不是直接从redis实例转发到另一个实例,而是客户端收到重定向到正确的节点

④在服务端进行分片,Redis采用哈希槽(hash slot)的方式在服务器端进行分片:

Redis集群有16384个哈希槽,使用健CrC1616384取模来计算一个键所属的哈希槽

分片的缺点

Redis 的一些特性与分片在一起时玩转的不是很好:

1、涉及多个键的操作通常不支持。例如,你不能对映射在两个不同 Redis 实例上的键执行交集(事实上有办法做到,但不是直接这么干)

2、涉及多个键的事务不能使用。

3、分片的粒度(granularity)是键,所以不能使用一个很大的键来分片数据集,例如一个很大的有序集合。

4、当使用了分片,数据处理变得更复杂,例如,你需要处理多个 RDB/AOF 文件,备份数据时你需要聚合多个实例和主机的持久化文件。

5、添加和删除容量也很复杂。例如,Redis 集群具有运行时动态添加和删除节点的能力来支持透明地再均衡数据,但是其他方式,像客户端分片和代理都不支持这个特性。但是,有一种称为预分片(Presharding)的技术在这一点上能帮上忙。

Redis分片的缺点

1、不支持涉及多建的操作,如mget,如果所操作的健都在同一个节点,就正常执行,否则会提示报错

2、分片的粒度是健,因此每个键对应的值不要太大

3、数据备份会比较麻烦,备份数据时你需要聚合多个实例和主机的持久化文件

4、扩容的处理比较麻烦

5、故障的恢复的处理会比较麻烦,可能需要重新梳理MasterSlave的关系,并调整每个复制集里面的数据

Redis的预分片技术

Redis预分片技术可以按照以下步骤进行实例迁移操作:

1)在新机子上启动新的redis实例;

2)将新redis实例作为slave将原redis实例作为master,将数据从原redis实例迁移到新redis实例上;

3)停止客户端(分片操作在客户端上时)或代理服务器(分片操作在代理上)

4)更新客户端或者代理服务器中的配置信息,去掉被迁移的原redis实例的ip和端口等信息,加上新启动redis实例的IP地址和端口;

5)向新启动的redis发送SLAVEOF NOONE命令,终止新redis实例对原redis实例的从属关系;

6)重启客户端程序或者代理程序,此时它们将会使用新的redis实例;

7)关掉被迁移走数据的原redis实例;

预分片

我们已经知道分片存在的一个问题,除非我们使用 Redis 作为缓存,增加和删除节点是一件很棘手的事情,使用固定的键和实例映射要简单得多。

然而,数据存储的需求可能一直在变化。今天我可以接受 10 Redis 节点(实例),但是明天我可能就需要 50 个节点。

因为 Redis 只有相当少的内存占用(footprint)而且轻量级(一个空闲的实例只是用 1MB 内存),一个简单的解决办法是一开始就开启很多的实例。即使你一开始只有一台服务器,你也可以在第一天就决定生活在分布式的世界里,使用分片来运行多个 Redis 实例在一台服务器上。

你一开始就可以选择很多数量的实例。例如,32 或者 64 个实例能满足大多数的用户,并且为未来的增长提供足够的空间。

这样,当你的数据存储需要增长,你需要更多的 Redis 服务器,你要做的就是简单地将实例从一台服务器移动到另外一台。当你新添加了第一台服务器,你就需要把一半的 Redis 实例从第一台服务器搬到第二台,如此等等。

使用 Redis 复制,你就可以在很小或者根本不需要停机时间内完成移动数据:

· 在你的新服务器上启动一个空实例。

· 移动数据,配置新实例为源实例的从服务。

· 停止你的客户端。

· 更新被移动实例的服务器 IP 地址配置。

· 向新服务器上的从节点发送 SLAVEOF NO ONE 命令。

· 以新的更新配置启动你的客户端。

· 最后关闭掉旧服务器上不再使用的实例。

Redis集群

由于数据量过大,单个复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展,每个复制集只负责存储数据集的一部分,这就是Redis的集群

1、在以前版本中,Redis的集群是依靠客户端分片来完成,但是这样会有很多缺点,比如维护成本高,需要客户端编码解决;增加、移除节点都比较繁琐等

2Redis3.0新增的一大特性就是支持集群,在不降低性能的情况下,还提供了网络分区的可访问性和支持对主数据库故障的恢复。

3、使用集群后,都只能使用默认的0号数据库

4、每个redis集群节点需要两个TCP连接打开,正常的TCP端口用来服务客户端,例如6379,家10000的端口用作数据端口,必须保证防火墙打开这两个端口

5Redis集群不保证强一致性,这意味着在特定的条件下,Redis集群可能会丢掉一些被系统收到的写入请求命令(Master传播命令返回OK后挂掉,slave还没有收到广播)

集群的架构

1、所有的Redis节点彼此互联,内部使用二进制协议优化传输速度和宽带

2、节点的fail是通过集群中超过半数的节点检测失效时才生效

3、客户端与redis节点直连,不需要中间的proxy层。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

4、集群把所有的物理节点映射到【0-16383】插槽上,集群负责维护:节点—插槽—值 的关系

集群操作的基本命令

CLUSTER INFO

CLUSTER NODES

CLUSTER MEET

CLUSTER FORGET

CLUSTER REPLICATE

CLUSTER SAVECONFIG

CLUSTER ADDSLOTS

CLUSTER DELSLOTS

CLUSTER FLUSHSLOTS

CLUSTER SETSLOT NODE

CLUSTER SETSLOT MIGRATING

CLUSTER SETSLOT IMPORTING

CLUSTER SETSLOT STABLE

CLUSTER KEYSLOT

CLUSTER COUNTKEYSINSLOT

CLUSTER GETKEYSINSLOT

MIGRATE 目的节点 目的节点 键名 数据库号码 超时时间 [copy] [replace]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29578568/viewspace-2150250/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:布吉卡,转转请注明出处:http://www.cxybcw.com/195017.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code