Redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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数据库实现在线游戏中的游戏玩家积分排行榜功能。
目录
相关文章
|
人工智能 编解码
国内原汁原味的免费sd训练工具--哩布哩布AI
国内原汁原味的免费sd训练工具--哩布哩布AI
1995 0
|
9月前
|
存储 弹性计算 运维
使用阿里云云服务诊断工具的体验
总的来说,阿里云的云服务诊断工具给了我很大的帮助。它不仅提高了我的工作效率,还让我能够更有信心地管理云资源。我会继续使用这个工具,并推荐给我的同行们。希望阿里云能够继续优化这个工具,让它变得更加强大。
158 9
|
10月前
|
机器学习/深度学习 人工智能 算法
人工智能与医疗健康:AI如何改变生命科学
【10月更文挑战第31天】人工智能(AI)正深刻改变医疗健康和生命科学领域。本文探讨AI在蛋白质结构预测、基因编辑、医学影像诊断和疾病预测等方面的应用,及其对科研进程、医疗创新、服务效率和跨学科融合的深远影响。尽管面临数据隐私和伦理等挑战,AI仍有望为医疗健康带来革命性变革。
367 30
|
10月前
|
资源调度 数据中心 网络虚拟化
掌握这9个术语,轻松搞定VXLAN!
【10月更文挑战第27天】
316 3
掌握这9个术语,轻松搞定VXLAN!
|
12月前
|
敏捷开发
敏捷开发:拥抱变化,快速迭代
在软件开发领域,敏捷开发已成为应对快速变化、提升交付效率的有效方法。它强调团队协作、客户反馈和灵活应变,核心价值观包括个体互动优先于流程工具、可工作软件优先于详尽文档、客户合作优先于合同谈判、响应变化优先于遵循计划。敏捷开发通过跨功能团队、短周期迭代、持续改进和客户紧密合作等实践,实现高效开发和创新。虽然面临抵抗变化、管理期望等挑战,但敏捷思维能显著提升团队表现和产品品质。
|
IDE Java 开发工具
【Android 从入门到出门】第一章:Android开发技能入门指南
【Android 从入门到出门】第一章:Android开发技能入门指南
316 3
|
存储 人工智能 自然语言处理
开源和闭源一个争议已久而且持续几十年的话题
开源和闭源一个争议已久而且持续几十年的话题
272 0
|
前端开发
bootstrap table表格外面的边框全部去掉
bootstrap table表格外面的边框全部去掉
337 1
|
机器学习/深度学习 缓存 数据可视化
点击jupyter notebook 没有反应,不会自动跳转浏览器,已解决。
点击jupyter notebook 没有反应,不会自动跳转浏览器,已解决。
457 0
|
IDE 测试技术 开发工具
Python自动化测试实战系列之WiFi测试一
用Python设计一个自动化测试WiFi射频指标的脚本工具
721 0