一个简单的业务场景,不知如何实现

2018-11-07 10:17:40 +08:00
 lanqing

业务描述

我原本的想法

弊端

希望大佬能指点一二呀= =,

2663 次点击
所在节点    Python
18 条回复
gaius
2018-11-07 10:20:53 +08:00
循环查 redis 是什么意思?
lanqing
2018-11-07 10:22:05 +08:00
@gaius 因为 redis 中的数据是动态加入进去的,当那个 socket 没有查到他想要的数据的时候,就会过个两秒钟接着去 redis 中查数据,一直到查到为止
xiaoxinshiwo
2018-11-07 10:34:40 +08:00
redis 不是有发布和订阅机制吗?
再不然使用消息中间件,订阅 topic 然后监听接收消息啊
changnet
2018-11-07 10:36:18 +08:00
redis 是 kv 结构,为啥是循环查找而不是按 key 取
10000 个 socket 连接是支持的

说实在,不知道具体业务。不知道 client 是面对用户还是内部接口,不知道请求频率,不知道数据结构,这种问题发出来也没什么人帮得了你
newtype0092
2018-11-07 10:37:01 +08:00
你只是想实现一个队列消息加服务端推送吧。。。
ipoh
2018-11-07 10:37:23 +08:00
不用多线程的模型,用异步的方式
服务器这边维护一个{clientID->socket 句柄}的哈希表
然后启一个线程去循环查 redis 每个元素,元素的在上面哈希表中就用对应的 socket 句柄发送过去
richzhu
2018-11-07 10:39:46 +08:00
0.0 客户端知道自己想要什么吧? 客户端想要的称之为 Key, 然后服务端可以根据 Key 去 redis 取? 取到的值叫 value ? 酱紫。。不需要循环吧?
niubee1
2018-11-07 10:42:27 +08:00
我倒是很想知道什么样的人会设计 redis 用循环的方式读取数据, 莫不是来搞笑的
lauix
2018-11-07 10:42:33 +08:00
你这样是 client 主动拉取,为什么不主动推送。
不想自己写,可以用现成的 比如 MQTT 协议,ZMQ , T-IO 等开业项目。
lanqing
2018-11-07 10:42:53 +08:00
@xiaoxinshiwo 非常感谢,发布和订阅机制能帮助我
knightlhs
2018-11-07 10:44:07 +08:00
10000 个 cient 也不过是 10000 个 list 而已
每个 client 去查找自己的 list 找到数据就返回 找不到就阻塞 直到 超时就好啊
你只要根据数据不同 分发到不同的 list 去就可以了

你这个 redis 没学好啊 redis 支持那么多种用法跟结构啊
Outliver0
2018-11-07 10:44:29 +08:00
epoll
lanqing
2018-11-07 10:45:59 +08:00
@lauix 感谢,对,可以理解是 client 主动拉取,但是不还是需要 client 主动过来建立链接,然后才能发送过去吗= =
lanqing
2018-11-07 10:48:50 +08:00
@ipoh 可以,我愚笨了,感谢!
lauix
2018-11-07 10:51:38 +08:00
@lanqing 打错字了,是开源。
client 当然要连接 server 端了,但是 client 只接收消息,server 端 有数据的时候,主动发送到 client。
和其他人说的 发布订阅一个道理 。可以自己写,可以采用其他开源的项目。
lanqing
2018-11-07 10:52:41 +08:00
@lauix 好的,谢谢
lanqing
2018-11-07 11:01:47 +08:00
@richzhu 如果没有就是要循环去查了哦= =,
knightlhs
2018-11-07 11:45:06 +08:00
@lanqing redis 如果需要循环查找的话一定是你的使用方式哪里错了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/505269

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX