我们说Redis是一个强大的Key-Value存储系统,在前面我们已遇到了两个问题:

1、redis server 启动后,独占进程,能不能修改为后台服务呢?

2、redis server 服务是单线程的,而我的机器是多核的,能不能在同一台机器上开启多个实例更充分的利用 cpu 资源呢?但6379端口已经被前一个实例绑定,肯定会有冲突,那能不能修改默认端口呢?

答案是肯定的,redis 提供了灵活的配置方式,一种可以通过配置文件来配置,另一种你可以在运行时通过 config set 命令来修改配置。

我们先来看看配置文件吧。

殊不知我们在前面启动 server 的时候敲的 ./redis-server 命令,如果后面不附加参数,它是按默认配置来启动 redis 服务的,其实它后面还可以附加一个配置文件路径的参数。这个配置文件在哪?在redis根目录下有一个redis.conf文件,这个文件为了提供了默认的配置和示例。你不要轻易去动这个文件,除非你非常牛逼。我们还是保险起见先复制一个副本吧。打开副本我们发现这个文件真的好大好长啊,全是英文看得我也难受啊,也不见哪座大神帮忙翻译一下,给个现成的中文版,太自私了吧,哥今天一晚不睡也要给你们一个交代。

太长了,翻译了一个晚上才搞了一部分出来,不过主要的配置项都翻译出来了,我后面有时间继续翻译。看这里。记得顺便去关注一下我的 restful.data

把这个文件下载下来后,拷贝到 src 目录下面,也就是和 redis-server 在同一个目录,方便我们操作。

我们稍微改一下配置,看看能不能把我们前面提到的两个问题解决了。

首先我们修改 daemonize 配置项,把它设置为 yes,打开终端,我们执行一下 redis-server 命令。

zhaoguihuadediannao:~ zhaogh$ cd applications/dev/redis/src

zhaoguihuadediannao:src zhaogh$ ./redis-server ./redis.conf

zhaoguihuadediannao:src zhaogh$ ./redis-cli

127.0.0.1:6379>

是不是已经不再独占进程了,启动守护进程后,我们仍然可以执行 redis-cli 命令。

先停掉 redis 服务:

127.0.0.1:6379> shutdown

127.0.0.1:6379> quit

zhaoguihuadediannao:src zhaogh$

然后我们修改 port 配置项为 6378,然后再启动服务:

zhaoguihuadediannao:src zhaogh$ ./redis-server ./redis.conf

zhaoguihuadediannao:src zhaogh$ ./redis-cli

Could not connect to Redis at 127.0.0.1:6379: Connection refused

not connected>

因为我们修改了默认端口号,已经连不上去了,尝试加上端口参数。

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 6378

127.0.0.1:6378>

成功了连上了。

篇幅有限,redis.confi 中其他配置项请大家结合注释去深入的了解。

下面介绍另外一种配置方式,通过命令行来配置。

假如说我们不想修改配置文件来启动指定端口号的redis服务,我们可以在终端上执行下面的命令:

zhaoguihuadediannao:src zhaogh$ ./redis-server --port 6379 --daemonize yes

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 6379

127.0.0.1:6379>

但我还是推荐使用配置文件的方式。

如果在生产环境里面需要修改某些配置项,但我们又不想停掉服务,怎么办?

Redis允许在运行的过程中,在不重启服务器的情况下更改服务器配置,同时也支持 使用特殊的CONFIG SET和 CONFIG GET命令用编程方式查询并设置配置。

127.0.0.1:6379> config get port

1) "port"

2) "6379"

127.0.0.1:6379>

127.0.0.1:6379> config set port 6380

(error) ERR Unsupported CONFIG parameter: port

127.0.0.1:6379>

我试图直接修改端口号,没有成功,我是有点想当然了,因为一旦修改端口必然需要重启服务,重新绑定端口,所以并不是所有的配置项都能在运行时进行修改。

那我们来修改一个允许修改的配置项。

127.0.0.1:6379> config set tcp-keepalive 60

OK

127.0.0.1:6379>

上面的例子,我把心跳包发送时间间隔修改成了60秒。你们可以自己尝试着去修改其他配置项。

技术上有很多事情不是靠看几篇文章,通过道听途说就能明白的,想要真正弄清楚,必须要自己亲自去尝试,实践才是检验真理的唯一标准,就像很多朋友给我推荐车一样,说这车好,那车差,其实自己都没开过,我发现很多程序员嘴上都说的一套一套的,实际做起事来真不行,这样的人适合做销售,会忽悠,当然这也是种能力。

下期预告,Redis 的主从复制,敬请期待。

高性能网站架构设计之缓存篇(3)- Redis 的配置的更多相关文章

  1. 高性能网站架构设计之缓存篇(5)- Redis 集群(上)

    集群技术是构建高性能网站架构的重要手段,试想在网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,并快速响应,我们必然想到的是将数据进行切片,把数据根据某种规则放入多个不同的服务器节 ...

  2. 高性能网站架构设计之缓存篇(2)- Redis C#客户端

    在上一篇中我简单的介绍了如何利用redis自带的客户端连接server并执行命令来操作它,但是如何在我们做的项目或产品中操作这个强大的内存数据库呢?首先我们来了解一下redis的原理吧. 官方文档上是 ...

  3. 高性能网站架构设计之缓存篇(4)- Redis 主从复制

    Redis 的主从复制配置非常容易,但我们先来了解一下它的一些特性. redis 使用异步复制.从 redis 2.8 开始,slave 也会周期性的告诉 master 现在的数据量.可能只是个机制, ...

  4. 高性能网站架构设计之缓存篇(1)- Redis C#客户端

    一.什么 RedisREmote DIctionary Server,简称 Redis,是一个类似于Memcached的Key-Value存储系统.相比Memcached,它支持更丰富的数据结构,包括 ...

  5. 高性能网站架构设计之缓存篇(6)- Redis 集群(中)

    昨天晚上钓鱼回来,大发神经,写了篇概括程序员生活现状的文章,没想到招来众多人的口诛笔伐,大有上升到政治层面的趋势. 我也许不会再发表任何冲击心灵的文章,我希望给大家带来更多的正能量,所以那篇文章已被我 ...

  6. 高性能网站架构设计之缓存篇(1)- Redis的安装与使用

    一.什么 Redis REmote DIctionary Server,简称 Redis,是一个类似于Memcached的Key-Value存储系统.相比Memcached,它支持更丰富的数据结构,包 ...

  7. ASP.NET 构建高性能网站 架构设计

    Web前端系统 为了达到不同应用的服务器共享.避免单点故障.集中管理.统一配置等目的,不以应用划分服 务器,而是将所有服务器做统一使用,每台服务器都可以对多个应用提供服务,当某些应用访问量升高时,通过 ...

  8. (转)高性能网站架构之缓存篇—Redis集群搭建

    看过 高性能网站架构之缓存篇--Redis安装配置和高性能网站架构之缓存篇--Redis使用配置端口转发 这两篇文章的,相信你已经对redis有一定的了解,并能够安装上,进行简单的使用了,但是在咱们的 ...

  9. 【HELLO WAKA】WAKA iOS客户端 之二 架构设计与实现篇

    上一篇主要做了MAKA APP的需求分析,功能结构分解,架构分析,API分析,API数据结构分析. 这篇主要讲如何从零做iOS应用架构. 全系列 [HELLO WAKA]WAKA iOS客户端 之一 ...

随机推荐

  1. 开启 mysql 远程访问

    如何开启MySQL的远程帐号-1)首先以 root 帐户登陆 MySQL 在 Windows 主机中点击开始菜单,运行,输入“cmd”,进入控制台,然后cd 进入MySQL 的 bin 目录下,然后输 ...

  2. AndroidLinker与SO加壳技术之下篇

    点此查看上篇<AndroidLinker与SO加壳技术之上篇> 2.4 链接 链接过程由 soinfo_link_image 函数完成,主要可以分为四个主要步骤: 1. 定位 dynami ...

  3. C# 自定义FileUpload控件

    摘要:ASP.NET自带的FileUpload控件会随着浏览器的不同,显示的样式也会发生改变,很不美观,为了提高用户体验度,所以我们会去自定义FileUpload控件 实现思路:用两个Button和T ...

  4. 下拉框数据的动态选择,类似级联ajax刷新数据

    简单的两个下拉列表,第二个中的数据与第一个下拉框相关: --------------------var selected = $(this).children('option:selected').v ...

  5. AngularJS四大特性

    Google AnguarJS是一个JS框架,适用于以数据的CRUD操作为主的SPA应用. 四大特性: (1)MVC模型 Model:模型,即数据=>JS中的变量 View:视图,即数据的呈现= ...

  6. 如果因特网中的所有链路都提供可靠的交付服务,TCP可靠传输服务是多余的吗?

    IP协议因为是无连接的, 所以其传输是不可靠的.虽然链路保证了数据包在端到端的传输中不发生差错,但是它不能保证IP数据包是按照正确的书需到达最终的目的地.IP数据包可以使用不同的路由通过网络,到达接收 ...

  7. JS 获取FileUpload1控件地址

    function openList() { //判断浏览器类型 var isIE = (document.all) ? true : false; ); ); ); var path = " ...

  8. sql连着function使用

    create function fun002(@thename varchar()) returns int as begin declare @count int select @count=cou ...

  9. 倒计时(jQuery)

    倒计时,在网页制作中会经常用到,特别是一些节日活动页面运用更是广泛.今天就和大家分享一下jQuery如何实现倒计时.话不多说,言归正传,倒计时开始: 首先,既然是用jQuery实现,那么前提就是要先引 ...

  10. Fiddler 手机端证书安装No root certificate was found

    测试过程中发现在浏览器中访问代理服务器及端口,不通,提示要安装证书. 点击证书安装时,提示错误: No root certificate was found,Have you enabled HTTP ...