python 连接 redis

1. Redis 与 StrictRedis

Redis 与 StrictRedis 这两个类都可以用来连接redis,他们有什么区别么?我现在使用的redis-py的版本是 3.5.3, 他们没有任何区别,根本上说他们就是同一个类,源码里写的清清楚楚

StrictRedis = Redis

既然如此,为何搞出两个类呢,这完全是为了兼容旧版本,在旧版本里,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。

因此,如果你使用的是比较新的版本,那么就不要再纠结这两个类的区别了。

2. 连接redis

from redis.client import Redis

r = Redis(host='127.0.0.1', port=6379, db=0, password='密码')
r.set('foo', 'ok')
print(r.get('foo'))

上述代码,连接了redis,并设置key foo的值为ok,然后又从redis中读取foo所对应的value。这段代码看似简单,但里面暗藏了一个该库的机制,惰性连接。

from redis.client import Redis

r = Redis(host='127.0.0.1', port=9877, db=0, password='密码')

如果我只写这一段代码,并且提供错误的port,执行这段代码时不会出错,是的,它真的不会出错,尽管端口号是错误的。原因在于,只有在真正的与数据库交互时,才会发起正式的连接,第一段代码里因为有set 的动作因此会真正的建立连接,第二段代码里只是看上去建立了连接,但并没有。

3. bytes 数据类型

在上面的例子中,最后输出的内容并不是字符串ok, 而是b'ok', 它的数据类型是字节串,所有从redis中取出来的数据,都是字节串。

你可以将字节串转成字符串

from redis.client import Redis

r = Redis(host='127.0.0.1', port=6379, db=0, password='198671724zds')
r.set('foo', 'ok')
res = r.get('foo')
print(type(res))

str_res = res.decode(encoding='utf-8')      # bytes 转 str
print(type(str_res), str_res)

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案