Redis如何表示一个二维世界(MMO?)

标签 redis

我正在制作一款拥有 2d 世界的 MMO。 (这是一个学习项目,所以不要试图说服我放弃它 :) 我想为它试验一个新的数据存储,并且我读过关于 redis 的好东西。我已经完成了这些教程,我想我开始了解 Redis 的优势,但我不清楚如何为这样的世界建模。

这里有一些设计要求

  1. 我需要能够发送元素在世界中的当前位置。将这些划分为地理“房间”进行表演是可以接受的。
  2. 我需要能够在世界上“移动”一个物体,改变它的位置
  3. 我需要获取有关某个对象的信息:它的名称、类型、属性等。
  4. 我需要能够计算基本碰撞(obj a 想向右移动,那里有石头吗?)

您将如何在 Redis 中对其进行建模? redis是不是一个不合适的选择?

最佳答案

假设 2D 世界被分成已知坐标的正方形,您最好在 redis 中根据返回对象 ID 集(或导出/路径或地形等)的坐标生成键

例如一个非常简单的插图

obj:1:name = Rock
obj:1:passable = false
obj:2:name = Skeleton
obj:2:passable = true
loc:0:0:objs = {1,2} // loc:0:0 contains obj:1 and obj:2
loc:0:0:paths = {0:1, 1:0, 1:1} // three legal paths, to loc:0:1, loc:1:0, loc:1:1

我不是 Redis 专家,不知道这个域是否会导致您在 Redis 中出现问题,所以请对我的建议持保留态度。

关于Redis如何表示一个二维世界(MMO?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8874090/

相关文章:

java - 在java 8中与lettuce建立redis连接的正确方法

node.js - NodeJS Redis 监听器

java - Jedis断管异常

java - redis pub sub 和/或列表来实现数据收集器

node.js - 如何使用 Redis 在 Node Worker 之间共享缓存?

ruby - 无法从 Docker 容器内连接到 Redis (Redis::CannotConnectError)

asp.net - 简单.NET分布式缓存解决方案的建议

python - 如何按任务名称检查和取消 Celery 任务

发布/订阅中的 Redis 集群与 ZeroMQ,用于水平扩展的分布式系统

Magento 缓存 - 关于 Varnish、Redis、APC、Memcache 的困惑