Redis

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

Redis

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


redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。[1] 

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)

目前,Vmware在资助着redis项目的开发和维护。

redis组件:redis.io

redis监听端口:6379/tcp

一.Redis安装

Linux下rpm包安装redis:

http://www.rpmfind.net/ 搜素相应的redis版本进行安装,这里我们使用redis-3.2.7-1.el6.remi.x86_64.rpm进行安装。

1
2
3
4
rpm -qip redis-3.2.7-1.el6.remi.x86_64.rpm 查询未安装的redis包的详细信息
rpm -qlp redis-3.2.7-1.el6.remi.x86_64.rpm 查看未安装的redis包中文件未来要安装的位置
rpm -qRp redis-3.2.7-1.el6.remi.x86_64.rpm 查看未安装包redis所需要依赖的全部包信息
rpm -ivh redis-3.2.7-1.el6.remi.x86_64.rpm 安装redis安全包,可以看到安装时需要包依赖

这里安装会报错:

1
2
3
4
[root@RedHat-2 soft] # rpm -ivh redis-3.2.7-1.el6.remi.x86_64.rpm 
warning: redis-3.2.7-1.el6.remi.x86_64.rpm: Header V4 DSA /SHA1  Signature, key ID 00f97f56: NOKEY
error: Failed dependencies:
libjemalloc.so.1()(64bit) is needed by redis-3.2.7-1.el6.remi.x86_64

解决依赖关系需要安装jemalloc.同样这里我们安装jemalloc-3.6.0-1.el6.x86_64.rpm版本。

1
rpm -ivh jemalloc-3.6.0-1.el6.x86_64.rpm

之后,继续安装redis-3.2.7-1.el6.remi.x86_64.rpm。

wKiom1jBI8KTznJLAAEYXjR2qZw354.jpg-wh_50

安装完成之后,我们启动redis服务,就可以使用redis了。

1
service redis start

rpm包安装redis配置文件为/etc/redis.conf,相应的启动命令在/usr/bin/下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
root@RedHat-2 soft] # ss -ntl
State      Recv-Q Send-Q                                          Local Address:Port                                            Peer Address:Port 
LISTEN     0      128                                                 127.0.0.1:6379                                                       *:*     
LISTEN     0      128                                                        :::111                                                       :::*     
LISTEN     0      128                                                         *:111                                                        *:*     
LISTEN     0      128                                                        :::22                                                        :::*     
LISTEN     0      128                                                         *:22                                                         *:*     
LISTEN     0      128                                                 127.0.0.1:631                                                        *:*     
LISTEN     0      128                                                       ::1:631                                                       :::*     
LISTEN     0      100                                                       ::1:25                                                        :::*     
LISTEN     0      100                                                 127.0.0.1:25                                                         *:*     
LISTEN     0      128                                                        :::57562                                                     :::*     
LISTEN     0      128                                                         *:53481                                                      *:*     
[root@RedHat-2 soft] # redis-cli 
127.0.0.1:6379> SET ip 0.0.0.0 --设置键值
OK
127.0.0.1:6379> GET ip --查看
"0.0.0.0"
127.0.0.1:6379> KEYS * --查看所有键
1)  "ip"
127.0.0.1:6379>

设置防火墙

1
2
3
4
iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
service iptables save
service iptables restart 
cat  /etc/sysconfig/iptables

Redis命令参考

http://doc.redisfans.com/

二.redis认证实现方式

1)vim /etc/redis.conf

1
# requirepass foobared

2)通过redis-cli命令实现

1
AUTH PASSWORD

三.redis复制实现

特点:

  • 一个Master可以有多个Slave;

  • 支持链式复制;

  • Master以非阻塞方式同步数据至slave;

从服务器上输入主服务器的ip及端口:

1
2
3
[root@RedHat-2 ~] # redis-cli 
127.0.0.1:6379> SLAVEOF [hostip] [port] 
127.0.0.1:6379> INFO replication  --查看状态

注:主从服务器最好在同一网段上,并且redis.conf修改各自相应的ip。如:

1
bind 192.168.1.102
1
redis-cli -h 192.168.1.102 -p 6379 --连接设置redis复制...

注意:如果master使用requirepass开启了认证功能,从服务器要使用masterauth <PASSWORD>来连入服务请求使用此密码进行认证;

四.redis的sentinel实现

用于管理多个redis服务实现HA;

  • 监控

  • 通知

  • 自动故障转移

启动方式:

1
2
1)redis-sentinel  /path/to/file .conf
2)redis-server   /path/to/file .conf --sentinel

(1) 服务器自身初始化,运行redis-server中专用于sentinel功能的代码;

(2) 初始化sentinel状态,根据给定的配置文件,初始化监控的master服务器列表;

(3) 创建连向master的连接;

配置文件为/etc/redis-sentinel.conf监听端口为26379

主要配置参数:

1
2
3
4
5
6
7
8
(1) sentinel monitor <master-name> <ip> <redis-port> <quorum>
     sentinel monitor mymaster 127.0.0.1 6379 2
(2) sentinel down-after-milliseconds <master-name> <milliseconds>
     sentinel down-after-milliseconds mymaster 30000
(3) sentinel parallel-syncs <master-name> <numslaves>
    sentinel parallel-syncs mymaster 1
(4) sentinel failover-timeout <master-name> <milliseconds>
     sentinel failover-timeout mymaster 180000

主节点:192.178.1.100,两个从节点分别为:192.168.1.101,192.168.1.102

主节点作为redis-sentinel监控端,主节点redis-sentinel.conf设置:

1
2
3
4
sentinel monitor mymaster 192.168.1.100 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
protected-mode no

两个从节点*.1.101和*.1.102,也可以编辑redis.conf设置主节点:

1
2
192.168.1.101:6379> SLAVEOF 192.168.1.100 6379
192.168.1.102:6379> SLAVEOF 192.168.1.100 6379

专用命令:

SENTINEL masters

SENTINEL slaves <master name>

SENTINEL get-master-addr-by-name <master name>

SENTINEL reset

SENTINEL failover <master name>

如果不是主宕机,而是从宕机,那么不会发生切换行为,只会把宕机的那台从集群中剔除。

已宕机的机器,如果再次加入集群,只要它成为了当前主的从机,则Sentinel会自动发现,并将其加入集群成员。










本文转自 SoulMio 51CTO博客,原文链接:http://blog.51cto.com/bovin/1904877,如需转载请自行联系原作者
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
17天前
|
存储 NoSQL 关系型数据库
【初识Redis】
【初识Redis】
24 2
|
17天前
|
存储 NoSQL Redis
Redis介绍以及日常使用
​ 介绍 Redis(REmote DIctionary Server)是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、非关系类型的Key-Value数据库。它提供了多种语言的API,如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等,使得在各种语言环境下使用Redis都变得非常方便。 Redis是一个高性能的Key-Value数据库,其性能在很大程度上补偿了如Memcached这类Key-Value存储的不足,并且在某些场景下,它还可以作为关系数据库的良好补充。它支持的数据结构类型
159 1
|
9月前
|
监控 NoSQL Java
|
9月前
|
NoSQL API Redis
Redis
Redis 是一个开源的、支持网络、可基于内存亦可持久化的日志型、key-value 数据库,它支持多种数据类型,如字符串(string)、哈希(hash)、列表(list)、集合(set)和有序集合(sorted set)等。Redis 提供了多种语言的 API,通常被称为数据结构服务器。
79 0
|
10月前
|
存储 消息中间件 NoSQL
什么是Redis?
redis是一个高性能的key-value数据库。
51 0
|
10月前
|
存储 缓存 NoSQL
Redis5
Redis5
102 0
|
11月前
|
消息中间件 存储 缓存
什么是 Redis?
什么是 Redis?
47 0
|
12月前
|
设计模式 移动开发 缓存
可算知道Redis为什么这么快了
可算知道Redis为什么这么快了
111 0
|
NoSQL 程序员 数据库
|
NoSQL Redis