centos7安装redis

1.下载:

wget https://download.redis.io/releases/redis-6.2.5.tar.gz

2.解压

tar -zxvf redis-6.2.5.tar.gz 

3.将解压后的文件夹,改名为redis,放到usr/local目录下

mv redis-6.2.5 redis  #改名为redis
mv redis /usr/local/  #移动到usr/local目录下

4.进入redis目录,执行以下命令 cd /usr/local/redis:

会在src目录下,生成几个redis相关文件,包括可执行文件

make #编译

5.如果遇到下面问题

server.c:5307:31: 错误:‘struct redisServer’没有名为‘server_xxx’的成员

问题原因

安装6版本的redis,gcc版本一定要5.3以上,centos6.6默认安装4.4.7;centos7.5.1804默认安装4.8.5,这里要升级gcc了

使用 gcc -v 查看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

#然后重新执行 make命令

6.进入src目录

make install #安装,将redis执行脚本放到usr/local/bin下,在其他地方也可以启动redis了

7.启动(以后台的方式启动)

redis-server & #启动服务端 
#(或者不加&,修改配置文件,把文件中的daemonize属性改为yes(表明需要在后台运行))

8.进入客户端,测试即可

redis-cli #进入客户端
set name zs
get name

上面步骤是如何在linux上安装redis,但是如果你本地想要连接redis,还需要进行下面操作

9.开放6379端口

我使用的是阿里云,直接设置安全组规则就可以了

10.使用vim命令修改redis配置文件 redis.conf

# 允许任何主机连接、访问
bind 127.0.0.1 改为 bind 0.0.0.0
 
# 关闭保护模式
protected-mode yes 改为 protected-mode no
 
# 允许启动后在后台运行,即关闭命令行窗口后仍能运行
daemonize no 改为 daemonize yes

#设置密码 这一步可做可不做
# requirepass foobared
requirepass abc    

设置密码后,想要访问redis,需要输入密码,使用命令行访问时,需要输入下面命令
#auth "abc"

11.修改完后,重启redis让配置生效

#1.使用下面命令查看redis端口号
ps -ef|grep redis
#2.然后输入kill redis端口号来关闭redis后台.(此处端口号使用自己查看到的)
kill 6981

12.参考

https://www.cnblogs.com/cutesheep/p/15169165.html

https://blog.csdn.net/tangcv/article/details/114095157

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个问题需要用到 TCP/IP 协议和套接字编程。下面是一个简单的 C 语言实现文件服务器和客户端的代码: 文件服务器代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <fcntl.h> #include <arpa/inet.h> #define BUF_SIZE 1024 void error_handling(char *message); int main(int argc, char *argv[]) { int serv_sock, clnt_sock; char buf[BUF_SIZE]; int file_fd, len, read_len, write_len; struct sockaddr_in serv_addr, clnt_addr; socklen_t clnt_addr_size; char file_path[BUF_SIZE]; char file_name[BUF_SIZE]; char tmp[BUF_SIZE]; if (argc != 2) { printf("Usage: %s <file_path>\n", argv[0]); exit(1); } strcpy(file_path, argv[1]); serv_sock = socket(PF_INET, SOCK_STREAM, 0); if (serv_sock == -1) error_handling("socket() error"); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(8080); if (bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) error_handling("bind() error"); if (listen(serv_sock, 5) == -1) error_handling("listen() error"); while (1) { clnt_addr_size = sizeof(clnt_addr); clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size); if (clnt_sock == -1) error_handling("accept() error"); printf("Client %s connected.\n", inet_ntoa(clnt_addr.sin_addr)); while (1) { memset(buf, 0, BUF_SIZE); len = read(clnt_sock, buf, BUF_SIZE); if (len == -1) error_handling("read() error"); if (strcmp(buf, "quit") == 0) { printf("Client %s disconnected.\n", inet_ntoa(clnt_addr.sin_addr)); close(clnt_sock); break; } else if (strcmp(buf, "ls") == 0) { FILE *fp; char cmd[BUF_SIZE]; memset(cmd, 0, BUF_SIZE); sprintf(cmd, "ls %s", file_path); fp = popen(cmd, "r"); while (fgets(tmp, BUF_SIZE, fp)) { write(clnt_sock, tmp, strlen(tmp)); } pclose(fp); } else { sprintf(file_name, "%s/%s", file_path, buf); file_fd = open(file_name, O_RDONLY); if (file_fd == -1) { write(clnt_sock, "File not found.\n", 16); } else { while (1) { memset(buf, 0, BUF_SIZE); read_len = read(file_fd, buf, BUF_SIZE); if (read_len == 0) { break; } else if (read_len == -1) { error_handling("read() error"); } write_len = write(clnt_sock, buf, read_len); if (write_len == -1) { error_handling("write() error"); } } close(file_fd); } } } } close(serv_sock); return 0; } void error_handling(char *message) { fputs(message, stderr); fputc('\n', stderr); exit(1); } ``` 文件客户端代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define BUF_SIZE 1024 void error_handling(char *message); int main(int argc, char *argv[]) { int sock; struct sockaddr_in serv_addr; char buf[BUF_SIZE]; char file_name[BUF_SIZE]; int len, file_fd, read_len, write_len; FILE *fp; if (argc != 3) { printf("Usage: %s <IP> <port>\n", argv[0]); exit(1); } sock = socket(PF_INET, SOCK_STREAM, 0); if (sock == -1) error_handling("socket() error"); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) error_handling("connect() error"); while (1) { printf("Enter command: "); fgets(buf, BUF_SIZE, stdin); if (buf[strlen(buf)-1] == '\n') buf[strlen(buf)-1] = '\0'; if (strcmp(buf, "quit") == 0) { write(sock, buf, strlen(buf)); break; } else if (strcmp(buf, "ls") == 0) { while (1) { memset(buf, 0, BUF_SIZE); len = read(sock, buf, BUF_SIZE); if (len == 0) break; else if (len == -1) error_handling("read() error"); printf("%s", buf); } } else { write(sock, buf, strlen(buf)); sprintf(file_name, "%s", buf); file_fd = open(file_name, O_WRONLY|O_CREAT, 0644); if (file_fd == -1) error_handling("open() error"); while (1) { memset(buf, 0, BUF_SIZE); read_len = read(sock, buf, BUF_SIZE); if (read_len == 0) break; else if (read_len == -1) error_handling("read() error"); write_len = write(file_fd, buf, read_len); if (write_len == -1) error_handling("write() error"); } close(file_fd); } } close(sock); return 0; } void error_handling(char *message) { fputs(message, stderr); fputc('\n', stderr); exit(1); } ``` 这段代码中,文件服务器在指定的文件夹中查找文件并发送给客户端,客户端输入下载命令后会从服务器下载文件并保存在客户端当前目录中。注意,这段代码只是一个简单实现,实际应用中还需要对错误进行处理和安全性进行考虑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值