本次实践首先会在Linux上搭建redis环境,体验Linux系统如何安装redis并解决安装过程所遇到的一些问题,然后会重点介绍如何在docker环境学习使用redis。
在学习使用redis的过程中,我会把自己的操作过程以及命令都保存下来,方便大家一起学习。

1.Linux系统安装redis

Linux系统安装reids首先需要下载redis安装包并上传至我们的Linux服务器,下面附上我所使用的redis版本:
http://download.redis.io/releases/redis-6.0.5.tar.gz

1.1.使用crt或xshell客户端连接Linux服务器

a.启动我们的虚拟机

在这里插入图片描述
测试Linux环境是否处于正常状态
在这里插入图片描述

b.使用crt连接Linux服务器

通过ip add 命令查看Linux机器的ip
在这里插入图片描述
使用crt成功登录Linux服务器
在这里插入图片描述

注意!!!使用crt过程如果发现中文乱码,需要进行如下设置:选项 -> 会话选项 -> 外观 -> 字体 -> 字符集[选择中文GB2312] -> 确定 -> 字符编码[选择UTF-8] -> 确定在这里插入图片描述
在选项的下拉框选择会话选项进入下图操作界面在这里插入图片描述
在这里插入图片描述
必须先设置字体的字符集编码,然后再设置字符编码,否则不起作用
在这里插入图片描述

1.2.上传redis安装包至Linux服务器进行安装

a.使用filezilla客户端上传redis安装包

通过filezilla上传redis安装包至Linux当前目录
在这里插入图片描述

b.查看是否上传成功

通过ll -rt 命令查看当前目录是否存在redis安装包
在这里插入图片描述

c.移动redis安装包至/opt目录下并减压

/opt[Optional application software packages]
主机额外安装附加软件所摆放的目录,是用户级的程序目录,默认是空的。 一般安装软件的时候,可以自己指定安装到这个目录下,便于查找和管理

通过 mv redis-6.0.5.tar.gz /opt/ 命令进行移动安装包
通过 cd /opt/ 命令进入/opt目录
通过 ll -rt 命令查看是否移动成功
在这里插入图片描述
通过 tar -zxvf redis-6.0.5.tar.gz 命令减压redis安装包
在这里插入图片描述
通过 ll -rt 命令查看减压结果
在这里插入图片描述

d.安装c++环境

因为redis是由c++语言开发的,所以需要安装c++环境,完成redis环境的搭建

通过 yum install gcc-c++ 命令安装c++
在这里插入图片描述

e.编译redis的Makefile文件

通过 make 命令编译

注意!!! make命令会在当前目录下找Makefile文件进行编译,找不到就会报错,见附图:在这里插入图片描述

进入redis的减压目录,可以看到Makefile文件
在这里插入图片描述
在redis的减压目录下重新编译Makefile文件
在这里插入图片描述

哈哈哈!!!果然不可能一帆风顺,没有遇到报错的安装绝对不是首次安装,个人见解,不喜勿喷
报错信息很长:

In file included from server.c:30:0:
server.h:1045:5: 错误:expected specifier-qualifier-list before ‘_Atomic’
     _Atomic unsigned int lruclock; /* Clock for LRU eviction */
     ^
server.c: 在函数‘serverLogRaw’中:
server.c:1028:31: 错误:‘struct redisServer’没有名为‘logfile’的成员
     int log_to_stdout = server.logfile[0] == '\0';
                               ^
server.c:1031:23: 错误:‘struct redisServer’没有名为‘verbosity’的成员
     if (level < server.verbosity) return;
                       ^
server.c:1033:47: 错误:‘struct redisServer’没有名为‘logfile’的成员
     fp = log_to_stdout ? stdout : fopen(server.logfile,"a");
                                               ^
server.c:1046:47: 错误:‘struct redisServer’没有名为‘timezone’的成员
         nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
                                               ^
server.c:1046:63: 错误:‘struct redisServer’没有名为‘daylight_active’的成员
         nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active);
                                                               ^
server.c:1049:19: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
         if (server.sentinel_mode) {
                   ^
server.c:1054:32: 错误:‘struct redisServer’没有名为‘masterhost’的成员
             role_char = (server.masterhost ? 'S':'M'); /* Slave or Master. */
                                ^
server.c:1062:15: 错误:‘struct redisServer’没有名为‘syslog_enabled’的成员
     if (server.syslog_enabled) syslog(syslogLevelMap[level], "%s", msg);
               ^
server.c: 在函数‘serverLog’中:
server.c:1072:30: 错误:‘struct redisServer’没有名为‘verbosity’的成员
     if ((level&0xff) < server.verbosity) return;
                              ^
server.c: 在函数‘serverLogFromHandler’中:
server.c:1089:31: 错误:‘struct redisServer’没有名为‘logfile’的成员
     int log_to_stdout = server.logfile[0] == '\0';
                               ^
server.c:1092:30: 错误:‘struct redisServer’没有名为‘verbosity’的成员
     if ((level&0xff) < server.verbosity || (log_to_stdout && server.daemonize))
                              ^
server.c:1092:68: 错误:‘struct redisServer’没有名为‘daemonize’的成员
     if ((level&0xff) < server.verbosity || (log_to_stdout && server.daemonize))
                                                                    ^
server.c:1095:37: 错误:‘struct redisServer’没有名为‘logfile’的成员
                          open(server.logfile, O_APPEND|O_CREAT|O_WRONLY, 0644);
                                     ^
server.c: 在函数‘hasActiveChildProcess’中:
server.c:1473:18: 错误:‘struct redisServer’没有名为‘rdb_child_pid’的成员
     return server.rdb_child_pid != -1 ||
                  ^
server.c:1474:18: 错误:‘struct redisServer’没有名为‘aof_child_pid’的成员
            server.aof_child_pid != -1 ||
                  ^
server.c:1475:18: 错误:‘struct redisServer’没有名为‘module_child_pid’的成员
            server.module_child_pid != -1;
                  ^
server.c: 在函数‘allPersistenceDisabled’中:
server.c:1481:18: 错误:‘struct redisServer’没有名为‘saveparamslen’的成员
     return server.saveparamslen == 0 && server.aof_state == AOF_OFF;
                  ^
server.c:1481:47: 错误:‘struct redisServer’没有名为‘aof_state’的成员
     return server.saveparamslen == 0 && server.aof_state == AOF_OFF;
                                               ^
server.c: 在函数‘trackInstantaneousMetric’中:
server.c:1488:36: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
     long long t = mstime() - server.inst_metric[metric].last_sample_time;
                                    ^
server.c:1490:27: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
                     server.inst_metric[metric].last_sample_count;
                           ^
server.c:1495:11: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
     server.inst_metric[metric].samples[server.inst_metric[metric].idx] =
           ^
server.c:1495:46: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
     server.inst_metric[metric].samples[server.inst_metric[metric].idx] =
                                              ^
server.c:1497:11: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
     server.inst_metric[metric].idx++;
           ^
server.c:1498:11: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
     server.inst_metric[metric].idx %= STATS_METRIC_SAMPLES;
           ^
server.c:1499:11: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
     server.inst_metric[metric].last_sample_time = mstime();
           ^
server.c:1500:11: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
     server.inst_metric[metric].last_sample_count = current_reading;
           ^
server.c:1487:35: 警告:形参‘metric’被设定但未被使用 [-Wunused-but-set-parameter]
 void trackInstantaneousMetric(int metric, long long current_reading) {
                                   ^
server.c: 在函数‘getInstantaneousMetric’中:
server.c:1509:22: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
         sum += server.inst_metric[metric].samples[j];
                      ^
server.c:1504:38: 警告:形参‘metric’被设定但未被使用 [-Wunused-but-set-parameter]
 long long getInstantaneousMetric(int metric) {
                                      ^
server.c: 在函数‘clientsCronResizeQueryBuffer’中:
server.c:1519:29: 错误:‘struct redisServer’没有名为‘unixtime’的成员
     time_t idletime = server.unixtime - c->lastinteraction;
                             ^
server.c: 在函数‘clientsCronTrackExpansiveClients’中:
server.c:1576:19: 错误:‘struct redisServer’没有名为‘unixtime’的成员
     int i = server.unixtime % CLIENTS_PEAK_MEM_USAGE_SLOTS;
                   ^
server.c: 在函数‘clientsCronTrackClientsMemUsage’中:
server.c:1613:11: 错误:‘struct redisServer’没有名为‘stat_clients_type_memory’的成员
     server.stat_clients_type_memory[c->client_cron_last_memory_type] -=
           ^
server.c:1615:11: 错误:‘struct redisServer’没有名为‘stat_clients_type_memory’的成员
     server.stat_clients_type_memory[type] += mem;
           ^
In file included from server.h:63:0,
                 from server.c:30:
server.c: 在函数‘clientsCron’中:
server.c:1655:39: 错误:‘struct redisServer’没有名为‘clients’的成员
     int numclients = listLength(server.clients);
                                       ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:1666:28: 错误:‘struct redisServer’没有名为‘clients’的成员
     while(listLength(server.clients) && iterations--) {
                            ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:1673:36: 错误:‘struct redisServer’没有名为‘clients’的成员
         listRotateTailToHead(server.clients);
                                    ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:1674:32: 错误:‘struct redisServer’没有名为‘clients’的成员
         head = listFirst(server.clients);
                                ^
adlist.h:58:24: 附注:in definition of macro ‘listFirst’
 #define listFirst(l) ((l)->head)
                        ^
server.c: 在函数‘databasesCron’中:
server.c:1692:15: 错误:‘struct redisServer’没有名为‘active_expire_enabled’的成员
     if (server.active_expire_enabled) {
               ^
server.c:1716:34: 错误:‘struct redisServer’没有名为‘dbnum’的成员
         if (dbs_per_call > server.dbnum) dbs_per_call = server.dbnum;
                                  ^
server.c:1716:63: 错误:‘struct redisServer’没有名为‘dbnum’的成员
         if (dbs_per_call > server.dbnum) dbs_per_call = server.dbnum;
                                                               ^
server.c:1720:51: 错误:‘struct redisServer’没有名为‘dbnum’的成员
             tryResizeHashTables(resize_db % server.dbnum);
                                                   ^
server.c:1725:19: 错误:‘struct redisServer’没有名为‘activerehashing’的成员
         if (server.activerehashing) {
                   ^
server.c:1735:40: 错误:‘struct redisServer’没有名为‘dbnum’的成员
                     rehash_db %= server.dbnum;
                                        ^
server.c: 在函数‘updateCachedTime’中:
server.c:1753:11: 错误:‘struct redisServer’没有名为‘ustime’的成员
     server.ustime = ustime();
           ^
server.c:1754:11: 错误:‘struct redisServer’没有名为‘mstime’的成员
     server.mstime = server.ustime / 1000;
           ^
server.c:1754:27: 错误:‘struct redisServer’没有名为‘ustime’的成员
     server.mstime = server.ustime / 1000;
                           ^
server.c:1755:11: 错误:‘struct redisServer’没有名为‘unixtime’的成员
     server.unixtime = server.mstime / 1000;
           ^
server.c:1755:29: 错误:‘struct redisServer’没有名为‘mstime’的成员
     server.unixtime = server.mstime / 1000;
                             ^
server.c:1764:27: 错误:‘struct redisServer’没有名为‘unixtime’的成员
         time_t ut = server.unixtime;
                           ^
server.c:1766:15: 错误:‘struct redisServer’没有名为‘daylight_active’的成员
         server.daylight_active = tm.tm_isdst;
               ^
server.c: 在函数‘checkChildrenDone’中:
server.c:1779:15: 错误:‘struct redisServer’没有名为‘rdb_child_pid’的成员
     if (server.rdb_child_pid != -1 && server.rdb_pipe_conns)
               ^
server.c:1779:45: 错误:‘struct redisServer’没有名为‘rdb_pipe_conns’的成员
     if (server.rdb_child_pid != -1 && server.rdb_pipe_conns)
                                             ^
server.c:1802:29: 错误:‘struct redisServer’没有名为‘rdb_child_pid’的成员
                 (int) server.rdb_child_pid,
                             ^
server.c:1803:29: 错误:‘struct redisServer’没有名为‘aof_child_pid’的成员
                 (int) server.aof_child_pid,
                             ^
server.c:1804:29: 错误:‘struct redisServer’没有名为‘module_child_pid’的成员
                 (int) server.module_child_pid);
                             ^
server.c:1805:33: 错误:‘struct redisServer’没有名为‘rdb_child_pid’的成员
         } else if (pid == server.rdb_child_pid) {
                                 ^
server.c:1808:33: 错误:‘struct redisServer’没有名为‘aof_child_pid’的成员
         } else if (pid == server.aof_child_pid) {
                                 ^
server.c:1811:33: 错误:‘struct redisServer’没有名为‘module_child_pid’的成员
         } else if (pid == server.module_child_pid) {
                                 ^
server.c: 在函数‘serverCron’中:
server.c:1853:15: 错误:‘struct redisServer’没有名为‘watchdog_period’的成员
     if (server.watchdog_period) watchdogScheduleSignal(server.watchdog_period);
               ^
server.c:1853:62: 错误:‘struct redisServer’没有名为‘watchdog_period’的成员
     if (server.watchdog_period) watchdogScheduleSignal(server.watchdog_period);
                                                              ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:1862:33: 错误:‘struct redisServer’没有名为‘clients’的成员
         while (listLength(server.clients) / server.hz >
                                 ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
In file included from server.c:30:0:
server.h:437:71: 错误:‘struct redisServer’没有名为‘cronloops’的成员
 #define run_with_period(_ms_) if ((_ms_ <= 1000/server.hz) || !(server.cronloops%((_ms_)/(1000/server.hz))))
                                                                       ^
server.c:1873:5: 附注:in expansion of macro ‘run_with_period’
     run_with_period(100) {
     ^
server.c:1874:61: 错误:‘struct redisServer’没有名为‘stat_numcommands’的成员
         trackInstantaneousMetric(STATS_METRIC_COMMAND,server.stat_numcommands);
                                                             ^
server.c:1876:23: 错误:‘struct redisServer’没有名为‘stat_net_input_bytes’的成员
                 server.stat_net_input_bytes);
                       ^
server.c:1878:23: 错误:‘struct redisServer’没有名为‘stat_net_output_bytes’的成员
                 server.stat_net_output_bytes);
                       ^
server.c:1892:11: 错误:‘struct redisServer’没有名为‘lruclock’的成员
     server.lruclock = getLRUClock();
           ^
server.c:1895:39: 错误:‘struct redisServer’没有名为‘stat_peak_memory’的成员
     if (zmalloc_used_memory() > server.stat_peak_memory)
                                       ^
server.c:1896:15: 错误:‘struct redisServer’没有名为‘stat_peak_memory’的成员
         server.stat_peak_memory = zmalloc_used_memory();
               ^
In file included from server.c:30:0:
server.h:437:71: 错误:‘struct redisServer’没有名为‘cronloops’的成员
 #define run_with_period(_ms_) if ((_ms_ <= 1000/server.hz) || !(server.cronloops%((_ms_)/(1000/server.hz))))
                                                                       ^
server.c:1898:5: 附注:in expansion of macro ‘run_with_period’
     run_with_period(100) {
     ^
server.c:1902:15: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
         server.cron_malloc_stats.process_rss = zmalloc_get_rss();
               ^
server.c:1903:15: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
         server.cron_malloc_stats.zmalloc_used = zmalloc_used_memory();
               ^
server.c:1908:43: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
         zmalloc_get_allocator_info(&server.cron_malloc_stats.allocator_allocated,
                                           ^
server.c:1909:43: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
                                    &server.cron_malloc_stats.allocator_active,
                                           ^
server.c:1910:43: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
                                    &server.cron_malloc_stats.allocator_resident);
                                           ^
server.c:1913:20: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
         if (!server.cron_malloc_stats.allocator_resident) {
                    ^
server.c:1917:46: 错误:‘struct redisServer’没有名为‘lua’的成员
             size_t lua_memory = lua_gc(server.lua,LUA_GCCOUNT,0)*1024LL;
                                              ^
server.c:1918:19: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.allocator_resident = server.cron_malloc_stats.process_rss - lua_memory;
                   ^
server.c:1918:65: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.allocator_resident = server.cron_malloc_stats.process_rss - lua_memory;
                                                                 ^
server.c:1920:20: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
         if (!server.cron_malloc_stats.allocator_active)
                    ^
server.c:1921:19: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.allocator_active = server.cron_malloc_stats.allocator_resident;
                   ^
server.c:1921:63: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.allocator_active = server.cron_malloc_stats.allocator_resident;
                                                               ^
server.c:1922:20: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
         if (!server.cron_malloc_stats.allocator_allocated)
                    ^
server.c:1923:19: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.allocator_allocated = server.cron_malloc_stats.zmalloc_used;
                   ^
server.c:1923:66: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.allocator_allocated = server.cron_malloc_stats.zmalloc_used;
                                                                  ^
server.c:1928:15: 错误:‘struct redisServer’没有名为‘shutdown_asap’的成员
     if (server.shutdown_asap) {
               ^
server.c:1931:15: 错误:‘struct redisServer’没有名为‘shutdown_asap’的成员
         server.shutdown_asap = 0;
               ^
In file included from server.c:30:0:
server.h:437:71: 错误:‘struct redisServer’没有名为‘cronloops’的成员
 #define run_with_period(_ms_) if ((_ms_ <= 1000/server.hz) || !(server.cronloops%((_ms_)/(1000/server.hz))))
                                                                       ^
server.c:1935:5: 附注:in expansion of macro ‘run_with_period’
     run_with_period(5000) {
     ^
server.c:1936:31: 错误:‘struct redisServer’没有名为‘dbnum’的成员
         for (j = 0; j < server.dbnum; j++) {
                               ^
server.c:1950:16: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
     if (!server.sentinel_mode) {
                ^
In file included from server.c:30:0:
server.h:437:71: 错误:‘struct redisServer’没有名为‘cronloops’的成员
 #define run_with_period(_ms_) if ((_ms_ <= 1000/server.hz) || !(server.cronloops%((_ms_)/(1000/server.hz))))
                                                                       ^
server.c:1951:9: 附注:in expansion of macro ‘run_with_period’
         run_with_period(5000) {
         ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:1954:34: 错误:‘struct redisServer’没有名为‘clients’的成员
                 listLength(server.clients)-listLength(server.slaves),
                                  ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:1954:61: 错误:‘struct redisServer’没有名为‘slaves’的成员
                 listLength(server.clients)-listLength(server.slaves),
                                                             ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:1955:34: 错误:‘struct redisServer’没有名为‘slaves’的成员
                 listLength(server.slaves),
                                  ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:1969:15: 错误:‘struct redisServer’没有名为‘aof_rewrite_scheduled’的成员
         server.aof_rewrite_scheduled)
               ^
server.c:1981:31: 错误:‘struct redisServer’没有名为‘saveparamslen’的成员
         for (j = 0; j < server.saveparamslen; j++) {
                               ^
server.c:1982:42: 错误:‘struct redisServer’没有名为‘saveparams’的成员
             struct saveparam *sp = server.saveparams+j;
                                          ^
server.c:1988:23: 错误:‘struct redisServer’没有名为‘dirty’的成员
             if (server.dirty >= sp->changes &&
                       ^
server.c:1989:23: 错误:‘struct redisServer’没有名为‘unixtime’的成员
                 server.unixtime-server.lastsave > sp->seconds &&
                       ^
server.c:1989:39: 错误:‘struct redisServer’没有名为‘lastsave’的成员
                 server.unixtime-server.lastsave > sp->seconds &&
                                       ^
server.c:1990:24: 错误:‘struct redisServer’没有名为‘unixtime’的成员
                 (server.unixtime-server.lastbgsave_try >
                        ^
server.c:1990:40: 错误:‘struct redisServer’没有名为‘lastbgsave_try’的成员
                 (server.unixtime-server.lastbgsave_try >
                                        ^
server.c:1992:24: 错误:‘struct redisServer’没有名为‘lastbgsave_status’的成员
                  server.lastbgsave_status == C_OK))
                        ^
server.c:1998:41: 错误:‘struct redisServer’没有名为‘rdb_filename’的成员
                 rdbSaveBackground(server.rdb_filename,rsiptr);
                                         ^
server.c:2004:19: 错误:‘struct redisServer’没有名为‘aof_state’的成员
         if (server.aof_state == AOF_ON &&
                   ^
server.c:2006:19: 错误:‘struct redisServer’没有名为‘aof_rewrite_perc’的成员
             server.aof_rewrite_perc &&
                   ^
server.c:2007:19: 错误:‘struct redisServer’没有名为‘aof_current_size’的成员
             server.aof_current_size > server.aof_rewrite_min_size)
                   ^
server.c:2007:45: 错误:‘struct redisServer’没有名为‘aof_rewrite_min_size’的成员
             server.aof_current_size > server.aof_rewrite_min_size)
                                             ^
server.c:2009:36: 错误:‘struct redisServer’没有名为‘aof_rewrite_base_size’的成员
             long long base = server.aof_rewrite_base_size ?
                                    ^
server.c:2010:23: 错误:‘struct redisServer’没有名为‘aof_rewrite_base_size’的成员
                 server.aof_rewrite_base_size : 1;
                       ^
server.c:2011:39: 错误:‘struct redisServer’没有名为‘aof_current_size’的成员
             long long growth = (server.aof_current_size*100/base) - 100;
                                       ^
server.c:2012:33: 错误:‘struct redisServer’没有名为‘aof_rewrite_perc’的成员
             if (growth >= server.aof_rewrite_perc) {
                                 ^
server.c:2022:15: 错误:‘struct redisServer’没有名为‘aof_flush_postponed_start’的成员
     if (server.aof_flush_postponed_start) flushAppendOnlyFile(0);
               ^
In file included from server.c:30:0:
server.h:437:71: 错误:‘struct redisServer’没有名为‘cronloops’的成员
 #define run_with_period(_ms_) if ((_ms_ <= 1000/server.hz) || !(server.cronloops%((_ms_)/(1000/server.hz))))
                                                                       ^
server.c:2028:5: 附注:in expansion of macro ‘run_with_period’
     run_with_period(1000) {
     ^
server.c:2029:19: 错误:‘struct redisServer’没有名为‘aof_last_write_status’的成员
         if (server.aof_last_write_status == C_ERR)
                   ^
In file included from server.c:30:0:
server.h:437:71: 错误:‘struct redisServer’没有名为‘cronloops’的成员
 #define run_with_period(_ms_) if ((_ms_ <= 1000/server.hz) || !(server.cronloops%((_ms_)/(1000/server.hz))))
                                                                       ^
server.c:2038:5: 附注:in expansion of macro ‘run_with_period’
     run_with_period(1000) replicationCron();
     ^
server.h:437:71: 错误:‘struct redisServer’没有名为‘cronloops’的成员
 #define run_with_period(_ms_) if ((_ms_ <= 1000/server.hz) || !(server.cronloops%((_ms_)/(1000/server.hz))))
                                                                       ^
server.c:2041:5: 附注:in expansion of macro ‘run_with_period’
     run_with_period(100) {
     ^
server.c:2042:19: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
         if (server.cluster_enabled) clusterCron();
                   ^
server.c:2046:15: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
     if (server.sentinel_mode) sentinelTimer();
               ^
In file included from server.c:30:0:
server.h:437:71: 错误:‘struct redisServer’没有名为‘cronloops’的成员
 #define run_with_period(_ms_) if ((_ms_ <= 1000/server.hz) || !(server.cronloops%((_ms_)/(1000/server.hz))))
                                                                       ^
server.c:2049:5: 附注:in expansion of macro ‘run_with_period’
     run_with_period(1000) {
     ^
server.c:2060:15: 错误:‘struct redisServer’没有名为‘tracking_clients’的成员
     if (server.tracking_clients) trackingLimitUsedSlots();
               ^
server.c:2070:15: 错误:‘struct redisServer’没有名为‘rdb_bgsave_scheduled’的成员
         server.rdb_bgsave_scheduled &&
               ^
server.c:2071:16: 错误:‘struct redisServer’没有名为‘unixtime’的成员
         (server.unixtime-server.lastbgsave_try > CONFIG_BGSAVE_RETRY_DELAY ||
                ^
server.c:2071:32: 错误:‘struct redisServer’没有名为‘lastbgsave_try’的成员
         (server.unixtime-server.lastbgsave_try > CONFIG_BGSAVE_RETRY_DELAY ||
                                ^
server.c:2072:16: 错误:‘struct redisServer’没有名为‘lastbgsave_status’的成员
          server.lastbgsave_status == C_OK))
                ^
server.c:2076:37: 错误:‘struct redisServer’没有名为‘rdb_filename’的成员
         if (rdbSaveBackground(server.rdb_filename,rsiptr) == C_OK)
                                     ^
server.c:2077:19: 错误:‘struct redisServer’没有名为‘rdb_bgsave_scheduled’的成员
             server.rdb_bgsave_scheduled = 0;
                   ^
server.c:2086:11: 错误:‘struct redisServer’没有名为‘cronloops’的成员
     server.cronloops++;
           ^
server.c: 在函数‘beforeSleep’中:
server.c:2120:15: 错误:‘struct redisServer’没有名为‘events_processed_while_blocked’的成员
         server.events_processed_while_blocked += processed;
               ^
server.c:2140:15: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
     if (server.cluster_enabled) clusterBeforeSleep();
               ^
server.c:2144:15: 错误:‘struct redisServer’没有名为‘active_expire_enabled’的成员
     if (server.active_expire_enabled && server.masterhost == NULL)
               ^
server.c:2144:47: 错误:‘struct redisServer’没有名为‘masterhost’的成员
     if (server.active_expire_enabled && server.masterhost == NULL)
                                               ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:2149:26: 错误:‘struct redisServer’没有名为‘clients_waiting_acks’的成员
     if (listLength(server.clients_waiting_acks))
                          ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:2157:26: 错误:‘struct redisServer’没有名为‘unblocked_clients’的成员
     if (listLength(server.unblocked_clients))
                          ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:2165:15: 错误:‘struct redisServer’没有名为‘get_ack_from_slaves’的成员
     if (server.get_ack_from_slaves) {
               ^
server.c:2171:37: 错误:‘struct redisServer’没有名为‘slaves’的成员
         replicationFeedSlaves(server.slaves, server.slaveseldb, argv, 3);
                                     ^
server.c:2171:52: 错误:‘struct redisServer’没有名为‘slaveseldb’的成员
         replicationFeedSlaves(server.slaves, server.slaveseldb, argv, 3);
                                                    ^
server.c:2175:15: 错误:‘struct redisServer’没有名为‘get_ack_from_slaves’的成员
         server.get_ack_from_slaves = 0;
               ^
server.c: 在函数‘initServerConfig’中:
server.c:2329:29: 错误:‘struct redisServer’没有名为‘runid’的成员
     getRandomHexChars(server.runid,CONFIG_RUN_ID_SIZE);
                             ^
server.c:2330:11: 错误:‘struct redisServer’没有名为‘runid’的成员
     server.runid[CONFIG_RUN_ID_SIZE] = '\0';
           ^
server.c:2337:11: 错误:‘struct redisServer’没有名为‘timezone’的成员
     server.timezone = getTimeZone(); /* Initialized by tzset(). */
           ^
server.c:2340:11: 错误:‘struct redisServer’没有名为‘arch_bits’的成员
     server.arch_bits = (sizeof(long) == 8) ? 64 : 32;
           ^
server.c:2341:11: 错误:‘struct redisServer’没有名为‘bindaddr_count’的成员
     server.bindaddr_count = 0;
           ^
server.c:2342:11: 错误:‘struct redisServer’没有名为‘unixsocketperm’的成员
     server.unixsocketperm = CONFIG_DEFAULT_UNIX_SOCKET_PERM;
           ^
server.c:2343:11: 错误:‘struct redisServer’没有名为‘ipfd_count’的成员
     server.ipfd_count = 0;
           ^
server.c:2344:11: 错误:‘struct redisServer’没有名为‘tlsfd_count’的成员
     server.tlsfd_count = 0;
           ^
server.c:2345:11: 错误:‘struct redisServer’没有名为‘sofd’的成员
     server.sofd = -1;
           ^
server.c:2346:11: 错误:‘struct redisServer’没有名为‘active_expire_enabled’的成员
     server.active_expire_enabled = 1;
           ^
server.c:2347:11: 错误:‘struct redisServer’没有名为‘client_max_querybuf_len’的成员
     server.client_max_querybuf_len = PROTO_MAX_QUERYBUF_LEN;
           ^
server.c:2348:11: 错误:‘struct redisServer’没有名为‘saveparams’的成员
     server.saveparams = NULL;
           ^
server.c:2349:11: 错误:‘struct redisServer’没有名为‘loading’的成员
     server.loading = 0;
           ^
server.c:2350:11: 错误:‘struct redisServer’没有名为‘logfile’的成员
     server.logfile = zstrdup(CONFIG_DEFAULT_LOGFILE);
           ^
server.c:2351:11: 错误:‘struct redisServer’没有名为‘aof_state’的成员
     server.aof_state = AOF_OFF;
           ^
server.c:2352:11: 错误:‘struct redisServer’没有名为‘aof_rewrite_base_size’的成员
     server.aof_rewrite_base_size = 0;
           ^
server.c:2353:11: 错误:‘struct redisServer’没有名为‘aof_rewrite_scheduled’的成员
     server.aof_rewrite_scheduled = 0;
           ^
server.c:2354:11: 错误:‘struct redisServer’没有名为‘aof_flush_sleep’的成员
     server.aof_flush_sleep = 0;
           ^
server.c:2355:11: 错误:‘struct redisServer’没有名为‘aof_last_fsync’的成员
     server.aof_last_fsync = time(NULL);
           ^
server.c:2356:11: 错误:‘struct redisServer’没有名为‘aof_rewrite_time_last’的成员
     server.aof_rewrite_time_last = -1;
           ^
server.c:2357:11: 错误:‘struct redisServer’没有名为‘aof_rewrite_time_start’的成员
     server.aof_rewrite_time_start = -1;
           ^
server.c:2358:11: 错误:‘struct redisServer’没有名为‘aof_lastbgrewrite_status’的成员
     server.aof_lastbgrewrite_status = C_OK;
           ^
server.c:2359:11: 错误:‘struct redisServer’没有名为‘aof_delayed_fsync’的成员
     server.aof_delayed_fsync = 0;
           ^
server.c:2360:11: 错误:‘struct redisServer’没有名为‘aof_fd’的成员
     server.aof_fd = -1;
           ^
server.c:2361:11: 错误:‘struct redisServer’没有名为‘aof_selected_db’的成员
     server.aof_selected_db = -1; /* Make sure the first time will not match */
           ^
server.c:2362:11: 错误:‘struct redisServer’没有名为‘aof_flush_postponed_start’的成员
     server.aof_flush_postponed_start = 0;
           ^
server.c:2363:11: 错误:‘struct redisServer’没有名为‘pidfile’的成员
     server.pidfile = NULL;
           ^
server.c:2364:11: 错误:‘struct redisServer’没有名为‘active_defrag_running’的成员
     server.active_defrag_running = 0;
           ^
server.c:2365:11: 错误:‘struct redisServer’没有名为‘notify_keyspace_events’的成员
     server.notify_keyspace_events = 0;
           ^
server.c:2366:11: 错误:‘struct redisServer’没有名为‘blocked_clients’的成员
     server.blocked_clients = 0;
           ^
server.c:2367:18: 错误:‘struct redisServer’没有名为‘blocked_clients_by_type’的成员
     memset(server.blocked_clients_by_type,0,
                  ^
server.c:2368:25: 错误:‘struct redisServer’没有名为‘blocked_clients_by_type’的成员
            sizeof(server.blocked_clients_by_type));
                         ^
server.c:2369:11: 错误:‘struct redisServer’没有名为‘shutdown_asap’的成员
     server.shutdown_asap = 0;
           ^
server.c:2370:11: 错误:‘struct redisServer’没有名为‘cluster_configfile’的成员
     server.cluster_configfile = zstrdup(CONFIG_DEFAULT_CLUSTER_CONFIG_FILE);
           ^
server.c:2371:11: 错误:‘struct redisServer’没有名为‘cluster_module_flags’的成员
     server.cluster_module_flags = CLUSTER_MODULE_FLAG_NONE;
           ^
server.c:2372:11: 错误:‘struct redisServer’没有名为‘migrate_cached_sockets’的成员
     server.migrate_cached_sockets = dictCreate(&migrateCacheDictType,NULL);
           ^
server.c:2373:11: 错误:‘struct redisServer’没有名为‘next_client_id’的成员
     server.next_client_id = 1; /* Client IDs, start from 1 .*/
           ^
server.c:2374:11: 错误:‘struct redisServer’没有名为‘loading_process_events_interval_bytes’的成员
     server.loading_process_events_interval_bytes = (1024*1024*2);
           ^
server.c:2376:11: 错误:‘struct redisServer’没有名为‘lruclock’的成员
     server.lruclock = getLRUClock();
           ^
server.c:2384:11: 错误:‘struct redisServer’没有名为‘masterauth’的成员
     server.masterauth = NULL;
           ^
server.c:2385:11: 错误:‘struct redisServer’没有名为‘masterhost’的成员
     server.masterhost = NULL;
           ^
server.c:2386:11: 错误:‘struct redisServer’没有名为‘masterport’的成员
     server.masterport = 6379;
           ^
server.c:2387:11: 错误:‘struct redisServer’没有名为‘master’的成员
     server.master = NULL;
           ^
server.c:2388:11: 错误:‘struct redisServer’没有名为‘cached_master’的成员
     server.cached_master = NULL;
           ^
server.c:2389:11: 错误:‘struct redisServer’没有名为‘master_initial_offset’的成员
     server.master_initial_offset = -1;
           ^
server.c:2390:11: 错误:‘struct redisServer’没有名为‘repl_state’的成员
     server.repl_state = REPL_STATE_NONE;
           ^
server.c:2391:11: 错误:‘struct redisServer’没有名为‘repl_transfer_tmpfile’的成员
     server.repl_transfer_tmpfile = NULL;
           ^
server.c:2392:11: 错误:‘struct redisServer’没有名为‘repl_transfer_fd’的成员
     server.repl_transfer_fd = -1;
           ^
server.c:2393:11: 错误:‘struct redisServer’没有名为‘repl_transfer_s’的成员
     server.repl_transfer_s = NULL;
           ^
server.c:2394:11: 错误:‘struct redisServer’没有名为‘repl_syncio_timeout’的成员
     server.repl_syncio_timeout = CONFIG_REPL_SYNCIO_TIMEOUT;
           ^
server.c:2395:11: 错误:‘struct redisServer’没有名为‘repl_down_since’的成员
     server.repl_down_since = 0; /* Never connected, repl is down since EVER. */
           ^
server.c:2396:11: 错误:‘struct redisServer’没有名为‘master_repl_offset’的成员
     server.master_repl_offset = 0;
           ^
server.c:2399:11: 错误:‘struct redisServer’没有名为‘repl_backlog’的成员
     server.repl_backlog = NULL;
           ^
server.c:2400:11: 错误:‘struct redisServer’没有名为‘repl_backlog_histlen’的成员
     server.repl_backlog_histlen = 0;
           ^
server.c:2401:11: 错误:‘struct redisServer’没有名为‘repl_backlog_idx’的成员
     server.repl_backlog_idx = 0;
           ^
server.c:2402:11: 错误:‘struct redisServer’没有名为‘repl_backlog_off’的成员
     server.repl_backlog_off = 0;
           ^
server.c:2403:11: 错误:‘struct redisServer’没有名为‘repl_no_slaves_since’的成员
     server.repl_no_slaves_since = time(NULL);
           ^
server.c:2407:15: 错误:‘struct redisServer’没有名为‘client_obuf_limits’的成员
         server.client_obuf_limits[j] = clientBufferLimitsDefaults[j];
               ^
server.c:2421:11: 错误:‘struct redisServer’没有名为‘delCommand’的成员
     server.delCommand = lookupCommandByCString("del");
           ^
server.c:2422:11: 错误:‘struct redisServer’没有名为‘multiCommand’的成员
     server.multiCommand = lookupCommandByCString("multi");
           ^
server.c:2423:11: 错误:‘struct redisServer’没有名为‘lpushCommand’的成员
     server.lpushCommand = lookupCommandByCString("lpush");
           ^
server.c:2424:11: 错误:‘struct redisServer’没有名为‘lpopCommand’的成员
     server.lpopCommand = lookupCommandByCString("lpop");
           ^
server.c:2425:11: 错误:‘struct redisServer’没有名为‘rpopCommand’的成员
     server.rpopCommand = lookupCommandByCString("rpop");
           ^
server.c:2426:11: 错误:‘struct redisServer’没有名为‘zpopminCommand’的成员
     server.zpopminCommand = lookupCommandByCString("zpopmin");
           ^
server.c:2427:11: 错误:‘struct redisServer’没有名为‘zpopmaxCommand’的成员
     server.zpopmaxCommand = lookupCommandByCString("zpopmax");
           ^
server.c:2428:11: 错误:‘struct redisServer’没有名为‘sremCommand’的成员
     server.sremCommand = lookupCommandByCString("srem");
           ^
server.c:2429:11: 错误:‘struct redisServer’没有名为‘execCommand’的成员
     server.execCommand = lookupCommandByCString("exec");
           ^
server.c:2430:11: 错误:‘struct redisServer’没有名为‘expireCommand’的成员
     server.expireCommand = lookupCommandByCString("expire");
           ^
server.c:2431:11: 错误:‘struct redisServer’没有名为‘pexpireCommand’的成员
     server.pexpireCommand = lookupCommandByCString("pexpire");
           ^
server.c:2432:11: 错误:‘struct redisServer’没有名为‘xclaimCommand’的成员
     server.xclaimCommand = lookupCommandByCString("xclaim");
           ^
server.c:2433:11: 错误:‘struct redisServer’没有名为‘xgroupCommand’的成员
     server.xgroupCommand = lookupCommandByCString("xgroup");
           ^
server.c:2434:11: 错误:‘struct redisServer’没有名为‘rpoplpushCommand’的成员
     server.rpoplpushCommand = lookupCommandByCString("rpoplpush");
           ^
server.c:2437:11: 错误:‘struct redisServer’没有名为‘assert_failed’的成员
     server.assert_failed = "<no assertion failed>";
           ^
server.c:2438:11: 错误:‘struct redisServer’没有名为‘assert_file’的成员
     server.assert_file = "<no file>";
           ^
server.c:2439:11: 错误:‘struct redisServer’没有名为‘assert_line’的成员
     server.assert_line = 0;
           ^
server.c:2440:11: 错误:‘struct redisServer’没有名为‘bug_report_start’的成员
     server.bug_report_start = 0;
           ^
server.c:2441:11: 错误:‘struct redisServer’没有名为‘watchdog_period’的成员
     server.watchdog_period = 0;
           ^
server.c:2447:11: 错误:‘struct redisServer’没有名为‘lua_always_replicate_commands’的成员
     server.lua_always_replicate_commands = 1;
           ^
server.c: 在函数‘restartServer’中:
server.c:2500:32: 错误:‘struct redisServer’没有名为‘maxclients’的成员
     for (j = 3; j < (int)server.maxclients + 1024; j++) {
                                ^
server.c: 在函数‘adjustOpenFilesLimit’中:
server.c:2527:29: 错误:‘struct redisServer’没有名为‘maxclients’的成员
     rlim_t maxfiles = server.maxclients+CONFIG_MIN_RESERVED_FDS;
                             ^
server.c:2533:15: 错误:‘struct redisServer’没有名为‘maxclients’的成员
         server.maxclients = 1024-CONFIG_MIN_RESERVED_FDS;
               ^
server.c:2565:53: 错误:‘struct redisServer’没有名为‘maxclients’的成员
                 unsigned int old_maxclients = server.maxclients;
                                                     ^
server.c:2566:23: 错误:‘struct redisServer’没有名为‘maxclients’的成员
                 server.maxclients = bestlimit-CONFIG_MIN_RESERVED_FDS;
                       ^
server.c:2590:59: 错误:‘struct redisServer’没有名为‘maxclients’的成员
                     (unsigned long long) bestlimit, server.maxclients);
                                                           ^
server.c: 在函数‘checkTcpBacklogSettings’中:
server.c:2610:48: 错误:‘struct redisServer’没有名为‘tcp_backlog’的成员
         if (somaxconn > 0 && somaxconn < server.tcp_backlog) {
                                                ^
server.c:2611:171: 错误:‘struct redisServer’没有名为‘tcp_backlog’的成员
             serverLog(LL_WARNING,"WARNING: The TCP backlog setting of %d cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of %d.", server.tcp_backlog, somaxconn);
                                                                                                                                                                           ^
server.c: 在函数‘listenToPort’中:
server.c:2641:15: 错误:‘struct redisServer’没有名为‘bindaddr_count’的成员
     if (server.bindaddr_count == 0) server.bindaddr[0] = NULL;
               ^
server.c:2641:43: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
     if (server.bindaddr_count == 0) server.bindaddr[0] = NULL;
                                           ^
server.c:2642:27: 错误:‘struct redisServer’没有名为‘bindaddr_count’的成员
     for (j = 0; j < server.bindaddr_count || j == 0; j++) {
                           ^
server.c:2643:19: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
         if (server.bindaddr[j] == NULL) {
                   ^
server.c:2647:48: 错误:‘struct redisServer’没有名为‘neterr’的成员
             fds[*count] = anetTcp6Server(server.neterr,port,NULL,
                                                ^
server.c:2648:23: 错误:‘struct redisServer’没有名为‘tcp_backlog’的成员
                 server.tcp_backlog);
                       ^
server.c:2659:51: 错误:‘struct redisServer’没有名为‘neterr’的成员
                 fds[*count] = anetTcpServer(server.neterr,port,NULL,
                                                   ^
server.c:2660:27: 错误:‘struct redisServer’没有名为‘tcp_backlog’的成员
                     server.tcp_backlog);
                           ^
In file included from /usr/include/string.h:633:0,
                 from server.h:40,
                 from server.c:30:
server.c:2673:33: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
         } else if (strchr(server.bindaddr[j],':')) {
                                 ^
server.c:2673:33: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
         } else if (strchr(server.bindaddr[j],':')) {
                                 ^
server.c:2673:33: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
         } else if (strchr(server.bindaddr[j],':')) {
                                 ^
server.c:2675:48: 错误:‘struct redisServer’没有名为‘neterr’的成员
             fds[*count] = anetTcp6Server(server.neterr,port,server.bindaddr[j],
                                                ^
server.c:2675:67: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
             fds[*count] = anetTcp6Server(server.neterr,port,server.bindaddr[j],
                                                                   ^
server.c:2676:23: 错误:‘struct redisServer’没有名为‘tcp_backlog’的成员
                 server.tcp_backlog);
                       ^
server.c:2679:47: 错误:‘struct redisServer’没有名为‘neterr’的成员
             fds[*count] = anetTcpServer(server.neterr,port,server.bindaddr[j],
                                               ^
server.c:2679:66: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
             fds[*count] = anetTcpServer(server.neterr,port,server.bindaddr[j],
                                                                  ^
server.c:2680:23: 错误:‘struct redisServer’没有名为‘tcp_backlog’的成员
                 server.tcp_backlog);
                       ^
server.c:2685:23: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
                 server.bindaddr[j] ? server.bindaddr[j] : "*",
                       ^
server.c:2685:44: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
                 server.bindaddr[j] ? server.bindaddr[j] : "*",
                                            ^
server.c:2686:29: 错误:‘struct redisServer’没有名为‘neterr’的成员
                 port, server.neterr);
                             ^
server.c: 在函数‘resetServerStats’中:
server.c:2705:11: 错误:‘struct redisServer’没有名为‘stat_numcommands’的成员
     server.stat_numcommands = 0;
           ^
server.c:2706:11: 错误:‘struct redisServer’没有名为‘stat_numconnections’的成员
     server.stat_numconnections = 0;
           ^
server.c:2707:11: 错误:‘struct redisServer’没有名为‘stat_expiredkeys’的成员
     server.stat_expiredkeys = 0;
           ^
server.c:2708:11: 错误:‘struct redisServer’没有名为‘stat_expired_stale_perc’的成员
     server.stat_expired_stale_perc = 0;
           ^
server.c:2709:11: 错误:‘struct redisServer’没有名为‘stat_expired_time_cap_reached_count’的成员
     server.stat_expired_time_cap_reached_count = 0;
           ^
server.c:2710:11: 错误:‘struct redisServer’没有名为‘stat_expire_cycle_time_used’的成员
     server.stat_expire_cycle_time_used = 0;
           ^
server.c:2711:11: 错误:‘struct redisServer’没有名为‘stat_evictedkeys’的成员
     server.stat_evictedkeys = 0;
           ^
server.c:2712:11: 错误:‘struct redisServer’没有名为‘stat_keyspace_misses’的成员
     server.stat_keyspace_misses = 0;
           ^
server.c:2713:11: 错误:‘struct redisServer’没有名为‘stat_keyspace_hits’的成员
     server.stat_keyspace_hits = 0;
           ^
server.c:2714:11: 错误:‘struct redisServer’没有名为‘stat_active_defrag_hits’的成员
     server.stat_active_defrag_hits = 0;
           ^
server.c:2715:11: 错误:‘struct redisServer’没有名为‘stat_active_defrag_misses’的成员
     server.stat_active_defrag_misses = 0;
           ^
server.c:2716:11: 错误:‘struct redisServer’没有名为‘stat_active_defrag_key_hits’的成员
     server.stat_active_defrag_key_hits = 0;
           ^
server.c:2717:11: 错误:‘struct redisServer’没有名为‘stat_active_defrag_key_misses’的成员
     server.stat_active_defrag_key_misses = 0;
           ^
server.c:2718:11: 错误:‘struct redisServer’没有名为‘stat_active_defrag_scanned’的成员
     server.stat_active_defrag_scanned = 0;
           ^
server.c:2719:11: 错误:‘struct redisServer’没有名为‘stat_fork_time’的成员
     server.stat_fork_time = 0;
           ^
server.c:2720:11: 错误:‘struct redisServer’没有名为‘stat_fork_rate’的成员
     server.stat_fork_rate = 0;
           ^
server.c:2721:11: 错误:‘struct redisServer’没有名为‘stat_rejected_conn’的成员
     server.stat_rejected_conn = 0;
           ^
server.c:2722:11: 错误:‘struct redisServer’没有名为‘stat_sync_full’的成员
     server.stat_sync_full = 0;
           ^
server.c:2723:11: 错误:‘struct redisServer’没有名为‘stat_sync_partial_ok’的成员
     server.stat_sync_partial_ok = 0;
           ^
server.c:2724:11: 错误:‘struct redisServer’没有名为‘stat_sync_partial_err’的成员
     server.stat_sync_partial_err = 0;
           ^
server.c:2726:15: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
         server.inst_metric[j].idx = 0;
               ^
server.c:2727:15: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
         server.inst_metric[j].last_sample_time = mstime();
               ^
server.c:2728:15: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
         server.inst_metric[j].last_sample_count = 0;
               ^
server.c:2729:22: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
         memset(server.inst_metric[j].samples,0,
                      ^
server.c:2730:26: 错误:‘struct redisServer’没有名为‘inst_metric’的成员
             sizeof(server.inst_metric[j].samples));
                          ^
server.c:2732:11: 错误:‘struct redisServer’没有名为‘stat_net_input_bytes’的成员
     server.stat_net_input_bytes = 0;
           ^
server.c:2733:11: 错误:‘struct redisServer’没有名为‘stat_net_output_bytes’的成员
     server.stat_net_output_bytes = 0;
           ^
server.c:2734:11: 错误:‘struct redisServer’没有名为‘stat_unexpected_error_replies’的成员
     server.stat_unexpected_error_replies = 0;
           ^
server.c:2735:11: 错误:‘struct redisServer’没有名为‘aof_delayed_fsync’的成员
     server.aof_delayed_fsync = 0;
           ^
server.c: 在函数‘initServer’中:
server.c:2745:15: 错误:‘struct redisServer’没有名为‘syslog_enabled’的成员
     if (server.syslog_enabled) {
               ^
server.c:2746:23: 错误:‘struct redisServer’没有名为‘syslog_ident’的成员
         openlog(server.syslog_ident, LOG_PID | LOG_NDELAY | LOG_NOWAIT,
                       ^
server.c:2747:19: 错误:‘struct redisServer’没有名为‘syslog_facility’的成员
             server.syslog_facility);
                   ^
server.c:2751:11: 错误:‘struct redisServer’没有名为‘aof_state’的成员
     server.aof_state = server.aof_enabled ? AOF_ON : AOF_OFF;
           ^
server.c:2751:30: 错误:‘struct redisServer’没有名为‘aof_enabled’的成员
     server.aof_state = server.aof_enabled ? AOF_ON : AOF_OFF;
                              ^
server.c:2754:11: 错误:‘struct redisServer’没有名为‘current_client’的成员
     server.current_client = NULL;
           ^
server.c:2755:11: 错误:‘struct redisServer’没有名为‘fixed_time_expire’的成员
     server.fixed_time_expire = 0;
           ^
server.c:2756:11: 错误:‘struct redisServer’没有名为‘clients’的成员
     server.clients = listCreate();
           ^
server.c:2757:11: 错误:‘struct redisServer’没有名为‘clients_index’的成员
     server.clients_index = raxNew();
           ^
server.c:2758:11: 错误:‘struct redisServer’没有名为‘clients_to_close’的成员
     server.clients_to_close = listCreate();
           ^
server.c:2759:11: 错误:‘struct redisServer’没有名为‘slaves’的成员
     server.slaves = listCreate();
           ^
server.c:2760:11: 错误:‘struct redisServer’没有名为‘monitors’的成员
     server.monitors = listCreate();
           ^
server.c:2761:11: 错误:‘struct redisServer’没有名为‘clients_pending_write’的成员
     server.clients_pending_write = listCreate();
           ^
server.c:2762:11: 错误:‘struct redisServer’没有名为‘clients_pending_read’的成员
     server.clients_pending_read = listCreate();
           ^
server.c:2763:11: 错误:‘struct redisServer’没有名为‘clients_timeout_table’的成员
     server.clients_timeout_table = raxNew();
           ^
server.c:2764:11: 错误:‘struct redisServer’没有名为‘slaveseldb’的成员
     server.slaveseldb = -1; /* Force to emit the first SELECT command. */
           ^
server.c:2765:11: 错误:‘struct redisServer’没有名为‘unblocked_clients’的成员
     server.unblocked_clients = listCreate();
           ^
server.c:2766:11: 错误:‘struct redisServer’没有名为‘ready_keys’的成员
     server.ready_keys = listCreate();
           ^
server.c:2767:11: 错误:‘struct redisServer’没有名为‘clients_waiting_acks’的成员
     server.clients_waiting_acks = listCreate();
           ^
server.c:2768:11: 错误:‘struct redisServer’没有名为‘get_ack_from_slaves’的成员
     server.get_ack_from_slaves = 0;
           ^
server.c:2769:11: 错误:‘struct redisServer’没有名为‘clients_paused’的成员
     server.clients_paused = 0;
           ^
server.c:2770:11: 错误:‘struct redisServer’没有名为‘events_processed_while_blocked’的成员
     server.events_processed_while_blocked = 0;
           ^
server.c:2771:11: 错误:‘struct redisServer’没有名为‘system_memory_size’的成员
     server.system_memory_size = zmalloc_get_memory_size();
           ^
server.c:2773:15: 错误:‘struct redisServer’没有名为‘tls_port’的成员
     if (server.tls_port && tlsConfigure(&server.tls_ctx_config) == C_ERR) {
               ^
server.c:2773:48: 错误:‘struct redisServer’没有名为‘tls_ctx_config’的成员
     if (server.tls_port && tlsConfigure(&server.tls_ctx_config) == C_ERR) {
                                                ^
server.c:2780:41: 错误:‘struct redisServer’没有名为‘maxclients’的成员
     server.el = aeCreateEventLoop(server.maxclients+CONFIG_FDSET_INCR);
                                         ^
server.c:2787:47: 错误:‘struct redisServer’没有名为‘dbnum’的成员
     server.db = zmalloc(sizeof(redisDb)*server.dbnum);
                                               ^
server.c:2790:15: 错误:‘struct redisServer’没有名为‘port’的成员
     if (server.port != 0 &&
               ^
server.c:2791:28: 错误:‘struct redisServer’没有名为‘port’的成员
         listenToPort(server.port,server.ipfd,&server.ipfd_count) == C_ERR)
                            ^
server.c:2791:40: 错误:‘struct redisServer’没有名为‘ipfd’的成员
         listenToPort(server.port,server.ipfd,&server.ipfd_count) == C_ERR)
                                        ^
server.c:2791:53: 错误:‘struct redisServer’没有名为‘ipfd_count’的成员
         listenToPort(server.port,server.ipfd,&server.ipfd_count) == C_ERR)
                                                     ^
server.c:2793:15: 错误:‘struct redisServer’没有名为‘tls_port’的成员
     if (server.tls_port != 0 &&
               ^
server.c:2794:28: 错误:‘struct redisServer’没有名为‘tls_port’的成员
         listenToPort(server.tls_port,server.tlsfd,&server.tlsfd_count) == C_ERR)
                            ^
server.c:2794:44: 错误:‘struct redisServer’没有名为‘tlsfd’的成员
         listenToPort(server.tls_port,server.tlsfd,&server.tlsfd_count) == C_ERR)
                                            ^
server.c:2794:58: 错误:‘struct redisServer’没有名为‘tlsfd_count’的成员
         listenToPort(server.tls_port,server.tlsfd,&server.tlsfd_count) == C_ERR)
                                                          ^
server.c:2798:15: 错误:‘struct redisServer’没有名为‘unixsocket’的成员
     if (server.unixsocket != NULL) {
               ^
server.c:2799:22: 错误:‘struct redisServer’没有名为‘unixsocket’的成员
         unlink(server.unixsocket); /* don't care if this fails */
                      ^
server.c:2800:15: 错误:‘struct redisServer’没有名为‘sofd’的成员
         server.sofd = anetUnixServer(server.neterr,server.unixsocket,
               ^
server.c:2800:44: 错误:‘struct redisServer’没有名为‘neterr’的成员
         server.sofd = anetUnixServer(server.neterr,server.unixsocket,
                                            ^
server.c:2800:58: 错误:‘struct redisServer’没有名为‘unixsocket’的成员
         server.sofd = anetUnixServer(server.neterr,server.unixsocket,
                                                          ^
server.c:2801:19: 错误:‘struct redisServer’没有名为‘unixsocketperm’的成员
             server.unixsocketperm, server.tcp_backlog);
                   ^
server.c:2801:42: 错误:‘struct redisServer’没有名为‘tcp_backlog’的成员
             server.unixsocketperm, server.tcp_backlog);
                                          ^
server.c:2802:19: 错误:‘struct redisServer’没有名为‘sofd’的成员
         if (server.sofd == ANET_ERR) {
                   ^
server.c:2803:68: 错误:‘struct redisServer’没有名为‘neterr’的成员
             serverLog(LL_WARNING, "Opening Unix socket: %s", server.neterr);
                                                                    ^
server.c:2806:33: 错误:‘struct redisServer’没有名为‘sofd’的成员
         anetNonBlock(NULL,server.sofd);
                                 ^
server.c:2810:15: 错误:‘struct redisServer’没有名为‘ipfd_count’的成员
     if (server.ipfd_count == 0 && server.tlsfd_count == 0 && server.sofd < 0) {
               ^
server.c:2810:41: 错误:‘struct redisServer’没有名为‘tlsfd_count’的成员
     if (server.ipfd_count == 0 && server.tlsfd_count == 0 && server.sofd < 0) {
                                         ^
server.c:2810:68: 错误:‘struct redisServer’没有名为‘sofd’的成员
     if (server.ipfd_count == 0 && server.tlsfd_count == 0 && server.sofd < 0) {
                                                                    ^
server.c:2816:27: 错误:‘struct redisServer’没有名为‘dbnum’的成员
     for (j = 0; j < server.dbnum; j++) {
                           ^
server.c:2829:11: 错误:‘struct redisServer’没有名为‘pubsub_channels’的成员
     server.pubsub_channels = dictCreate(&keylistDictType,NULL);
           ^
server.c:2830:11: 错误:‘struct redisServer’没有名为‘pubsub_patterns’的成员
     server.pubsub_patterns = listCreate();
           ^
server.c:2831:11: 错误:‘struct redisServer’没有名为‘pubsub_patterns_dict’的成员
     server.pubsub_patterns_dict = dictCreate(&keylistDictType,NULL);
           ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:2832:29: 错误:‘struct redisServer’没有名为‘pubsub_patterns’的成员
     listSetFreeMethod(server.pubsub_patterns,freePubsubPattern);
                             ^
adlist.h:65:34: 附注:in definition of macro ‘listSetFreeMethod’
 #define listSetFreeMethod(l,m) ((l)->free = (m))
                                  ^
server.c:2833:30: 错误:‘struct redisServer’没有名为‘pubsub_patterns’的成员
     listSetMatchMethod(server.pubsub_patterns,listMatchPubsubPattern);
                              ^
adlist.h:66:35: 附注:in definition of macro ‘listSetMatchMethod’
 #define listSetMatchMethod(l,m) ((l)->match = (m))
                                   ^
server.c:2834:11: 错误:‘struct redisServer’没有名为‘cronloops’的成员
     server.cronloops = 0;
           ^
server.c:2835:11: 错误:‘struct redisServer’没有名为‘rdb_child_pid’的成员
     server.rdb_child_pid = -1;
           ^
server.c:2836:11: 错误:‘struct redisServer’没有名为‘aof_child_pid’的成员
     server.aof_child_pid = -1;
           ^
server.c:2837:11: 错误:‘struct redisServer’没有名为‘module_child_pid’的成员
     server.module_child_pid = -1;
           ^
server.c:2838:11: 错误:‘struct redisServer’没有名为‘rdb_child_type’的成员
     server.rdb_child_type = RDB_CHILD_TYPE_NONE;
           ^
server.c:2839:11: 错误:‘struct redisServer’没有名为‘rdb_pipe_conns’的成员
     server.rdb_pipe_conns = NULL;
           ^
server.c:2840:11: 错误:‘struct redisServer’没有名为‘rdb_pipe_numconns’的成员
     server.rdb_pipe_numconns = 0;
           ^
server.c:2841:11: 错误:‘struct redisServer’没有名为‘rdb_pipe_numconns_writing’的成员
     server.rdb_pipe_numconns_writing = 0;
           ^
server.c:2842:11: 错误:‘struct redisServer’没有名为‘rdb_pipe_buff’的成员
     server.rdb_pipe_buff = NULL;
           ^
server.c:2843:11: 错误:‘struct redisServer’没有名为‘rdb_pipe_bufflen’的成员
     server.rdb_pipe_bufflen = 0;
           ^
server.c:2844:11: 错误:‘struct redisServer’没有名为‘rdb_bgsave_scheduled’的成员
     server.rdb_bgsave_scheduled = 0;
           ^
server.c:2845:11: 错误:‘struct redisServer’没有名为‘child_info_pipe’的成员
     server.child_info_pipe[0] = -1;
           ^
server.c:2846:11: 错误:‘struct redisServer’没有名为‘child_info_pipe’的成员
     server.child_info_pipe[1] = -1;
           ^
server.c:2847:11: 错误:‘struct redisServer’没有名为‘child_info_data’的成员
     server.child_info_data.magic = 0;
           ^
server.c:2849:11: 错误:‘struct redisServer’没有名为‘aof_buf’的成员
     server.aof_buf = sdsempty();
           ^
server.c:2850:11: 错误:‘struct redisServer’没有名为‘lastsave’的成员
     server.lastsave = time(NULL); /* At startup we consider the DB saved. */
           ^
server.c:2851:11: 错误:‘struct redisServer’没有名为‘lastbgsave_try’的成员
     server.lastbgsave_try = 0;    /* At startup we never tried to BGSAVE. */
           ^
server.c:2852:11: 错误:‘struct redisServer’没有名为‘rdb_save_time_last’的成员
     server.rdb_save_time_last = -1;
           ^
server.c:2853:11: 错误:‘struct redisServer’没有名为‘rdb_save_time_start’的成员
     server.rdb_save_time_start = -1;
           ^
server.c:2854:11: 错误:‘struct redisServer’没有名为‘dirty’的成员
     server.dirty = 0;
           ^
server.c:2857:11: 错误:‘struct redisServer’没有名为‘stat_starttime’的成员
     server.stat_starttime = time(NULL);
           ^
server.c:2858:11: 错误:‘struct redisServer’没有名为‘stat_peak_memory’的成员
     server.stat_peak_memory = 0;
           ^
server.c:2859:11: 错误:‘struct redisServer’没有名为‘stat_rdb_cow_bytes’的成员
     server.stat_rdb_cow_bytes = 0;
           ^
server.c:2860:11: 错误:‘struct redisServer’没有名为‘stat_aof_cow_bytes’的成员
     server.stat_aof_cow_bytes = 0;
           ^
server.c:2861:11: 错误:‘struct redisServer’没有名为‘stat_module_cow_bytes’的成员
     server.stat_module_cow_bytes = 0;
           ^
server.c:2863:15: 错误:‘struct redisServer’没有名为‘stat_clients_type_memory’的成员
         server.stat_clients_type_memory[j] = 0;
               ^
server.c:2864:11: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
     server.cron_malloc_stats.zmalloc_used = 0;
           ^
server.c:2865:11: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
     server.cron_malloc_stats.process_rss = 0;
           ^
server.c:2866:11: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
     server.cron_malloc_stats.allocator_allocated = 0;
           ^
server.c:2867:11: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
     server.cron_malloc_stats.allocator_active = 0;
           ^
server.c:2868:11: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
     server.cron_malloc_stats.allocator_resident = 0;
           ^
server.c:2869:11: 错误:‘struct redisServer’没有名为‘lastbgsave_status’的成员
     server.lastbgsave_status = C_OK;
           ^
server.c:2870:11: 错误:‘struct redisServer’没有名为‘aof_last_write_status’的成员
     server.aof_last_write_status = C_OK;
           ^
server.c:2871:11: 错误:‘struct redisServer’没有名为‘aof_last_write_errno’的成员
     server.aof_last_write_errno = 0;
           ^
server.c:2872:11: 错误:‘struct redisServer’没有名为‘repl_good_slaves_count’的成员
     server.repl_good_slaves_count = 0;
           ^
server.c:2884:27: 错误:‘struct redisServer’没有名为‘ipfd_count’的成员
     for (j = 0; j < server.ipfd_count; j++) {
                           ^
server.c:2885:48: 错误:‘struct redisServer’没有名为‘ipfd’的成员
         if (aeCreateFileEvent(server.el, server.ipfd[j], AE_READABLE,
                                                ^
server.c:2892:27: 错误:‘struct redisServer’没有名为‘tlsfd_count’的成员
     for (j = 0; j < server.tlsfd_count; j++) {
                           ^
server.c:2893:48: 错误:‘struct redisServer’没有名为‘tlsfd’的成员
         if (aeCreateFileEvent(server.el, server.tlsfd[j], AE_READABLE,
                                                ^
server.c:2900:15: 错误:‘struct redisServer’没有名为‘sofd’的成员
     if (server.sofd > 0 && aeCreateFileEvent(server.el,server.sofd,AE_READABLE,
               ^
server.c:2900:62: 错误:‘struct redisServer’没有名为‘sofd’的成员
     if (server.sofd > 0 && aeCreateFileEvent(server.el,server.sofd,AE_READABLE,
                                                              ^
server.c:2906:44: 错误:‘struct redisServer’没有名为‘module_blocked_pipe’的成员
     if (aeCreateFileEvent(server.el, server.module_blocked_pipe[0], AE_READABLE,
                                            ^
server.c:2919:15: 错误:‘struct redisServer’没有名为‘aof_state’的成员
     if (server.aof_state == AOF_ON) {
               ^
server.c:2920:15: 错误:‘struct redisServer’没有名为‘aof_fd’的成员
         server.aof_fd = open(server.aof_filename,
               ^
server.c:2920:36: 错误:‘struct redisServer’没有名为‘aof_filename’的成员
         server.aof_fd = open(server.aof_filename,
                                    ^
server.c:2922:19: 错误:‘struct redisServer’没有名为‘aof_fd’的成员
         if (server.aof_fd == -1) {
                   ^
server.c:2933:15: 错误:‘struct redisServer’没有名为‘arch_bits’的成员
     if (server.arch_bits == 32 && server.maxmemory == 0) {
               ^
server.c:2933:41: 错误:‘struct redisServer’没有名为‘maxmemory’的成员
     if (server.arch_bits == 32 && server.maxmemory == 0) {
                                         ^
server.c:2935:15: 错误:‘struct redisServer’没有名为‘maxmemory’的成员
         server.maxmemory = 3072LL*(1024*1024); /* 3 GB */
               ^
server.c:2936:15: 错误:‘struct redisServer’没有名为‘maxmemory_policy’的成员
         server.maxmemory_policy = MAXMEMORY_NO_EVICTION;
               ^
server.c:2939:15: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
     if (server.cluster_enabled) clusterInit();
               ^
server.c: 在函数‘InitServerLast’中:
server.c:2954:34: 错误:‘struct redisServer’没有名为‘jemalloc_bg_thread’的成员
     set_jemalloc_bg_thread(server.jemalloc_bg_thread);
                                  ^
server.c:2955:11: 错误:‘struct redisServer’没有名为‘initial_memory_usage’的成员
     server.initial_memory_usage = zmalloc_used_memory();
           ^
server.c: 在函数‘propagate’中:
server.c:3145:15: 错误:‘struct redisServer’没有名为‘aof_state’的成员
     if (server.aof_state != AOF_OFF && flags & PROPAGATE_AOF)
               ^
server.c:3148:37: 错误:‘struct redisServer’没有名为‘slaves’的成员
         replicationFeedSlaves(server.slaves,dbid,argv,argc);
                                     ^
server.c: 在函数‘alsoPropagate’中:
server.c:3169:15: 错误:‘struct redisServer’没有名为‘loading’的成员
     if (server.loading) return; /* No propagation during loading. */
               ^
server.c:3176:31: 错误:‘struct redisServer’没有名为‘also_propagate’的成员
     redisOpArrayAppend(&server.also_propagate,cmd,dbid,argvcopy,argc,target);
                               ^
server.c: 在函数‘call’中:
server.c:3247:11: 错误:‘struct redisServer’没有名为‘fixed_time_expire’的成员
     server.fixed_time_expire++;
           ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:3251:26: 错误:‘struct redisServer’没有名为‘monitors’的成员
     if (listLength(server.monitors) &&
                          ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:3252:16: 错误:‘struct redisServer’没有名为‘loading’的成员
         !server.loading &&
                ^
server.c:3255:41: 错误:‘struct redisServer’没有名为‘monitors’的成员
         replicationFeedMonitors(c,server.monitors,c->db->id,c->argv,c->argc);
                                         ^
server.c:3261:46: 错误:‘struct redisServer’没有名为‘also_propagate’的成员
     redisOpArray prev_also_propagate = server.also_propagate;
                                              ^
server.c:3262:29: 错误:‘struct redisServer’没有名为‘also_propagate’的成员
     redisOpArrayInit(&server.also_propagate);
                             ^
server.c:3265:19: 错误:‘struct redisServer’没有名为‘dirty’的成员
     dirty = server.dirty;
                   ^
server.c:3267:19: 错误:‘struct redisServer’没有名为‘ustime’的成员
     start = server.ustime;
                   ^
server.c:3270:19: 错误:‘struct redisServer’没有名为‘dirty’的成员
     dirty = server.dirty-dirty;
                   ^
server.c:3275:15: 错误:‘struct redisServer’没有名为‘loading’的成员
     if (server.loading && c->flags & CLIENT_LUA)
               ^
server.c:3281:40: 错误:‘struct redisServer’没有名为‘lua_caller’的成员
     if (c->flags & CLIENT_LUA && server.lua_caller) {
                                        ^
server.c:3283:19: 错误:‘struct redisServer’没有名为‘lua_caller’的成员
             server.lua_caller->flags |= CLIENT_FORCE_REPL;
                   ^
server.c:3285:19: 错误:‘struct redisServer’没有名为‘lua_caller’的成员
             server.lua_caller->flags |= CLIENT_FORCE_AOF;
                   ^
In file included from server.h:70:0,
                 from server.c:30:
latency.h:85:15: 错误:‘struct redisServer’没有名为‘latency_monitor_threshold’的成员
     if (server.latency_monitor_threshold && \
               ^
server.c:3293:9: 附注:in expansion of macro ‘latencyAddSampleIfNeeded’
         latencyAddSampleIfNeeded(latency_event,duration/1000);
         ^
latency.h:86:24: 错误:‘struct redisServer’没有名为‘latency_monitor_threshold’的成员
         (var) >= server.latency_monitor_threshold) \
                        ^
server.c:3293:9: 附注:in expansion of macro ‘latencyAddSampleIfNeeded’
         latencyAddSampleIfNeeded(latency_event,duration/1000);
         ^
server.c:3346:15: 错误:‘struct redisServer’没有名为‘also_propagate’的成员
     if (server.also_propagate.numops) {
               ^
server.c:3358:23: 错误:‘struct redisServer’没有名为‘also_propagate’的成员
             if (server.also_propagate.numops > 1 &&
                       ^
server.c:3367:35: 错误:‘struct redisServer’没有名为‘also_propagate’的成员
             for (j = 0; j < server.also_propagate.numops; j++) {
                                   ^
server.c:3368:30: 错误:‘struct redisServer’没有名为‘also_propagate’的成员
                 rop = &server.also_propagate.ops[j];
                              ^
server.c:3381:33: 错误:‘struct redisServer’没有名为‘also_propagate’的成员
         redisOpArrayFree(&server.also_propagate);
                                 ^
server.c:3383:11: 错误:‘struct redisServer’没有名为‘also_propagate’的成员
     server.also_propagate = prev_also_propagate;
           ^
server.c:3388:58: 错误:‘struct redisServer’没有名为‘lua_caller’的成员
         client *caller = (c->flags & CLIENT_LUA && server.lua_caller) ?
                                                          ^
server.c:3389:35: 错误:‘struct redisServer’没有名为‘lua_caller’的成员
                             server.lua_caller : c;
                                   ^
server.c:3397:11: 错误:‘struct redisServer’没有名为‘fixed_time_expire’的成员
     server.fixed_time_expire--;
           ^
server.c:3398:11: 错误:‘struct redisServer’没有名为‘stat_numcommands’的成员
     server.stat_numcommands++;
           ^
server.c: 在函数‘processCommand’中:
server.c:3480:15: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
     if (server.cluster_enabled &&
               ^
server.c:3483:17: 错误:‘struct redisServer’没有名为‘lua_caller’的成员
           server.lua_caller->flags & CLIENT_MASTER) &&
                 ^
server.c:3491:37: 错误:‘struct redisServer’没有名为‘cluster’的成员
         if (n == NULL || n != server.cluster->myself) {
                                     ^
server.c:3508:15: 错误:‘struct redisServer’没有名为‘maxmemory’的成员
     if (server.maxmemory && !server.lua_timedout) {
               ^
server.c:3508:36: 错误:‘struct redisServer’没有名为‘lua_timedout’的成员
     if (server.maxmemory && !server.lua_timedout) {
                                    ^
server.c:3512:19: 错误:‘struct redisServer’没有名为‘current_client’的成员
         if (server.current_client == NULL) return C_ERR;
                   ^
server.c:3532:19: 错误:‘struct redisServer’没有名为‘lua_oom’的成员
             server.lua_oom = out_of_memory;
                   ^
server.c:3538:15: 错误:‘struct redisServer’没有名为‘tracking_clients’的成员
     if (server.tracking_clients) trackingLimitUsedSlots();
               ^
server.c:3544:15: 错误:‘struct redisServer’没有名为‘masterhost’的成员
         server.masterhost == NULL &&
               ^
server.c:3555:32: 错误:‘struct redisServer’没有名为‘aof_last_write_errno’的成员
                 strerror(server.aof_last_write_errno)));
                                ^
server.c:3561:15: 错误:‘struct redisServer’没有名为‘masterhost’的成员
     if (server.masterhost == NULL &&
               ^
server.c:3562:15: 错误:‘struct redisServer’没有名为‘repl_min_slaves_to_write’的成员
         server.repl_min_slaves_to_write &&
               ^
server.c:3563:15: 错误:‘struct redisServer’没有名为‘repl_min_slaves_max_lag’的成员
         server.repl_min_slaves_max_lag &&
               ^
server.c:3565:15: 错误:‘struct redisServer’没有名为‘repl_good_slaves_count’的成员
         server.repl_good_slaves_count < server.repl_min_slaves_to_write)
               ^
server.c:3565:47: 错误:‘struct redisServer’没有名为‘repl_min_slaves_to_write’的成员
         server.repl_good_slaves_count < server.repl_min_slaves_to_write)
                                               ^
server.c:3574:15: 错误:‘struct redisServer’没有名为‘masterhost’的成员
     if (server.masterhost && server.repl_slave_ro &&
               ^
server.c:3574:36: 错误:‘struct redisServer’没有名为‘repl_slave_ro’的成员
     if (server.masterhost && server.repl_slave_ro &&
                                    ^
server.c:3601:15: 错误:‘struct redisServer’没有名为‘masterhost’的成员
     if (server.masterhost && server.repl_state != REPL_STATE_CONNECTED &&
               ^
server.c:3601:36: 错误:‘struct redisServer’没有名为‘repl_state’的成员
     if (server.masterhost && server.repl_state != REPL_STATE_CONNECTED &&
                                    ^
server.c:3602:15: 错误:‘struct redisServer’没有名为‘repl_serve_stale_data’的成员
         server.repl_serve_stale_data == 0 &&
               ^
server.c:3612:15: 错误:‘struct redisServer’没有名为‘loading’的成员
     if (server.loading && !(c->cmd->flags & CMD_LOADING)) {
               ^
server.c:3623:15: 错误:‘struct redisServer’没有名为‘lua_timedout’的成员
     if (server.lua_timedout &&
               ^
server.c:3653:25: 错误:‘struct redisServer’没有名为‘master_repl_offset’的成员
         c->woff = server.master_repl_offset;
                         ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:3654:30: 错误:‘struct redisServer’没有名为‘ready_keys’的成员
         if (listLength(server.ready_keys))
                              ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c: 在函数‘closeListeningSockets’中:
server.c:3667:27: 错误:‘struct redisServer’没有名为‘ipfd_count’的成员
     for (j = 0; j < server.ipfd_count; j++) close(server.ipfd[j]);
                           ^
server.c:3667:57: 错误:‘struct redisServer’没有名为‘ipfd’的成员
     for (j = 0; j < server.ipfd_count; j++) close(server.ipfd[j]);
                                                         ^
server.c:3668:27: 错误:‘struct redisServer’没有名为‘tlsfd_count’的成员
     for (j = 0; j < server.tlsfd_count; j++) close(server.tlsfd[j]);
                           ^
server.c:3668:58: 错误:‘struct redisServer’没有名为‘tlsfd’的成员
     for (j = 0; j < server.tlsfd_count; j++) close(server.tlsfd[j]);
                                                          ^
server.c:3669:15: 错误:‘struct redisServer’没有名为‘sofd’的成员
     if (server.sofd != -1) close(server.sofd);
               ^
server.c:3669:40: 错误:‘struct redisServer’没有名为‘sofd’的成员
     if (server.sofd != -1) close(server.sofd);
                                        ^
server.c:3670:15: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
     if (server.cluster_enabled)
               ^
server.c:3671:31: 错误:‘struct redisServer’没有名为‘cfd_count’的成员
         for (j = 0; j < server.cfd_count; j++) close(server.cfd[j]);
                               ^
server.c:3671:60: 错误:‘struct redisServer’没有名为‘cfd’的成员
         for (j = 0; j < server.cfd_count; j++) close(server.cfd[j]);
                                                            ^
server.c:3672:37: 错误:‘struct redisServer’没有名为‘unixsocket’的成员
     if (unlink_unix_socket && server.unixsocket) {
                                     ^
server.c:3674:22: 错误:‘struct redisServer’没有名为‘unixsocket’的成员
         unlink(server.unixsocket); /* don't care if this fails */
                      ^
server.c: 在函数‘prepareForShutdown’中:
server.c:3683:15: 错误:‘struct redisServer’没有名为‘supervised_mode’的成员
     if (server.supervised_mode == SUPERVISED_SYSTEMD)
               ^
server.c:3692:15: 错误:‘struct redisServer’没有名为‘rdb_child_pid’的成员
     if (server.rdb_child_pid != -1) {
               ^
server.c:3698:15: 错误:‘struct redisServer’没有名为‘module_child_pid’的成员
     if (server.module_child_pid != -1) {
               ^
server.c:3700:40: 错误:‘struct redisServer’没有名为‘module_child_pid’的成员
         TerminateModuleForkChild(server.module_child_pid,0);
                                        ^
server.c:3703:15: 错误:‘struct redisServer’没有名为‘aof_state’的成员
     if (server.aof_state != AOF_OFF) {
               ^
server.c:3706:19: 错误:‘struct redisServer’没有名为‘aof_child_pid’的成员
         if (server.aof_child_pid != -1) {
                   ^
server.c:3709:23: 错误:‘struct redisServer’没有名为‘aof_state’的成员
             if (server.aof_state == AOF_WAIT_REWRITE) {
                       ^
server.c:3720:27: 错误:‘struct redisServer’没有名为‘aof_fd’的成员
         redis_fsync(server.aof_fd);
                           ^
server.c:3724:16: 错误:‘struct redisServer’没有名为‘saveparamslen’的成员
     if ((server.saveparamslen > 0 && !nosave) || save) {
                ^
server.c:3726:19: 错误:‘struct redisServer’没有名为‘supervised_mode’的成员
         if (server.supervised_mode == SUPERVISED_SYSTEMD)
                   ^
server.c:3731:27: 错误:‘struct redisServer’没有名为‘rdb_filename’的成员
         if (rdbSave(server.rdb_filename,rsiptr) != C_OK) {
                           ^
server.c:3738:23: 错误:‘struct redisServer’没有名为‘supervised_mode’的成员
             if (server.supervised_mode == SUPERVISED_SYSTEMD)
                       ^
server.c:3748:15: 错误:‘struct redisServer’没有名为‘daemonize’的成员
     if (server.daemonize || server.pidfile) {
               ^
server.c:3748:35: 错误:‘struct redisServer’没有名为‘pidfile’的成员
     if (server.daemonize || server.pidfile) {
                                   ^
server.c:3750:22: 错误:‘struct redisServer’没有名为‘pidfile’的成员
         unlink(server.pidfile);
                      ^
server.c:3760:15: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
         server.sentinel_mode ? "Sentinel" : "Redis");
               ^
server.c: 在函数‘writeCommandsDeniedByDiskError’中:
server.c:3778:15: 错误:‘struct redisServer’没有名为‘stop_writes_on_bgsave_err’的成员
     if (server.stop_writes_on_bgsave_err &&
               ^
server.c:3779:15: 错误:‘struct redisServer’没有名为‘saveparamslen’的成员
         server.saveparamslen > 0 &&
               ^
server.c:3780:15: 错误:‘struct redisServer’没有名为‘lastbgsave_status’的成员
         server.lastbgsave_status == C_ERR)
               ^
server.c:3783:22: 错误:‘struct redisServer’没有名为‘aof_state’的成员
     } else if (server.aof_state != AOF_OFF &&
                      ^
server.c:3784:22: 错误:‘struct redisServer’没有名为‘aof_last_write_status’的成员
                server.aof_last_write_status == C_ERR)
                      ^
server.c: 在函数‘genRedisInfoString’中:
server.c:3977:27: 错误:‘struct redisServer’没有名为‘unixtime’的成员
     time_t uptime = server.unixtime-server.stat_starttime;
                           ^
server.c:3977:43: 错误:‘struct redisServer’没有名为‘stat_starttime’的成员
     time_t uptime = server.unixtime-server.stat_starttime;
                                           ^
server.c:3999:19: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
         if (server.cluster_enabled) mode = "cluster";
                   ^
server.c:4000:24: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
         else if (server.sentinel_mode) mode = "sentinel";
                        ^
server.c:4039:19: 错误:‘struct redisServer’没有名为‘arch_bits’的成员
             server.arch_bits,
                   ^
server.c:4048:19: 错误:‘struct redisServer’没有名为‘runid’的成员
             server.runid,
                   ^
server.c:4049:19: 错误:‘struct redisServer’没有名为‘port’的成员
             server.port ? server.port : server.tls_port,
                   ^
server.c:4049:33: 错误:‘struct redisServer’没有名为‘port’的成员
             server.port ? server.port : server.tls_port,
                                 ^
server.c:4049:47: 错误:‘struct redisServer’没有名为‘tls_port’的成员
             server.port ? server.port : server.tls_port,
                                               ^
server.c:4054:19: 错误:‘struct redisServer’没有名为‘lruclock’的成员
             server.lruclock,
                   ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:4072:30: 错误:‘struct redisServer’没有名为‘clients’的成员
             listLength(server.clients)-listLength(server.slaves),
                              ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:4072:57: 错误:‘struct redisServer’没有名为‘slaves’的成员
             listLength(server.clients)-listLength(server.slaves),
                                                         ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:4074:19: 错误:‘struct redisServer’没有名为‘blocked_clients’的成员
             server.blocked_clients,
                   ^
server.c:4075:19: 错误:‘struct redisServer’没有名为‘tracking_clients’的成员
             server.tracking_clients,
                   ^
server.c:4076:48: 错误:‘struct redisServer’没有名为‘clients_timeout_table’的成员
             (unsigned long long) raxSize(server.clients_timeout_table));
                                                ^
server.c:4089:41: 错误:‘struct redisServer’没有名为‘system_memory_size’的成员
         size_t total_system_mem = server.system_memory_size;
                                         ^
server.c:4091:38: 错误:‘struct redisServer’没有名为‘lua’的成员
         long long memory_lua = server.lua ? (long long)lua_gc(server.lua,LUA_GCCOUNT,0)*1024 : 0;
                                      ^
server.c:4091:69: 错误:‘struct redisServer’没有名为‘lua’的成员
         long long memory_lua = server.lua ? (long long)lua_gc(server.lua,LUA_GCCOUNT,0)*1024 : 0;
                                                                     ^
server.c:4098:34: 错误:‘struct redisServer’没有名为‘stat_peak_memory’的成员
         if (zmalloc_used > server.stat_peak_memory)
                                  ^
server.c:4099:19: 错误:‘struct redisServer’没有名为‘stat_peak_memory’的成员
             server.stat_peak_memory = zmalloc_used;
                   ^
server.c:4102:38: 错误:‘struct redisServer’没有名为‘stat_peak_memory’的成员
         bytesToHuman(peak_hmem,server.stat_peak_memory);
                                      ^
server.c:4106:49: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
         bytesToHuman(used_memory_rss_hmem,server.cron_malloc_stats.process_rss);
                                                 ^
server.c:4107:43: 错误:‘struct redisServer’没有名为‘maxmemory’的成员
         bytesToHuman(maxmemory_hmem,server.maxmemory);
                                           ^
server.c:4154:19: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.process_rss,
                   ^
server.c:4156:19: 错误:‘struct redisServer’没有名为‘stat_peak_memory’的成员
             server.stat_peak_memory,
                   ^
server.c:4163:19: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.allocator_allocated,
                   ^
server.c:4164:19: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.allocator_active,
                   ^
server.c:4165:19: 错误:‘struct redisServer’没有名为‘cron_malloc_stats’的成员
             server.cron_malloc_stats.allocator_resident,
                   ^
In file included from server.h:62:0,
                 from server.c:30:
server.c:4172:28: 错误:‘struct redisServer’没有名为‘lua_scripts’的成员
             dictSize(server.lua_scripts),
                            ^
dict.h:147:23: 附注:in definition of macro ‘dictSize’
 #define dictSize(d) ((d)->ht[0].used+(d)->ht[1].used)
                       ^
server.c:4172:28: 错误:‘struct redisServer’没有名为‘lua_scripts’的成员
             dictSize(server.lua_scripts),
                            ^
dict.h:147:39: 附注:in definition of macro ‘dictSize’
 #define dictSize(d) ((d)->ht[0].used+(d)->ht[1].used)
                                       ^
server.c:4173:19: 错误:‘struct redisServer’没有名为‘maxmemory’的成员
             server.maxmemory,
                   ^
server.c:4193:19: 错误:‘struct redisServer’没有名为‘active_defrag_running’的成员
             server.active_defrag_running,
                   ^
server.c:4222:19: 错误:‘struct redisServer’没有名为‘loading’的成员
             server.loading,
                   ^
server.c:4223:19: 错误:‘struct redisServer’没有名为‘dirty’的成员
             server.dirty,
                   ^
server.c:4224:19: 错误:‘struct redisServer’没有名为‘rdb_child_pid’的成员
             server.rdb_child_pid != -1,
                   ^
server.c:4225:29: 错误:‘struct redisServer’没有名为‘lastsave’的成员
             (intmax_t)server.lastsave,
                             ^
server.c:4226:20: 错误:‘struct redisServer’没有名为‘lastbgsave_status’的成员
             (server.lastbgsave_status == C_OK) ? "ok" : "err",
                    ^
server.c:4227:29: 错误:‘struct redisServer’没有名为‘rdb_save_time_last’的成员
             (intmax_t)server.rdb_save_time_last,
                             ^
server.c:4228:31: 错误:‘struct redisServer’没有名为‘rdb_child_pid’的成员
             (intmax_t)((server.rdb_child_pid == -1) ?
                               ^
server.c:4229:39: 错误:‘struct redisServer’没有名为‘rdb_save_time_start’的成员
                 -1 : time(NULL)-server.rdb_save_time_start),
                                       ^
server.c:4230:19: 错误:‘struct redisServer’没有名为‘stat_rdb_cow_bytes’的成员
             server.stat_rdb_cow_bytes,
                   ^
server.c:4231:19: 错误:‘struct redisServer’没有名为‘aof_state’的成员
             server.aof_state != AOF_OFF,
                   ^
server.c:4232:19: 错误:‘struct redisServer’没有名为‘aof_child_pid’的成员
             server.aof_child_pid != -1,
                   ^
server.c:4233:19: 错误:‘struct redisServer’没有名为‘aof_rewrite_scheduled’的成员
             server.aof_rewrite_scheduled,
                   ^
server.c:4234:29: 错误:‘struct redisServer’没有名为‘aof_rewrite_time_last’的成员
             (intmax_t)server.aof_rewrite_time_last,
                             ^
server.c:4235:31: 错误:‘struct redisServer’没有名为‘aof_child_pid’的成员
             (intmax_t)((server.aof_child_pid == -1) ?
                               ^
server.c:4236:39: 错误:‘struct redisServer’没有名为‘aof_rewrite_time_start’的成员
                 -1 : time(NULL)-server.aof_rewrite_time_start),
                                       ^
server.c:4237:20: 错误:‘struct redisServer’没有名为‘aof_lastbgrewrite_status’的成员
             (server.aof_lastbgrewrite_status == C_OK) ? "ok" : "err",
                    ^
server.c:4238:20: 错误:‘struct redisServer’没有名为‘aof_last_write_status’的成员
             (server.aof_last_write_status == C_OK) ? "ok" : "err",
                    ^
server.c:4239:19: 错误:‘struct redisServer’没有名为‘stat_aof_cow_bytes’的成员
             server.stat_aof_cow_bytes,
                   ^
server.c:4240:19: 错误:‘struct redisServer’没有名为‘module_child_pid’的成员
             server.module_child_pid != -1,
                   ^
server.c:4241:19: 错误:‘struct redisServer’没有名为‘stat_module_cow_bytes’的成员
             server.stat_module_cow_bytes);
                   ^
server.c:4243:19: 错误:‘struct redisServer’没有名为‘aof_enabled’的成员
         if (server.aof_enabled) {
                   ^
server.c:4252:35: 错误:‘struct redisServer’没有名为‘aof_current_size’的成员
                 (long long) server.aof_current_size,
                                   ^
server.c:4253:35: 错误:‘struct redisServer’没有名为‘aof_rewrite_base_size’的成员
                 (long long) server.aof_rewrite_base_size,
                                   ^
server.c:4254:23: 错误:‘struct redisServer’没有名为‘aof_rewrite_scheduled’的成员
                 server.aof_rewrite_scheduled,
                       ^
server.c:4255:30: 错误:‘struct redisServer’没有名为‘aof_buf’的成员
                 sdslen(server.aof_buf),
                              ^
server.c:4258:23: 错误:‘struct redisServer’没有名为‘aof_delayed_fsync’的成员
                 server.aof_delayed_fsync);
                       ^
server.c:4261:19: 错误:‘struct redisServer’没有名为‘loading’的成员
         if (server.loading) {
                   ^
server.c:4264:43: 错误:‘struct redisServer’没有名为‘loading_total_bytes’的成员
             off_t remaining_bytes = server.loading_total_bytes-
                                           ^
server.c:4265:43: 错误:‘struct redisServer’没有名为‘loading_loaded_bytes’的成员
                                     server.loading_loaded_bytes;
                                           ^
server.c:4267:35: 错误:‘struct redisServer’没有名为‘loading_loaded_bytes’的成员
             perc = ((double)server.loading_loaded_bytes /
                                   ^
server.c:4268:27: 错误:‘struct redisServer’没有名为‘loading_total_bytes’的成员
                    (server.loading_total_bytes+1)) * 100;
                           ^
server.c:4270:40: 错误:‘struct redisServer’没有名为‘loading_start_time’的成员
             elapsed = time(NULL)-server.loading_start_time;
                                        ^
server.c:4275:56: 错误:‘struct redisServer’没有名为‘loading_loaded_bytes’的成员
                 eta = (elapsed*remaining_bytes)/(server.loading_loaded_bytes+1);
                                                        ^
server.c:4284:34: 错误:‘struct redisServer’没有名为‘loading_start_time’的成员
                 (intmax_t) server.loading_start_time,
                                  ^
server.c:4285:44: 错误:‘struct redisServer’没有名为‘loading_total_bytes’的成员
                 (unsigned long long) server.loading_total_bytes,
                                            ^
server.c:4286:44: 错误:‘struct redisServer’没有名为‘loading_loaded_bytes’的成员
                 (unsigned long long) server.loading_loaded_bytes,
                                            ^
server.c:4329:19: 错误:‘struct redisServer’没有名为‘stat_numconnections’的成员
             server.stat_numconnections,
                   ^
server.c:4330:19: 错误:‘struct redisServer’没有名为‘stat_numcommands’的成员
             server.stat_numcommands,
                   ^
server.c:4332:19: 错误:‘struct redisServer’没有名为‘stat_net_input_bytes’的成员
             server.stat_net_input_bytes,
                   ^
server.c:4333:19: 错误:‘struct redisServer’没有名为‘stat_net_output_bytes’的成员
             server.stat_net_output_bytes,
                   ^
server.c:4336:19: 错误:‘struct redisServer’没有名为‘stat_rejected_conn’的成员
             server.stat_rejected_conn,
                   ^
server.c:4337:19: 错误:‘struct redisServer’没有名为‘stat_sync_full’的成员
             server.stat_sync_full,
                   ^
server.c:4338:19: 错误:‘struct redisServer’没有名为‘stat_sync_partial_ok’的成员
             server.stat_sync_partial_ok,
                   ^
server.c:4339:19: 错误:‘struct redisServer’没有名为‘stat_sync_partial_err’的成员
             server.stat_sync_partial_err,
                   ^
server.c:4340:19: 错误:‘struct redisServer’没有名为‘stat_expiredkeys’的成员
             server.stat_expiredkeys,
                   ^
server.c:4341:19: 错误:‘struct redisServer’没有名为‘stat_expired_stale_perc’的成员
             server.stat_expired_stale_perc*100,
                   ^
server.c:4342:19: 错误:‘struct redisServer’没有名为‘stat_expired_time_cap_reached_count’的成员
             server.stat_expired_time_cap_reached_count,
                   ^
server.c:4343:19: 错误:‘struct redisServer’没有名为‘stat_expire_cycle_time_used’的成员
             server.stat_expire_cycle_time_used/1000,
                   ^
server.c:4344:19: 错误:‘struct redisServer’没有名为‘stat_evictedkeys’的成员
             server.stat_evictedkeys,
                   ^
server.c:4345:19: 错误:‘struct redisServer’没有名为‘stat_keyspace_hits’的成员
             server.stat_keyspace_hits,
                   ^
server.c:4346:19: 错误:‘struct redisServer’没有名为‘stat_keyspace_misses’的成员
             server.stat_keyspace_misses,
                   ^
In file included from server.h:62:0,
                 from server.c:30:
server.c:4347:28: 错误:‘struct redisServer’没有名为‘pubsub_channels’的成员
             dictSize(server.pubsub_channels),
                            ^
dict.h:147:23: 附注:in definition of macro ‘dictSize’
 #define dictSize(d) ((d)->ht[0].used+(d)->ht[1].used)
                       ^
server.c:4347:28: 错误:‘struct redisServer’没有名为‘pubsub_channels’的成员
             dictSize(server.pubsub_channels),
                            ^
dict.h:147:39: 附注:in definition of macro ‘dictSize’
 #define dictSize(d) ((d)->ht[0].used+(d)->ht[1].used)
                                       ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:4348:30: 错误:‘struct redisServer’没有名为‘pubsub_patterns’的成员
             listLength(server.pubsub_patterns),
                              ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:4349:19: 错误:‘struct redisServer’没有名为‘stat_fork_time’的成员
             server.stat_fork_time,
                   ^
In file included from server.h:62:0,
                 from server.c:30:
server.c:4350:28: 错误:‘struct redisServer’没有名为‘migrate_cached_sockets’的成员
             dictSize(server.migrate_cached_sockets),
                            ^
dict.h:147:23: 附注:in definition of macro ‘dictSize’
 #define dictSize(d) ((d)->ht[0].used+(d)->ht[1].used)
                       ^
server.c:4350:28: 错误:‘struct redisServer’没有名为‘migrate_cached_sockets’的成员
             dictSize(server.migrate_cached_sockets),
                            ^
dict.h:147:39: 附注:in definition of macro ‘dictSize’
 #define dictSize(d) ((d)->ht[0].used+(d)->ht[1].used)
                                       ^
server.c:4352:19: 错误:‘struct redisServer’没有名为‘stat_active_defrag_hits’的成员
             server.stat_active_defrag_hits,
                   ^
server.c:4353:19: 错误:‘struct redisServer’没有名为‘stat_active_defrag_misses’的成员
             server.stat_active_defrag_misses,
                   ^
server.c:4354:19: 错误:‘struct redisServer’没有名为‘stat_active_defrag_key_hits’的成员
             server.stat_active_defrag_key_hits,
                   ^
server.c:4355:19: 错误:‘struct redisServer’没有名为‘stat_active_defrag_key_misses’的成员
             server.stat_active_defrag_key_misses,
                   ^
server.c:4359:19: 错误:‘struct redisServer’没有名为‘stat_unexpected_error_replies’的成员
             server.stat_unexpected_error_replies);
                   ^
server.c:4368:19: 错误:‘struct redisServer’没有名为‘masterhost’的成员
             server.masterhost == NULL ? "master" : "slave");
                   ^
server.c:4369:19: 错误:‘struct redisServer’没有名为‘masterhost’的成员
         if (server.masterhost) {
                   ^
server.c:4372:23: 错误:‘struct redisServer’没有名为‘master’的成员
             if (server.master)
                       ^
server.c:4373:43: 错误:‘struct redisServer’没有名为‘master’的成员
                 slave_repl_offset = server.master->reploff;
                                           ^
server.c:4374:28: 错误:‘struct redisServer’没有名为‘cached_master’的成员
             else if (server.cached_master)
                            ^
server.c:4375:43: 错误:‘struct redisServer’没有名为‘cached_master’的成员
                 slave_repl_offset = server.cached_master->reploff;
                                           ^
server.c:4384:24: 错误:‘struct redisServer’没有名为‘masterhost’的成员
                 ,server.masterhost,
                        ^
server.c:4385:23: 错误:‘struct redisServer’没有名为‘masterport’的成员
                 server.masterport,
                       ^
server.c:4386:24: 错误:‘struct redisServer’没有名为‘repl_state’的成员
                 (server.repl_state == REPL_STATE_CONNECTED) ?
                        ^
server.c:4388:23: 错误:‘struct redisServer’没有名为‘master’的成员
                 server.master ?
                       ^
server.c:4389:30: 错误:‘struct redisServer’没有名为‘unixtime’的成员
                 ((int)(server.unixtime-server.master->lastinteraction)) : -1,
                              ^
server.c:4389:46: 错误:‘struct redisServer’没有名为‘master’的成员
                 ((int)(server.unixtime-server.master->lastinteraction)) : -1,
                                              ^
server.c:4390:23: 错误:‘struct redisServer’没有名为‘repl_state’的成员
                 server.repl_state == REPL_STATE_TRANSFER,
                       ^
server.c:4394:23: 错误:‘struct redisServer’没有名为‘repl_state’的成员
             if (server.repl_state == REPL_STATE_TRANSFER) {
                       ^
server.c:4399:32: 错误:‘struct redisServer’没有名为‘repl_transfer_size’的成员
                         (server.repl_transfer_size - server.repl_transfer_read),
                                ^
server.c:4399:60: 错误:‘struct redisServer’没有名为‘repl_transfer_read’的成员
                         (server.repl_transfer_size - server.repl_transfer_read),
                                                            ^
server.c:4400:33: 错误:‘struct redisServer’没有名为‘unixtime’的成员
                     (int)(server.unixtime-server.repl_transfer_lastio)
                                 ^
server.c:4400:49: 错误:‘struct redisServer’没有名为‘repl_transfer_lastio’的成员
                     (int)(server.unixtime-server.repl_transfer_lastio)
                                                 ^
server.c:4404:23: 错误:‘struct redisServer’没有名为‘repl_state’的成员
             if (server.repl_state != REPL_STATE_CONNECTED) {
                       ^
server.c:4407:38: 错误:‘struct redisServer’没有名为‘unixtime’的成员
                     (intmax_t)(server.unixtime-server.repl_down_since));
                                      ^
server.c:4407:54: 错误:‘struct redisServer’没有名为‘repl_down_since’的成员
                     (intmax_t)(server.unixtime-server.repl_down_since));
                                                      ^
server.c:4412:23: 错误:‘struct redisServer’没有名为‘slave_priority’的成员
                 server.slave_priority,
                       ^
server.c:4413:23: 错误:‘struct redisServer’没有名为‘repl_slave_ro’的成员
                 server.repl_slave_ro);
                       ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:4418:30: 错误:‘struct redisServer’没有名为‘slaves’的成员
             listLength(server.slaves));
                              ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:4422:19: 错误:‘struct redisServer’没有名为‘repl_min_slaves_to_write’的成员
         if (server.repl_min_slaves_to_write &&
                   ^
server.c:4423:19: 错误:‘struct redisServer’没有名为‘repl_min_slaves_max_lag’的成员
             server.repl_min_slaves_max_lag) {
                   ^
server.c:4426:23: 错误:‘struct redisServer’没有名为‘repl_good_slaves_count’的成员
                 server.repl_good_slaves_count);
                       ^
In file included from server.h:63:0,
                 from server.c:30:
server.c:4429:30: 错误:‘struct redisServer’没有名为‘slaves’的成员
         if (listLength(server.slaves)) {
                              ^
adlist.h:57:25: 附注:in definition of macro ‘listLength’
 #define listLength(l) ((l)->len)
                         ^
server.c:4434:30: 错误:‘struct redisServer’没有名为‘slaves’的成员
             listRewind(server.slaves,&li);
                              ^
server.c:4480:19: 错误:‘struct redisServer’没有名为‘replid’的成员
             server.replid,
                   ^
server.c:4481:19: 错误:‘struct redisServer’没有名为‘replid2’的成员
             server.replid2,
                   ^
server.c:4482:19: 错误:‘struct redisServer’没有名为‘master_repl_offset’的成员
             server.master_repl_offset,
                   ^
server.c:4483:19: 错误:‘struct redisServer’没有名为‘second_replid_offset’的成员
             server.second_replid_offset,
                   ^
server.c:4484:19: 错误:‘struct redisServer’没有名为‘repl_backlog’的成员
             server.repl_backlog != NULL,
                   ^
server.c:4485:19: 错误:‘struct redisServer’没有名为‘repl_backlog_size’的成员
             server.repl_backlog_size,
                   ^
server.c:4486:19: 错误:‘struct redisServer’没有名为‘repl_backlog_off’的成员
             server.repl_backlog_off,
                   ^
server.c:4487:19: 错误:‘struct redisServer’没有名为‘repl_backlog_histlen’的成员
             server.repl_backlog_histlen);
                   ^
server.c:4538:15: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
         server.cluster_enabled);
               ^
server.c:4545:31: 错误:‘struct redisServer’没有名为‘dbnum’的成员
         for (j = 0; j < server.dbnum; j++) {
                               ^
server.c: 在函数‘monitorCommand’中:
server.c:4588:27: 错误:‘struct redisServer’没有名为‘monitors’的成员
     listAddNodeTail(server.monitors,c);
                           ^
server.c: 在函数‘createPidFile’中:
server.c:4622:16: 错误:‘struct redisServer’没有名为‘pidfile’的成员
     if (!server.pidfile) server.pidfile = zstrdup(CONFIG_DEFAULT_PID_FILE);
                ^
server.c:4622:32: 错误:‘struct redisServer’没有名为‘pidfile’的成员
     if (!server.pidfile) server.pidfile = zstrdup(CONFIG_DEFAULT_PID_FILE);
                                ^
server.c:4625:28: 错误:‘struct redisServer’没有名为‘pidfile’的成员
     FILE *fp = fopen(server.pidfile,"w");
                            ^
server.c: 在函数‘redisAsciiArt’中:
server.c:4682:15: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
     if (server.cluster_enabled) mode = "cluster";
               ^
server.c:4683:20: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
     else if (server.sentinel_mode) mode = "sentinel";
                    ^
server.c:4689:30: 错误:‘struct redisServer’没有名为‘syslog_enabled’的成员
     int show_logo = ((!server.syslog_enabled &&
                              ^
server.c:4690:29: 错误:‘struct redisServer’没有名为‘logfile’的成员
                       server.logfile[0] == '\0' &&
                             ^
server.c:4692:28: 错误:‘struct redisServer’没有名为‘always_show_logo’的成员
                      server.always_show_logo);
                            ^
server.c:4697:25: 错误:‘struct redisServer’没有名为‘port’的成员
             mode, server.port ? server.port : server.tls_port
                         ^
server.c:4697:39: 错误:‘struct redisServer’没有名为‘port’的成员
             mode, server.port ? server.port : server.tls_port
                                       ^
server.c:4697:53: 错误:‘struct redisServer’没有名为‘tls_port’的成员
             mode, server.port ? server.port : server.tls_port
                                                     ^
server.c:4705:25: 错误:‘struct redisServer’没有名为‘port’的成员
             mode, server.port ? server.port : server.tls_port,
                         ^
server.c:4705:39: 错误:‘struct redisServer’没有名为‘port’的成员
             mode, server.port ? server.port : server.tls_port,
                                       ^
server.c:4705:53: 错误:‘struct redisServer’没有名为‘tls_port’的成员
             mode, server.port ? server.port : server.tls_port,
                                                     ^
server.c: 在函数‘sigShutdownHandler’中:
server.c:4731:15: 错误:‘struct redisServer’没有名为‘shutdown_asap’的成员
     if (server.shutdown_asap && sig == SIGINT) {
               ^
server.c:4735:22: 错误:‘struct redisServer’没有名为‘loading’的成员
     } else if (server.loading) {
                      ^
server.c:4741:11: 错误:‘struct redisServer’没有名为‘shutdown_asap’的成员
     server.shutdown_asap = 1;
           ^
server.c: 在函数‘redisFork’中:
server.c:4798:15: 错误:‘struct redisServer’没有名为‘stat_fork_time’的成员
         server.stat_fork_time = ustime()-start;
               ^
server.c:4799:15: 错误:‘struct redisServer’没有名为‘stat_fork_rate’的成员
         server.stat_fork_rate = (double) zmalloc_used_memory() * 1000000 / server.stat_fork_time / (1024*1024*1024); /* GB per second. */
               ^
server.c:4799:82: 错误:‘struct redisServer’没有名为‘stat_fork_time’的成员
         server.stat_fork_rate = (double) zmalloc_used_memory() * 1000000 / server.stat_fork_time / (1024*1024*1024); /* GB per second. */
                                                                                  ^
In file included from server.h:70:0,
                 from server.c:30:
latency.h:85:15: 错误:‘struct redisServer’没有名为‘latency_monitor_threshold’的成员
     if (server.latency_monitor_threshold && \
               ^
server.c:4800:9: 附注:in expansion of macro ‘latencyAddSampleIfNeeded’
         latencyAddSampleIfNeeded("fork",server.stat_fork_time/1000);
         ^
server.c:4800:47: 错误:‘struct redisServer’没有名为‘stat_fork_time’的成员
         latencyAddSampleIfNeeded("fork",server.stat_fork_time/1000);
                                               ^
latency.h:86:10: 附注:in definition of macro ‘latencyAddSampleIfNeeded’
         (var) >= server.latency_monitor_threshold) \
          ^
latency.h:86:24: 错误:‘struct redisServer’没有名为‘latency_monitor_threshold’的成员
         (var) >= server.latency_monitor_threshold) \
                        ^
server.c:4800:9: 附注:in expansion of macro ‘latencyAddSampleIfNeeded’
         latencyAddSampleIfNeeded("fork",server.stat_fork_time/1000);
         ^
server.c:4800:47: 错误:‘struct redisServer’没有名为‘stat_fork_time’的成员
         latencyAddSampleIfNeeded("fork",server.stat_fork_time/1000);
                                               ^
latency.h:87:37: 附注:in definition of macro ‘latencyAddSampleIfNeeded’
           latencyAddSample((event),(var));
                                     ^
server.c: 在函数‘sendChildCOWInfo’中:
server.c:4818:11: 错误:‘struct redisServer’没有名为‘child_info_data’的成员
     server.child_info_data.cow_size = private_dirty;
           ^
server.c: 在函数‘loadDataFromDisk’中:
server.c:4838:15: 错误:‘struct redisServer’没有名为‘aof_state’的成员
     if (server.aof_state == AOF_ON) {
               ^
server.c:4839:38: 错误:‘struct redisServer’没有名为‘aof_filename’的成员
         if (loadAppendOnlyFile(server.aof_filename) == C_OK)
                                      ^
server.c:4843:27: 错误:‘struct redisServer’没有名为‘rdb_filename’的成员
         if (rdbLoad(server.rdb_filename,&rsi,RDBFLAGS_NONE) == C_OK) {
                           ^
server.c:4848:24: 错误:‘struct redisServer’没有名为‘masterhost’的成员
             if ((server.masterhost ||
                        ^
server.c:4849:24: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
                 (server.cluster_enabled &&
                        ^
In file included from server.c:31:0:
server.c:4850:35: 错误:‘struct redisServer’没有名为‘cluster’的成员
                 nodeIsSlave(server.cluster->myself))) &&
                                   ^
cluster.h:59:26: 附注:in definition of macro ‘nodeIsSlave’
 #define nodeIsSlave(n) ((n)->flags & CLUSTER_NODE_SLAVE)
                          ^
server.c:4858:30: 错误:‘struct redisServer’没有名为‘replid’的成员
                 memcpy(server.replid,rsi.repl_id,sizeof(server.replid));
                              ^
server.c:4858:63: 错误:‘struct redisServer’没有名为‘replid’的成员
                 memcpy(server.replid,rsi.repl_id,sizeof(server.replid));
                                                               ^
server.c:4859:23: 错误:‘struct redisServer’没有名为‘master_repl_offset’的成员
                 server.master_repl_offset = rsi.repl_offset;
                       ^
server.c:4864:32: 错误:‘struct redisServer’没有名为‘cached_master’的成员
                 selectDb(server.cached_master,rsi.repl_stream_db);
                                ^
server.c: 在函数‘redisSetProcTitle’中:
server.c:4882:15: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
     if (server.cluster_enabled) server_mode = " [cluster]";
               ^
server.c:4883:20: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
     else if (server.sentinel_mode) server_mode = " [sentinel]";
                    ^
server.c:4887:15: 错误:‘struct redisServer’没有名为‘bindaddr_count’的成员
         server.bindaddr_count ? server.bindaddr[0] : "*",
               ^
server.c:4887:39: 错误:‘struct redisServer’没有名为‘bindaddr’的成员
         server.bindaddr_count ? server.bindaddr[0] : "*",
                                       ^
server.c:4888:15: 错误:‘struct redisServer’没有名为‘port’的成员
         server.port ? server.port : server.tls_port,
               ^
server.c:4888:29: 错误:‘struct redisServer’没有名为‘port’的成员
         server.port ? server.port : server.tls_port,
                             ^
server.c:4888:43: 错误:‘struct redisServer’没有名为‘tls_port’的成员
         server.port ? server.port : server.tls_port,
                                           ^
server.c: 在函数‘redisIsSupervised’中:
server.c:4945:19: 错误:‘struct redisServer’没有名为‘supervised_mode’的成员
             server.supervised_mode = SUPERVISED_SYSTEMD;
                   ^
server.c: 在函数‘iAmMaster’中:
server.c:4962:21: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
     return ((!server.cluster_enabled && server.masterhost == NULL) ||
                     ^
server.c:4962:47: 错误:‘struct redisServer’没有名为‘masterhost’的成员
     return ((!server.cluster_enabled && server.masterhost == NULL) ||
                                               ^
server.c:4963:20: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
             (server.cluster_enabled && nodeIsMaster(server.cluster->myself)));
                    ^
In file included from server.c:31:0:
server.c:4963:59: 错误:‘struct redisServer’没有名为‘cluster’的成员
             (server.cluster_enabled && nodeIsMaster(server.cluster->myself)));
                                                           ^
cluster.h:58:27: 附注:in definition of macro ‘nodeIsMaster’
 #define nodeIsMaster(n) ((n)->flags & CLUSTER_NODE_MASTER)
                           ^
server.c: 在函数‘main’中:
server.c:5011:11: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
     server.sentinel_mode = checkForSentinelMode(argc,argv);
           ^
server.c:5028:15: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
     if (server.sentinel_mode) {
               ^
server.c:5095:19: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
         if (server.sentinel_mode && configfile && *configfile == '-') {
                   ^
server.c:5117:168: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
         serverLog(LL_WARNING, "Warning: no config file specified, using the default config. In order to specify a config file use %s /path/to/%s.conf", argv[0], server.sentinel_mode ? "sentinel" : "redis");
                                                                                                                                                                        ^
server.c:5122:11: 错误:‘struct redisServer’没有名为‘supervised’的成员
     server.supervised = redisIsSupervised(server.supervised_mode);
           ^
server.c:5122:49: 错误:‘struct redisServer’没有名为‘supervised_mode’的成员
     server.supervised = redisIsSupervised(server.supervised_mode);
                                                 ^
server.c:5123:28: 错误:‘struct redisServer’没有名为‘daemonize’的成员
     int background = server.daemonize && !server.supervised;
                            ^
server.c:5123:49: 错误:‘struct redisServer’没有名为‘supervised’的成员
     int background = server.daemonize && !server.supervised;
                                                 ^
server.c:5127:29: 错误:‘struct redisServer’没有名为‘pidfile’的成员
     if (background || server.pidfile) createPidFile();
                             ^
server.c:5132:16: 错误:‘struct redisServer’没有名为‘sentinel_mode’的成员
     if (!server.sentinel_mode) {
                ^
server.c:5142:19: 错误:‘struct redisServer’没有名为‘cluster_enabled’的成员
         if (server.cluster_enabled) {
                   ^
server.c:5150:19: 错误:‘struct redisServer’没有名为‘ipfd_count’的成员
         if (server.ipfd_count > 0 || server.tlsfd_count > 0)
                   ^
server.c:5150:44: 错误:‘struct redisServer’没有名为‘tlsfd_count’的成员
         if (server.ipfd_count > 0 || server.tlsfd_count > 0)
                                            ^
server.c:5152:19: 错误:‘struct redisServer’没有名为‘sofd’的成员
         if (server.sofd > 0)
                   ^
server.c:5153:94: 错误:‘struct redisServer’没有名为‘unixsocket’的成员
             serverLog(LL_NOTICE,"The server is now ready to accept connections at %s", server.unixsocket);
                                                                                              ^
server.c:5154:19: 错误:‘struct redisServer’没有名为‘supervised_mode’的成员
         if (server.supervised_mode == SUPERVISED_SYSTEMD) {
                   ^
server.c:5155:24: 错误:‘struct redisServer’没有名为‘masterhost’的成员
             if (!server.masterhost) {
                        ^
server.c:5168:15: 错误:‘struct redisServer’没有名为‘maxmemory’的成员
     if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
               ^
server.c:5168:39: 错误:‘struct redisServer’没有名为‘maxmemory’的成员
     if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
                                       ^
server.c:5169:176: 错误:‘struct redisServer’没有名为‘maxmemory’的成员
         serverLog(LL_WARNING,"WARNING: You specified a maxmemory value that is less than 1MB (current value is %llu bytes). Are you sure this is what you really want?", server.maxmemory);
                                                                                                                                                                                ^
server.c:5172:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员
     redisSetCpuAffinity(server.server_cpulist);
                               ^
server.c: 在函数‘hasActiveChildProcess’中:
server.c:1476:1: 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
 }
 ^
server.c: 在函数‘allPersistenceDisabled’中:
server.c:1482:1: 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
 }
 ^
server.c: 在函数‘writeCommandsDeniedByDiskError’中:
server.c:3790:1: 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
 }
 ^
server.c: 在函数‘iAmMaster’中:
server.c:4964:1: 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
 }
 ^
make[1]: *** [server.o] 错误 1
make[1]: 离开目录“/opt/redis-6.0.5/src”
make: *** [all] 错误 2

问题原因是gcc版本和redis版本不匹配导致的,需要升级gcc版本
通过 gcc -v 查看当前gcc版本为4.8.5
在这里插入图片描述
通过下面三个命令进行gcc版本升级

yum -y install centos-release-scl

在这里插入图片描述

yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

在这里插入图片描述

scl enable devtoolset-9 bash

在这里插入图片描述
再次查看gcc版本已升级到9.3.1
在这里插入图片描述

f.重新编译Makefile文件

在这里插入图片描述
编译成功
在这里插入图片描述
通过 make install 命令可以查看环境是否安装成功
在这里插入图片描述
至此,我们的redis环境搭建成功,redis安装目录为/usr/local/bin/
在这里插入图片描述

1.3.hello redis

redis最重要的就是redis.conf这个配置文件,在我们的redis减压目录可以看到:
在这里插入图片描述
我们需要将这个redis.conf配置文件备份到redis安装目录下,这样做的目的有二:
一是我们启动redis服务可能会根据需求修改这个配置文件,使其符合我们的服务策略;
二是备份保证了原文件不被污染,如果备份文件出现问题,可以通过原文件进行恢复。

a.备份redis配置文件

通过 mkdir yqConfig命令在redis安装目录下新建文件夹

yqConfig 文件夹可以自定义

在这里插入图片描述
通过 cp /opt/redis-6.0.5/redis.conf yqConfig/ 命令进行备份
在这里插入图片描述
查看redis配置文件是否成功备份至新建文件夹下
在这里插入图片描述

b.浅读redis.conf

配置文件中通过bind属性设置redis服务器ip,通过port属性设置redis服务器端口

在这里插入图片描述
在这里插入图片描述

为了更好的体验redis服务,我们需要修改redis配置文件,使其后台运行,这样就可以保证退出不会使redis服务停止:GENERAL 模块下的daemonize属性设置为yes即可
在这里插入图片描述

c.启动redis服务并连接

通过 cd ../ 回到上一层[redis安装]目录
在这里插入图片描述

通过redis-server 并指定redis配置文件可以启动redis服务,通过redis-cli 可以连接到redis服务

1.>启动redis服务

启动redis服务命令格式:redis-server 指定的redis配置文件
即以指定的redis配置文件启动redis服务,好处是可以实现redis集群

redis-server yqConfig/redis.conf

在这里插入图片描述

通过 ps -ef | grep redis 命令查看redis server 进程是否运行状态
在这里插入图片描述

2.>启动redis客户端

启动redis客户端命令格式:redis-cli -h ip -p port
即连接指定ip的redis服务器,端口为port参数
-a/u 123表示密码,-c 参数表示集群

redis-cli -h 127.0.0.1 -p 6379

在这里插入图片描述
通过 ps -ef | grep redis 命令查看redis client 进程是否运行状态
在这里插入图片描述

d.测试redis

redis服务和客户端现在都已经正常启动,那么接下来测试下redis的存储功能
通过 keys * 查看当前库存储的key,初始为空
在这里插入图片描述
通过 set name zhangsan 命令设置redis key为 name,value为zhangsan
在这里插入图片描述
再次查看
在这里插入图片描述
通过 get name 命令获取key的值
在这里插入图片描述
通过 shutdown 将服务器关机,exit退出
在这里插入图片描述
可以看到redis的两个进程都已经关闭
在这里插入图片描述
至此,我们已经完成在Linux系统搭建redis环境,并初略了解了下redis,那么接下来我们将docker上搭建redis并完成一系列操作。

2.docker搭建redis环境

因为上周我们已经成功搭建docker环境,所以如果你的Linux服务器还没有安装docker,那么可以参考下面这篇文章:
https://blog.csdn.net/weixin_43012300/article/details/107304808
通过 docker -v 命令查看当前环境docker版本
在这里插入图片描述

2.1.拉去redis镜像

通过 docker pull redis 命令下载redis最新版本镜像文件
在这里插入图片描述

2.2.查看docker镜像

通过 docker images查看redis镜像是否下载成功
在这里插入图片描述

2.3.运行redis镜像

通过 docker run -d -p 6379:6379 redis 运行redis镜像
在这里插入图片描述

2.4.进入docker容器

通过 docker ps 查看docker容器

在这里插入图片描述
通过docker exec -it f8e017fdb906 /bin/bash进入容器
在这里插入图片描述

2.5.操作redis

2.5.1进入redis安装目录

在这里插入图片描述

需要手动编写redis.conf 配置文件
但是发现在docker里vi命令不能使用
在这里插入图片描述
需要进行下面配置
实际在使用过程中,运行 apt-get update,然后执行 apt-get install -y vim,下载地址由于是海外地址,下载速度异常慢而且可能中断更新流程,所以做下面配置:

a.备份原文件

mv /etc/apt/sources.list /etc/apt/sources.list.bak
在这里插入图片描述

b.写入配置

echo 'deb http://mirrors.163.com/debian/ jessie main non-free contrib' > /etc/apt/sources.list
echo 'deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib' >> /etc/apt/sources.list
echo 'deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib' >> /etc/apt/sources.list
在这里插入图片描述

c.更新安装源

apt-get update
在这里插入图片描述

d.安装vim

apt-get install vi
或者 apt-get install vim
在这里插入图片描述
注意!!! :上面的abcd四步如果执行完毕后,vi或者vim编辑器还不好使,则是b步骤配置的安装源有问题,我的就是,所以最后我被迫采用原文件的安装源进行安装,其实也没有特别慢

2.5.2编写redis.conf配置文件

这里我们简单编写下redis配置文件,等下期再做补充,哈哈哈,主要是太累了
在这里插入图片描述

查看下配置文件
通过 cat redis.conf命令查看文件
在这里插入图片描述

2.5.3启动redis服务

以我们自定义的配置文件启动redis服务
在这里插入图片描述

2.5.4测试

我们另起一个crt连接窗口,进行redis端口测试
在这里插入图片描述
通过测试,发现正常
在这里插入图片描述

3.redis性能测试

redis-benchmark 是官方自带的一个压力[性能]测试工具
在这里插入图片描述

#命格式
redis-benchmark 参数

测试:50个并发连接,100个请求,即1s总请求为50 * 100

redis-benchmark  -p 6379 -c 50 -n 100

在这里插入图片描述
在这里插入图片描述
性能结果分析
在这里插入图片描述

4.总结

1.这次实践操作虽然耗时短,但是更累,首先是操作过程遇到的问题,其次是没有完成redis各种数据类型的读写操作,更重要的是没有搭建redis集群实现主从复制以及哨兵模式。
介绍下主从复制和哨兵模式的概念:
主机重要负责写操作,然后同步数据至从机,从机则负责读操作,这就是我们所说的主从复制。哨兵模式则是主从复制的升级,如果主机宕机,那么我们必须在从机中选择一台机器作为主机,这个过程需要手动在配置文件中配置,这样的话会有很大的问题,首先我们需要修改配置文件,然后重启服务器。那么哨兵模式就能很好得解决这一问题,它可以监控服务器的运行状态,如果发现主机宕机,那么它就会在从机中选择一台机器作为主机,完全不需要修改配置文件重启服务器。当然这个选择的过程不是这么简单的,是通过一种算法,投票选举,哪一台服务器票数多,则就成为新的主机;如果原主机重新上线,那么它会被重新监控,并纳入成为新主机的从机群。这整个过程就是哨兵模式的工作流程,由于是投票选举产生新主机,所以从机的数量最少必须是两台;当然哨兵模式也可以搭建集群,既监控redis服务器运行状态,也监控其他哨兵的状态,所有哨兵共同投票选出票数最多的Leader。
主从复制:经典模式为一主二从,一个master节点,两个slave节点,master节点负责写操作,slave节点负责读操作.该模式配置需要在从节点配置文件添加配置slaveof <masterip> <masterport>,slave节点第一次会从master进行全量复制,后面则进行增量复制.
但是该模式有以下缺点:当主节点挂掉后,从节点仍处于slave状态,导致redis只能进行读操作,只有master重新启动后才会恢复写操作;
由于上面模式的局限性,然后就有了哨兵模式:https://redis.io/topics/sentinel
新增配置文件sentinel.conf,配置文件内容为sentinel monitor <master-group-name> <ip> <port> <quorum>,其中sentinel monitor为固定写法,master-group-name自定义,被哨兵监视主节点的名字,被监视的主节点的ipport,quorum仲裁参数,用于投票选举,当主节点挂掉,哨兵进行投票,选举某一个从节点为主节点,如果值为1,则表示1个哨兵发现主库master无法访问的时候,就可以从slave从库中选举新的主库,在多个哨兵的环境下,这个值可以根据需要设置,比如2,3等,意味着至少需要有2、3个哨兵都发现主库无法访问的情况下才重新选举主库.当选举成功后,旧master如果再次启动后自动变为slave节点.由于 Sentinel 实现了自动发现机制,所以搭建哨兵集群比较简单,启动配置为监视master的新Sentinel,在 10 秒内,Sentinel 将获取其他 Sentinel 的列表以及附加到 master 的副本集.
2.这里简单介绍下redis集群:通过搭建多台redis服务器实现协同工作的模式就是redis集群。redis集群最低配置就是三主三从,三主指的是三个master节点,三个主节点彼此不通信,当客户端写请求过来时,redis自动将该请求分配到某一个主节点完成写操作,并将数据同步到其对应的从节点,同理,读请求过来时,则分配到对应主节点的从节点上,整个流程有点类似于关系型数据库表的水平拆分(将数据水平拆分存放).

Logo

更多推荐