1、aof文件不产生问题
1.1直接redis-server.exe不会产生,在命令redis-server后加上要修改的配置名和值(可以设置多对),没有设置的将使用默认配置;
如:redis-server --port 6389 –timeout 3000
虽然可以自定义配置。但是如果修改的配置较多则应该保存在配置文件中,不建议使用这种方式。
(配置文件启动
1.2将配置文件写到指定的redis.conf文件里,启动时在redis-server命令后,指定配置文件的路径,则redis会按照配置文件redis.conf的配置进行启动。
例如:redis-server.exe redis.windows.conf
2、redis 与Python交互取出来的是bytes类型
在连接数据库的时候加上decode_responses=True即可
def register(name, pwd): try: r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True) r.incr("users:count") count = r.get("users:count") print(count) print(type(count)) print("count:%d" % count) rt1 = r.hset("user:%d:name"%count, name) rt2 = r.hset("user:%d:pwd" % count, pwd) print(rt1) print(rt2) r.close() except: r.decr("users:count") print(traceback.format_exc())3 python中redis执行zadd, 第二个参数是mapping类型 r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)r.zadd(following_rds_key, {following_user: 1} )r.zadd(followed_rds_key, {followed_user: 1 } )与无序集合sadd的区别: pipe.sadd(following_rds_key, followed_user ) 4、redis中有序集合没有交集的方法,做关注和粉丝的功能,只能选择用无序集合,获取对象,然后做交集; redis> SMEMBERS language 1) "Python" 2) "Ruby" 3) "Clojure"5、redis消息队列实现 #redis_pub.pyimport redisr = redis.Redis(host= "127.0.0.1" , port= 6379, db = 0 ,decode_responses=True)while True: arg = input("please input(1/2/3):") if arg == "1": r.lpush("queue1",arg) if arg == "2": r.lpush("queue2", arg) if arg == "3": r.lpush("queue3", arg)#redis_sub1.pyimport redisr = redis.Redis(host= "127.0.0.1" , port= 6379, db = 0 ,decode_responses=True)while True: arg = input("if continue(y/n):") if arg == 'y': result = r.blpop(["queue1","queue2", "queue3" ]) print(result) else: print("do break") break#redis_sub2.pyimport redisr = redis.Redis(host= "127.0.0.1" , port= 6379, db = 0 ,decode_responses=True)while True: arg = input("if continue(y/n):") if arg == 'y': result = r.brpop("queue1") print(result) else: print("do break") break说明:blpop优先从最左边的队列pop出消息,如果没有再找其他的队列。6.redis发布/订阅#redis_publish.py文件import redisr = redis.Redis(host="127.0.0.1", port=6379, db=0,decode_responses=True)while True: arg = input("if continue pulish(y/n):") if arg == "y" : r.publish("channel.1", "hi") else: print("break") break#redis_subscribe1.py文件import redisr = redis.Redis(host="127.0.0.1", port=6379, db=0, decode_responses=True )pb = r.pubsub()pb.subscribe("channel.1")for message in pb.listen(): print("redis_subscribe1 listen:") print(message)#redis_subscribe2.py文件import redisr = redis.Redis(host="127.0.0.1", port=6379, db=0, decode_responses=True )pb = r.pubsub()pb.subscribe("channel.1")for message in pb.listen(): print("redis_subscribe2 listen:") print(message)redis_publish运行结果如下:"D:\Program Files\python3.6.7\python.exe" D:/pythonWorkspace/untitled12/redis_publish.pyif continue pulish(y/n):yif continue pulish(y/n):yif continue pulish(y/n):redis_subscribe1运行结果如下:"D:\Program Files\python3.6.7\python.exe" D:/pythonWorkspace/untitled12/redis_subscribe1.pyredis_subscribe1 listen:{'type': 'subscribe', 'pattern': None, 'channel': 'channel.1', 'data': 1}redis_subscribe1 listen:{'type': 'message', 'pattern': None, 'channel': 'channel.1', 'data': 'hi'}redis_subscribe1 listen:{'type': 'message', 'pattern': None, 'channel': 'channel.1', 'data': 'hi'}redis_subscribe2运行结果如下:"D:\Program Files\python3.6.7\python.exe" D:/pythonWorkspace/untitled12/redis_subscribe2.pyredis_subscribe2 listen:{'type': 'subscribe', 'pattern': None, 'channel': 'channel.1', 'data': 1}redis_subscribe2 listen:{'type': 'message', 'pattern': None, 'channel': 'channel.1', 'data': 'hi'}redis_subscribe2 listen:{'type': 'message', 'pattern': None, 'channel': 'channel.1', 'data': 'hi'}redis订阅消息的缺点:发出去的消息不会持久化rammitmq的好处:目前rabbitmq使用比较多,可以将订阅的队列设置成持久化的,当消费者死掉也没有没有关系,消息仍然缓存在队列上,消费者重新复活之后,再次订阅队列就好了,消息不会丢失,即使队列出异常死掉,那么队列重新恢复的时候,消息还在,因为队列是持久化的,所以这种场景用mq更加合适!!! 7、redis连接池为什么使用连接池?Redis 是单进程单线程的,它利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。
Redis 是基于内存的数据库,使用之前需要建立连接,建立断开连接需要消耗大量的时间。
再假设 Redis 服务器与客户端分处在异地,虽然基于内存的 Redis 数据库有着超高的性能,但是底层的网络通信却占用了一次数据请求的大量时间,因为每次数据交互都需要先建立连接,假设一次数据交互总共用时 30ms,超高性能的 Redis 数据库处理数据所花的时间可能不到 1ms,也即是说前期的连接占用了 29ms,连接池则可以实现在客户端建立多个连接并且不释放,当需要使用连接的时候通过一定的算法获取已经建立的连接,使用完了以后则还给连接池,这就免去了数据库连接所占用的时间。
1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 4 import redis 5 6 ''' 7 这种连接是连接一次就断了,耗资源.端口默认6379,就不用写 8 r = redis.Redis(host='127.0.0.1',port=6379,password='tianxuroot') 9 r.set('name','root')10 11 print(r.get('name').decode('utf8'))12 '''13 '''14 连接池:15 当程序创建数据源实例时,系统会一次性创建多个数据库连接,并把这些数据库连接保存在连接池中,当程序需要进行数据库访问时,16 无需重新新建数据库连接,而是从连接池中取出一个空闲的数据库连接17 '''18 pool = redis.ConnectionPool(host='127.0.0.1',password='helloworld') #实现一个连接池19 20 r = redis.Redis(connection_pool=pool)21 r.set('foo','bar')22 print(r.get('foo').decode('utf8'))
转载于:https://www.cnblogs.com/harryTree/p/11365463.html