redis

redis

python redis 是没有 blpush这个操作的

python马化云 发表了文章 • 0 个评论 • 892 次浏览 • 2024-05-22 09:29 • 来自相关话题

上面的redis代码里面:
 
class RedisCls:

def __init__(self):
self.conn = self.getConn()

def getConn(self):
try:
r = redis.Redis(host=redisconfig['redis']['host'], port=redisconfig['redis']['port'], db=0,
decode_responses=True, password=redisconfig['redis']['password'], socket_connect_timeout=5)
except Exception as e:
print(e)
raise IOError('connect redis failed')
else:
return r


def get(self, key):
return self.conn.get(key)


def set(self, key, value):
return self.conn.set(key, value)

def pop(self, key):
print('==== pop data ====')
return self.conn.brpop(key)

def push(self, key, value):
print('==== push data ====')
self.conn.blpush(key, value)




  
报错:
AttributeError: 'Redis' object has no attribute 'blpush'. Did you mean: 'lpush'?
 
问题在于这一句:

self.conn.blpush(key, value)
 
python redis里面是没有blpush这个操作的。
也就是没有阻塞插入这个动作。 比如一个list满了,就阻塞插入数据,在python redis里面是没有这个操作。
你可以用llen 先判读一下长度,然后再决定是否插入就可以了。
 
  查看全部
上面的redis代码里面:
 
class RedisCls:

def __init__(self):
self.conn = self.getConn()

def getConn(self):
try:
r = redis.Redis(host=redisconfig['redis']['host'], port=redisconfig['redis']['port'], db=0,
decode_responses=True, password=redisconfig['redis']['password'], socket_connect_timeout=5)
except Exception as e:
print(e)
raise IOError('connect redis failed')
else:
return r


def get(self, key):
return self.conn.get(key)


def set(self, key, value):
return self.conn.set(key, value)

def pop(self, key):
print('==== pop data ====')
return self.conn.brpop(key)

def push(self, key, value):
print('==== push data ====')
self.conn.blpush(key, value)

20240522092858.png

  
报错:
AttributeError: 'Redis' object has no attribute 'blpush'. Did you mean: 'lpush'?

 
问题在于这一句:

self.conn.blpush(key, value)
 
python redis里面是没有blpush这个操作的。
也就是没有阻塞插入这个动作。 比如一个list满了,就阻塞插入数据,在python redis里面是没有这个操作。
你可以用llen 先判读一下长度,然后再决定是否插入就可以了。
 
 

折腾了半天,结果发现windows上无法使用redis 布隆过滤器插件

数据库李魔佛 发表了文章 • 0 个评论 • 3684 次浏览 • 2021-05-16 06:09 • 来自相关话题

运行实例代码:

# Using Bloom Filter from redisbloom.client import Client rb = Client() rb.bfCreate('bloom', 0.01, 1000) rb.bfAdd('bloom', 'foo') # returns 1 rb.bfAdd('bloom', 'foo') # returns 0 rb.bfExists('bloom', 'foo') # returns 1 rb.bfExists('bloom', 'noexist') # returns 0
 
 
报错:
redis.exceptions.ResponseError: unknown command BF.RESERVE, with args beginning with: bloom, 0.01, 1000 
 连docker上得镜像也不支持。
更别说windows版本上的redis按照插件了。
 
只好用linux的docker了。

docker run -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest

  查看全部
运行实例代码:

# Using Bloom Filter from redisbloom.client import Client rb = Client() rb.bfCreate('bloom', 0.01, 1000) rb.bfAdd('bloom', 'foo') # returns 1 rb.bfAdd('bloom', 'foo') # returns 0 rb.bfExists('bloom', 'foo') # returns 1 rb.bfExists('bloom', 'noexist') # returns 0
 
 
报错:
redis.exceptions.ResponseError: unknown command BF.RESERVE, with args beginning with: bloom, 0.01, 1000 
 连docker上得镜像也不支持。
更别说windows版本上的redis按照插件了。
 
只好用linux的docker了。

docker run -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest

 

redis启动报错

数据库李魔佛 发表了文章 • 0 个评论 • 3991 次浏览 • 2021-02-21 14:50 • 来自相关话题

使用systemctl start redis-server启动redis报错:
 
Failed to start Advanced key-value store
 
csdn查出来的全是垃圾。
 
后面再stackoverflow看了下,尝试其中一个方案:
使用命令启动
/usr/bin/redis-server /etc/redis/redis-conf
 
然后一起就又正常了, 如果还是报错,把bind的ip地址后面那截改为127.0.0.1,后面那个ipv6格式的不要 查看全部
使用systemctl start redis-server启动redis报错:
 
Failed to start Advanced key-value store
 
csdn查出来的全是垃圾。
 
后面再stackoverflow看了下,尝试其中一个方案:
使用命令启动
/usr/bin/redis-server /etc/redis/redis-conf
 
然后一起就又正常了, 如果还是报错,把bind的ip地址后面那截改为127.0.0.1,后面那个ipv6格式的不要

python redis.StrictRedis.from_url 连接redis

数据库李魔佛 发表了文章 • 0 个评论 • 7084 次浏览 • 2019-08-23 16:43 • 来自相关话题

python redis.StrictRedis.from_url 连接redis
用url的方式连接redis
 
r=redis.StrictRedis.from_url(url)
 
url为以下的格式:
 redis://[:password]@localhost:6379/0
rediss://[:password]@localhost:6379/0
unix://[:password]@/path/to/socket.sock?db=0
 原创文章,转载请注明出处:
http://30daydo.com/article/527
  查看全部
python redis.StrictRedis.from_url 连接redis
用url的方式连接redis
 
r=redis.StrictRedis.from_url(url)
 
url为以下的格式:
 
redis://[:password]@localhost:6379/0
rediss://[:password]@localhost:6379/0
unix://[:password]@/path/to/socket.sock?db=0

 原创文章,转载请注明出处:
http://30daydo.com/article/527
 

redis health_check_interval 参数无效

数据库李魔佛 发表了文章 • 0 个评论 • 8812 次浏览 • 2019-08-09 16:13 • 来自相关话题

因为一直在循环阻塞里面监听redis的发布者,时间长了,redis就掉线了或者网络终端,就会一直卡在等待接受,而发布者后续发布的数据就接收不到了。
 
# helper
class RedisHelp(object):

def __init__(self,channel):
# self.pool = redis.ConnectionPool('10.18.6.46',port=6379)

# self.conn = redis.Redis(connection_pool=self.pool)
# 上面的方式无法使用订阅者 发布者模式

self.conn = redis.Redis(host='10.18.6.46')
self.publish_channel = channel
self.subscribe_channel = channel


def publish(self,msg):
self.conn.publish(self.publish_channel,msg) # 1. 渠道名 ,2 信息

def subscribe(self):
self.pub = self.conn.pubsub()
self.pub.subscribe(self.subscribe_channel)
self.pub.parse_response()
print('initial')
return self.pub


helper = RedisHelp('cuiqingcai')

# 订阅者
if sys.argv[1]=='s':
print('in subscribe mode')
pub = helper.subscribe()
while 1:
print('waiting for publish')
pubsub.check_health()
msg = pub.parse_response()

s=str(msg[2],encoding='utf-8')
print(s)
if s=='exit':
break


# 发布者
elif sys.argv[1]=='p':
print('in publish mode')
msg = sys.argv[2]
print(f'msg -> {msg}')
helper.publish(msg)
而官网的文档说使用参数:
health_check_interval=30 # 30s心跳检测一次
 
但实际上这个参数在最新的redis 3.3以上是被去掉了。 所以是无办法使用 self.conn = redis.Redis(host='10.18.6.46',health_check_interval=30)
 
这点在作者的github页面里面也得到了解释。
https://github.com/andymccurdy/redis-py/issues/1199
 
所以要改成
data = client.blpop('key', timeout=300)
300s后超时,data为None,重新监听。
 
  查看全部
因为一直在循环阻塞里面监听redis的发布者,时间长了,redis就掉线了或者网络终端,就会一直卡在等待接受,而发布者后续发布的数据就接收不到了。
 
 # helper
class RedisHelp(object):

def __init__(self,channel):
# self.pool = redis.ConnectionPool('10.18.6.46',port=6379)

# self.conn = redis.Redis(connection_pool=self.pool)
# 上面的方式无法使用订阅者 发布者模式

self.conn = redis.Redis(host='10.18.6.46')
self.publish_channel = channel
self.subscribe_channel = channel


def publish(self,msg):
self.conn.publish(self.publish_channel,msg) # 1. 渠道名 ,2 信息

def subscribe(self):
self.pub = self.conn.pubsub()
self.pub.subscribe(self.subscribe_channel)
self.pub.parse_response()
print('initial')
return self.pub


helper = RedisHelp('cuiqingcai')

# 订阅者
if sys.argv[1]=='s':
print('in subscribe mode')
pub = helper.subscribe()
while 1:
print('waiting for publish')
pubsub.check_health()
msg = pub.parse_response()

s=str(msg[2],encoding='utf-8')
print(s)
if s=='exit':
break


# 发布者
elif sys.argv[1]=='p':
print('in publish mode')
msg = sys.argv[2]
print(f'msg -> {msg}')
helper.publish(msg)

而官网的文档说使用参数:
health_check_interval=30 # 30s心跳检测一次
 
但实际上这个参数在最新的redis 3.3以上是被去掉了。 所以是无办法使用 self.conn = redis.Redis(host='10.18.6.46',health_check_interval=30)
 
这点在作者的github页面里面也得到了解释。
https://github.com/andymccurdy/redis-py/issues/1199
 
所以要改成
data = client.blpop('key', timeout=300)
300s后超时,data为None,重新监听。
 
 

python redis 笔记

python李魔佛 发表了文章 • 0 个评论 • 2926 次浏览 • 2017-08-24 20:33 • 来自相关话题

刚接触redis,难免会有那么一些坑,新人一定会踩到的。 把自己的坑写出来,让以后新人少踩点吧。 
踩坑也不是什么坏事,不过浪费点时间而已。
 
1. 配置文件redis.config
 
如果你要远程访问你的redis服务器,那么里面有一行你一定要注释掉:

# bind 127.0.0.1
 
 
解释:

#  指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
 
 
当时调了半天没连上去,就是被这个参数给害的。
 
2. redis-cli 连接本地redis服务器。 本地服务器端口已经改变。
开始使用redis-cli 127.0.0.1:8888 结果是一直都出错。
然后在某个配置文档看到测试本地端口,使用的命令是 redis-cli -p 8888
不然上面的永远都会连着6379.
 
待续。 不定期更新。 
 
 
 
 
 
 
 
 
  查看全部
刚接触redis,难免会有那么一些坑,新人一定会踩到的。 把自己的坑写出来,让以后新人少踩点吧。 
踩坑也不是什么坏事,不过浪费点时间而已。
 
1. 配置文件redis.config
 
如果你要远程访问你的redis服务器,那么里面有一行你一定要注释掉:

# bind 127.0.0.1
 
 
解释:

#  指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
 
 
当时调了半天没连上去,就是被这个参数给害的。
 
2. redis-cli 连接本地redis服务器。 本地服务器端口已经改变。
开始使用redis-cli 127.0.0.1:8888 结果是一直都出错。
然后在某个配置文档看到测试本地端口,使用的命令是 redis-cli -p 8888
不然上面的永远都会连着6379.
 
待续。 不定期更新。 
 
 
 
 
 
 
 
 
 

python redis 是没有 blpush这个操作的

python马化云 发表了文章 • 0 个评论 • 892 次浏览 • 2024-05-22 09:29 • 来自相关话题

上面的redis代码里面:
 
class RedisCls:

def __init__(self):
self.conn = self.getConn()

def getConn(self):
try:
r = redis.Redis(host=redisconfig['redis']['host'], port=redisconfig['redis']['port'], db=0,
decode_responses=True, password=redisconfig['redis']['password'], socket_connect_timeout=5)
except Exception as e:
print(e)
raise IOError('connect redis failed')
else:
return r


def get(self, key):
return self.conn.get(key)


def set(self, key, value):
return self.conn.set(key, value)

def pop(self, key):
print('==== pop data ====')
return self.conn.brpop(key)

def push(self, key, value):
print('==== push data ====')
self.conn.blpush(key, value)




  
报错:
AttributeError: 'Redis' object has no attribute 'blpush'. Did you mean: 'lpush'?
 
问题在于这一句:

self.conn.blpush(key, value)
 
python redis里面是没有blpush这个操作的。
也就是没有阻塞插入这个动作。 比如一个list满了,就阻塞插入数据,在python redis里面是没有这个操作。
你可以用llen 先判读一下长度,然后再决定是否插入就可以了。
 
  查看全部
上面的redis代码里面:
 
class RedisCls:

def __init__(self):
self.conn = self.getConn()

def getConn(self):
try:
r = redis.Redis(host=redisconfig['redis']['host'], port=redisconfig['redis']['port'], db=0,
decode_responses=True, password=redisconfig['redis']['password'], socket_connect_timeout=5)
except Exception as e:
print(e)
raise IOError('connect redis failed')
else:
return r


def get(self, key):
return self.conn.get(key)


def set(self, key, value):
return self.conn.set(key, value)

def pop(self, key):
print('==== pop data ====')
return self.conn.brpop(key)

def push(self, key, value):
print('==== push data ====')
self.conn.blpush(key, value)

20240522092858.png

  
报错:
AttributeError: 'Redis' object has no attribute 'blpush'. Did you mean: 'lpush'?

 
问题在于这一句:

self.conn.blpush(key, value)
 
python redis里面是没有blpush这个操作的。
也就是没有阻塞插入这个动作。 比如一个list满了,就阻塞插入数据,在python redis里面是没有这个操作。
你可以用llen 先判读一下长度,然后再决定是否插入就可以了。
 
 

折腾了半天,结果发现windows上无法使用redis 布隆过滤器插件

数据库李魔佛 发表了文章 • 0 个评论 • 3684 次浏览 • 2021-05-16 06:09 • 来自相关话题

运行实例代码:

# Using Bloom Filter from redisbloom.client import Client rb = Client() rb.bfCreate('bloom', 0.01, 1000) rb.bfAdd('bloom', 'foo') # returns 1 rb.bfAdd('bloom', 'foo') # returns 0 rb.bfExists('bloom', 'foo') # returns 1 rb.bfExists('bloom', 'noexist') # returns 0
 
 
报错:
redis.exceptions.ResponseError: unknown command BF.RESERVE, with args beginning with: bloom, 0.01, 1000 
 连docker上得镜像也不支持。
更别说windows版本上的redis按照插件了。
 
只好用linux的docker了。

docker run -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest

  查看全部
运行实例代码:

# Using Bloom Filter from redisbloom.client import Client rb = Client() rb.bfCreate('bloom', 0.01, 1000) rb.bfAdd('bloom', 'foo') # returns 1 rb.bfAdd('bloom', 'foo') # returns 0 rb.bfExists('bloom', 'foo') # returns 1 rb.bfExists('bloom', 'noexist') # returns 0
 
 
报错:
redis.exceptions.ResponseError: unknown command BF.RESERVE, with args beginning with: bloom, 0.01, 1000 
 连docker上得镜像也不支持。
更别说windows版本上的redis按照插件了。
 
只好用linux的docker了。

docker run -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest

 

redis启动报错

数据库李魔佛 发表了文章 • 0 个评论 • 3991 次浏览 • 2021-02-21 14:50 • 来自相关话题

使用systemctl start redis-server启动redis报错:
 
Failed to start Advanced key-value store
 
csdn查出来的全是垃圾。
 
后面再stackoverflow看了下,尝试其中一个方案:
使用命令启动
/usr/bin/redis-server /etc/redis/redis-conf
 
然后一起就又正常了, 如果还是报错,把bind的ip地址后面那截改为127.0.0.1,后面那个ipv6格式的不要 查看全部
使用systemctl start redis-server启动redis报错:
 
Failed to start Advanced key-value store
 
csdn查出来的全是垃圾。
 
后面再stackoverflow看了下,尝试其中一个方案:
使用命令启动
/usr/bin/redis-server /etc/redis/redis-conf
 
然后一起就又正常了, 如果还是报错,把bind的ip地址后面那截改为127.0.0.1,后面那个ipv6格式的不要

python redis.StrictRedis.from_url 连接redis

数据库李魔佛 发表了文章 • 0 个评论 • 7084 次浏览 • 2019-08-23 16:43 • 来自相关话题

python redis.StrictRedis.from_url 连接redis
用url的方式连接redis
 
r=redis.StrictRedis.from_url(url)
 
url为以下的格式:
 redis://[:password]@localhost:6379/0
rediss://[:password]@localhost:6379/0
unix://[:password]@/path/to/socket.sock?db=0
 原创文章,转载请注明出处:
http://30daydo.com/article/527
  查看全部
python redis.StrictRedis.from_url 连接redis
用url的方式连接redis
 
r=redis.StrictRedis.from_url(url)
 
url为以下的格式:
 
redis://[:password]@localhost:6379/0
rediss://[:password]@localhost:6379/0
unix://[:password]@/path/to/socket.sock?db=0

 原创文章,转载请注明出处:
http://30daydo.com/article/527
 

redis health_check_interval 参数无效

数据库李魔佛 发表了文章 • 0 个评论 • 8812 次浏览 • 2019-08-09 16:13 • 来自相关话题

因为一直在循环阻塞里面监听redis的发布者,时间长了,redis就掉线了或者网络终端,就会一直卡在等待接受,而发布者后续发布的数据就接收不到了。
 
# helper
class RedisHelp(object):

def __init__(self,channel):
# self.pool = redis.ConnectionPool('10.18.6.46',port=6379)

# self.conn = redis.Redis(connection_pool=self.pool)
# 上面的方式无法使用订阅者 发布者模式

self.conn = redis.Redis(host='10.18.6.46')
self.publish_channel = channel
self.subscribe_channel = channel


def publish(self,msg):
self.conn.publish(self.publish_channel,msg) # 1. 渠道名 ,2 信息

def subscribe(self):
self.pub = self.conn.pubsub()
self.pub.subscribe(self.subscribe_channel)
self.pub.parse_response()
print('initial')
return self.pub


helper = RedisHelp('cuiqingcai')

# 订阅者
if sys.argv[1]=='s':
print('in subscribe mode')
pub = helper.subscribe()
while 1:
print('waiting for publish')
pubsub.check_health()
msg = pub.parse_response()

s=str(msg[2],encoding='utf-8')
print(s)
if s=='exit':
break


# 发布者
elif sys.argv[1]=='p':
print('in publish mode')
msg = sys.argv[2]
print(f'msg -> {msg}')
helper.publish(msg)
而官网的文档说使用参数:
health_check_interval=30 # 30s心跳检测一次
 
但实际上这个参数在最新的redis 3.3以上是被去掉了。 所以是无办法使用 self.conn = redis.Redis(host='10.18.6.46',health_check_interval=30)
 
这点在作者的github页面里面也得到了解释。
https://github.com/andymccurdy/redis-py/issues/1199
 
所以要改成
data = client.blpop('key', timeout=300)
300s后超时,data为None,重新监听。
 
  查看全部
因为一直在循环阻塞里面监听redis的发布者,时间长了,redis就掉线了或者网络终端,就会一直卡在等待接受,而发布者后续发布的数据就接收不到了。
 
 # helper
class RedisHelp(object):

def __init__(self,channel):
# self.pool = redis.ConnectionPool('10.18.6.46',port=6379)

# self.conn = redis.Redis(connection_pool=self.pool)
# 上面的方式无法使用订阅者 发布者模式

self.conn = redis.Redis(host='10.18.6.46')
self.publish_channel = channel
self.subscribe_channel = channel


def publish(self,msg):
self.conn.publish(self.publish_channel,msg) # 1. 渠道名 ,2 信息

def subscribe(self):
self.pub = self.conn.pubsub()
self.pub.subscribe(self.subscribe_channel)
self.pub.parse_response()
print('initial')
return self.pub


helper = RedisHelp('cuiqingcai')

# 订阅者
if sys.argv[1]=='s':
print('in subscribe mode')
pub = helper.subscribe()
while 1:
print('waiting for publish')
pubsub.check_health()
msg = pub.parse_response()

s=str(msg[2],encoding='utf-8')
print(s)
if s=='exit':
break


# 发布者
elif sys.argv[1]=='p':
print('in publish mode')
msg = sys.argv[2]
print(f'msg -> {msg}')
helper.publish(msg)

而官网的文档说使用参数:
health_check_interval=30 # 30s心跳检测一次
 
但实际上这个参数在最新的redis 3.3以上是被去掉了。 所以是无办法使用 self.conn = redis.Redis(host='10.18.6.46',health_check_interval=30)
 
这点在作者的github页面里面也得到了解释。
https://github.com/andymccurdy/redis-py/issues/1199
 
所以要改成
data = client.blpop('key', timeout=300)
300s后超时,data为None,重新监听。
 
 

python redis 笔记

python李魔佛 发表了文章 • 0 个评论 • 2926 次浏览 • 2017-08-24 20:33 • 来自相关话题

刚接触redis,难免会有那么一些坑,新人一定会踩到的。 把自己的坑写出来,让以后新人少踩点吧。 
踩坑也不是什么坏事,不过浪费点时间而已。
 
1. 配置文件redis.config
 
如果你要远程访问你的redis服务器,那么里面有一行你一定要注释掉:

# bind 127.0.0.1
 
 
解释:

#  指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
 
 
当时调了半天没连上去,就是被这个参数给害的。
 
2. redis-cli 连接本地redis服务器。 本地服务器端口已经改变。
开始使用redis-cli 127.0.0.1:8888 结果是一直都出错。
然后在某个配置文档看到测试本地端口,使用的命令是 redis-cli -p 8888
不然上面的永远都会连着6379.
 
待续。 不定期更新。 
 
 
 
 
 
 
 
 
  查看全部
刚接触redis,难免会有那么一些坑,新人一定会踩到的。 把自己的坑写出来,让以后新人少踩点吧。 
踩坑也不是什么坏事,不过浪费点时间而已。
 
1. 配置文件redis.config
 
如果你要远程访问你的redis服务器,那么里面有一行你一定要注释掉:

# bind 127.0.0.1
 
 
解释:

#  指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
 
 
当时调了半天没连上去,就是被这个参数给害的。
 
2. redis-cli 连接本地redis服务器。 本地服务器端口已经改变。
开始使用redis-cli 127.0.0.1:8888 结果是一直都出错。
然后在某个配置文档看到测试本地端口,使用的命令是 redis-cli -p 8888
不然上面的永远都会连着6379.
 
待续。 不定期更新。