当前位置: 首页 > 知识库问答 >
问题:

Redis中超过40亿个关键值对?

易俊驰
2023-03-14
import redis
import pymysql

conn = pymysql.connect(host='localhost',user='user',passwd='password',db='foo')
cur = conn.cursor()
cur.execute('select startipnum,endipnum,isp from wiki.ipisp order by endipnum;')
result = cur.fetchall()

r = redis.StrictRedis(host='localhost', port=6379, db=0)
ispctr = 1
for row in result:
    tempDict = {'ispname':row[2],'fromval':row[0],'toval':row[1]}
    namefield = ispctr
    r.hmset(namefield,tempDict)
    r.zadd('ispmaxindex',row[1],namefield)
    ispctr = ispctr+1
conn.close()

ipstotest = ['23.23.23.23','24.96.185.10','203.59.91.235','188.66.105.50','99.98.163.93']
for ip in ipstotest:
    ipvalsList = [int(ipoct) for ipoct in ip.split('.')]
    ipnum = (16777216*ipvalsList[0]) + (65536*ipvalsList[1]) + (256*ipvalsList[2]) + ipvalsList[3]
    ipnum = long(ipnum)
    tempVal1 = r.zrangebyscore('ispmaxindex',ipnum,float('Inf'),0,1)
    tempval2 = r.hgetall(tempval1[0])
    print tempval2['ispname']

共有1个答案

尚声
2023-03-14

您可以在Redis中存储4B个项目,但性能没有具体的降低,但您需要为此提供内存(即,所有内容都必须放入内存)。

这里介绍了用Redis实现这类查询的最佳方法:

在Redis中存储ip范围

还有这里:

Redis或Mongo来确定一个数字是否在范围内?

 类似资料:
  • 40亿个数中快速查找 题目描述 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? 分析与解法 海量数据处理往往会很有趣,有趣在什么地方呢? 空间,available的内存不够,需要反复交换内存 时间,速度太慢不行,毕竟那是海量数据 处理,数据是一次调用还是反复调用,因为针对时间和空间,通常来说,多次调用的话,势必会增加预处理以

  • 问题内容: 我有一个Redis设置键’a’和值‘1’,‘2’,‘3’。是否可以为集合中的每个键值对设置不同的到期时间。 例如,(’a’,‘1’)应该在60秒后过期,而as(’a’,‘2’)应该在120秒后过期。 问题答案: 抱歉不行。Redis的“容器”(即列表,哈希,集合和排序集合)不支持按成员过期,尽管过去多次要求使用此功能。 但是,您可以实现自己的逻辑以实现该结果。解决此问题的方法有几种-

  • 问题内容: 如何使用排序集从Redis获取多个键的值? 这将有两个用户。 如何在一个查询中检索具有键“ David”和“ Linda”的用户? 问题答案: 无需在Redis中引入新命令的方法有多种。 例如,您可以使用感兴趣的名称填充临时集,然后计算该临时集与zset之间的交集: 使用流水线操作,只会产生一次往返,并且您可以在tmp中填充任意数量的输入参数。 使用Redis 2.6,您还可以将这些行

  • 问题内容: 我目前正在与Redis一起玩,我有几个问题。是否可以从键数组中获取值? 例: 当我返回时。我可以遍历此列表并获得用户:1,获得用户:2。但这感觉不对,有没有办法让所有与会者的信息一目了然? 在rails中,我会做这样的事情: 但是在redis中我不能,因为它返回键,而不是存储在该键上的实际对象。 谢谢 :) 问题答案: 在项目上循环并同步访问每个元素不是很有效。使用Redis 2.4,

  • 我对使用REDIS相当陌生,但我已经看到了一些限制,或者我不确定该使用什么。 因此,用例是,我正在基于SQL中的数据进行批处理计算,这些数据运行单独的thread/GAE实例,例如100k是块大小,然后我需要以某种方式将这100k数据存储在REDIS中,并从不同的thread/GAE访问它(但我并不真正需要整个集合/哈希/值,我需要这100k中的一个)。 例如,我要存储的每个值如下: 我想检索例如

  • 问题内容: 我在我的socket.io聊天应用程序的Redis存储中存储了用户名/ SocketID对。 当用户断开连接时,我需要从Redis存储中删除用户名/ socketID对。我已经看到了如何从键中获取值,但从未从值中获取键。可能吗?或无论哪种方式,我怎么能只从值中删除键/值对。这是我的代码 用于在连接上添加存储 对于断开连接,客户端将不知道何时断开连接,可能是由于Internet连接断开而