从零开始搭建游戏服务器内存数据库Redis

2017年03月15日 17:37 0 点赞 0 评论 更新于 2025-11-21 13:37

引言

在服务器系统中,数据库是不可或缺的组成部分,作为数据存取的核心,某些系统操作需要实现数据的快速读写。在这种情况下,通常不会直接对 MySQL 这类持久性数据库进行读写操作。因为关系型数据库(如 MySQL)在查询或修改数据时,需要经过冗长的检索过程,这会显著影响系统效率。因此,我们一般会选择使用非关系型数据库(NoSQL)在内存中缓存数据,以实现快速的数据读写,然后定时将内存中的数据回写到 MySQL 数据库。

一、NoSQL 简介

常见的 NoSQL 数据库包括 Hbase(基于列存储)、MongoDB(文档型数据库,采用类似于 Json 的 Bson 语法存储)和 Redis(基于键值对存储)等。其中,Redis 通过 key - value 这种键值对的形式存储数据,在存取数据时检索速度更快,常用于满足高并发、大数据量的系统需求。

二、Redis 简介

根据 Redis 官方文档,Redis 是一个开源的内存数据结构存储系统,可作为数据库、缓存和消息中间件使用。

1. 优点

  • 支持多种数据结构:支持字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等多种数据结构。
  • 内存存储与持久化:数据库完全在内存中运行,同时具备不同级别的磁盘持久化机制,确保数据的安全性和可恢复性。
  • 数据复制与分片:数据可以复制到任意数量的从服务器,并且其分片机制支持将数据离散地存储在不同的物理机器上,从而克服单台机器内存大小的限制。

2. 应用场景

  • 数据库服务器:适合存储结构相对简单的数据。
  • 缓存系统:用于缓存需要大量读取、少量修改的数据,以提高系统的响应速度。
  • 实时消息系统:利用发布(Pub)/订阅(Sub)特性构建实时消息系统。
  • 队列支持:基于列表(list)实现队列(queue)和堆栈(stack)功能。

三、Redis 在 Windows 环境下的安装配置

1. 下载资源

可以到 Redis 官网资源下载页面下载最新的稳定版本。但由于 Redis 官网并不支持 Windows 平台,若要在 Windows 平台下安装使用 Redis,需要下载微软开源技术团队(Microsoft Open Tech group)开发和维护的 Win64 版本。这是 Redis 的源码,如果只是为了使用 Redis 的功能,可直接下载 Release 版本。

2. 解压安装

将下载的安装压缩包解压,查看文件夹下的文件目录。其中,redis.windows.conf 是 Redis 的配置文件,用于设置 Redis 的相关配置信息。

3. 启动服务端

以管理员权限启动命令提示符(cmd),定位到 Redis 安装包解压后的根目录下,输入以下指令启动 Redis 服务:

redis-server.exe redis.windows.conf

该指令通过读取 redis.windows.conf 中的配置信息来设置和启动服务器。此配置文件可以自定义,执行时只需修改启动指定的配置文件即可。可以通过设置将日志信息打印输出到日志文件中,具体信息可查看本文最后的附件中的 redis.confi

为了方便以后启动 Redis 数据库,可将此命令写入当前目录下的新建文本文件中,命名为 startService.bat,内容即为上述指令。以后双击此文件即可启动服务。若启动成功,会看到相应的提示信息。

4. 启动客户端

参考上述做法,新建一个文件,命名为 startClient.bat,内容如下:

redis-cli.exe -h 127.0.0.1 -p 6379 -n 1

这是启动 Redis 客户端连接 Redis 服务器的指令。其中,-h 为连接服务器的 IP 地址,-p 是服务器端口号,-n 并不是用户名,这里可能存在误解,-n 通常用于指定数据库编号,而客户端连接密码一般通过 auth 命令在连接后进行验证。

双击 startClient.bat 启动客户端,启动成功会有相应提示。此外,还可以在服务端看到接收到客户端连接的打印信息。

附件:自定义配置文件 redis.confi 的解析

<a id="heading-11-是否作为守护进程运行"></a>
# 是否作为守护进程运行
daemonize no
<a id="heading-12-Redis-默认监听端口"></a>
# Redis 默认监听端口
port 6379
<a id="heading-13-客户端闲置多少秒后-断开连接"></a>
# 客户端闲置多少秒后,断开连接
timeout 300
<a id="heading-14-日志显示级别"></a>
# 日志显示级别
loglevel verbose
<a id="heading-15-指定日志输出的文件名-也可指定到标准输出端口"></a>
# 指定日志输出的文件名,也可指定到标准输出端口
logfile redis.log
<a id="heading-16-设置数据库的数量-默认最大是-16-默认连接的数据库是-0-可以通过-select-N-来连接不同的数据库"></a>
# 设置数据库的数量,默认最大是 16,默认连接的数据库是 0,可以通过 select N 来连接不同的数据库
databases 32
<a id="heading-17-Dump-持久化策略"></a>
# Dump 持久化策略
<a id="heading-18-当有一条-Keys-数据被改变是-900-秒刷新到-disk-一次"></a>
# 当有一条 Keys 数据被改变是,900 秒刷新到 disk 一次
<a id="heading-19-save-900-1"></a>
# save 900 1
<a id="heading-20-当有-10-条-Keys-数据被改变时-300-秒刷新到-disk-一次"></a>
# 当有 10 条 Keys 数据被改变时,300 秒刷新到 disk 一次
save 300 100
<a id="heading-21-当有-1w-条-keys-数据被改变时-60-秒刷新到-disk-一次"></a>
# 当有 1w 条 keys 数据被改变时,60 秒刷新到 disk 一次
save 6000 10000
<a id="heading-22-当-dump--rdb-数据库的时候是否压缩数据对象"></a>
# 当 dump .rdb 数据库的时候是否压缩数据对象
rdbcompression yes
<a id="heading-23-dump-持久化数据保存的文件名"></a>
# dump 持久化数据保存的文件名
dbfilename dump.rdb
###########    Replication #####################
<a id="heading-24-Redis-的主从配置-配置-slaveof-则实例作为从服务器"></a>
# Redis 的主从配置,配置 slaveof 则实例作为从服务器
<a id="heading-25-slaveof-192-168-0-105-6379"></a>
# slaveof 192.168.0.105 6379
<a id="heading-26-主服务器连接密码"></a>
# 主服务器连接密码
<a id="heading-27-masterauth--master-password-"></a>
# masterauth <master-password>
############## 安全性 ###########
<a id="heading-28-设置连接密码"></a>
# 设置连接密码
<a id="heading-29-requirepass--password-"></a>
# requirepass <password>
############### LIMITS ##############
<a id="heading-30-最大客户端连接数"></a>
# 最大客户端连接数
<a id="heading-31-maxclients-128"></a>
# maxclients 128
<a id="heading-32-最大内存使用率"></a>
# 最大内存使用率
<a id="heading-33-maxmemory--bytes-"></a>
# maxmemory <bytes>
########## APPEND ONLY MODE #########
<a id="heading-34-是否开启日志功能"></a>
# 是否开启日志功能
appendonly no
<a id="heading-35-AOF-持久化策略"></a>
# AOF 持久化策略
<a id="heading-36-appendfsync-always"></a>
# appendfsync always
<a id="heading-37-appendfsync-everysec"></a>
# appendfsync everysec
<a id="heading-38-appendfsync-no"></a>
# appendfsync no
################ VIRTUAL MEMORY ###########
<a id="heading-39-是否开启-VM-功能"></a>
# 是否开启 VM 功能
<a id="heading-40-vm-enabled-no"></a>
# vm-enabled no
<a id="heading-41-vm-enabled-yes"></a>
# vm-enabled yes
<a id="heading-42-vm-swap-file-logs-redis-swap"></a>
# vm-swap-file logs/redis.swap
<a id="heading-43-vm-max-memory-0"></a>
# vm-max-memory 0
<a id="heading-44-vm-page-size-32"></a>
# vm-page-size 32
<a id="heading-45-vm-pages-134217728"></a>
# vm-pages 134217728
<a id="heading-46-vm-max-threads-4"></a>
# vm-max-threads 4