Mac下python3操作redis(基础知识)
一、安装redis
1、首先在官网下载redis:https://redis.io/download
2、下载下来之后解压zip文件到指定目录下,比如我是放在/usr/local这个目录下
3、然后在终端进入/usr/local/redis-5.0.8目录下输入redis-server命令启动redis,启动成功后的界面如下:
四、安装redis可视化工具,这里推荐RedisPlus
1、首先添加连接,输入redis ip和端口号,注意不要写密码,否则测试失败
2、测试🔗,如果提示:测试成功说明连接成功
五、安装python 的redis模块
pip3 install redis
六、python操作redis
1、操作代码
#!/usr/local/bin/python3.7 import redis from redis import ConnectionPool # 普通连接 # connect = redis.Redis(host='127.0.0.1',port=6379) # connect.set('name', 'mozili') # print(connect.get('name')) # 连接池子 POOL = ConnectionPool(host='127.0.0.1', port=6379, max_connections=100) connect = redis.Redis(connection_pool=POOL) # url方式连接到数据库方式 # TCP连接 # redis://[:password]@host:port/db # Redis TCP+SSL 连接 # rediss://[:password]@host:port/db # Redis Unix Socket 连接 # unix://[:password]@/path/to/socket.sock?db=db """ String操作 """ # set(name,value)给name赋值为value connect.set('name', 'mozili') # get(name)返回数据库中name的string的value print(connect.get('name')) # 给数据库中key为name的string赋值value,并且返回上次的value print(connect.getset('name', 'limozi')) # 返回多个key对应的value print(connect.mget(['name', 'sex', 'age'])) # 如果key不存在才设置value,不存在返回true,存在返回false print(connect.setnx('name', 'mozili')) #false print(connect.setnx('newname', 'limozi')) #true # 设置可以对应的值为string类型的value,并且指定此键值对应的有效期 print(connect.setex('name',3,'mozili')) #3s后过期,key变为不存在 # 设置指定key的value值的子字符串 print(connect.setrange('name', 6, 'hello')) #key为name的value值长度变为11 # 批量复制 key不重复返回true,重复返回false print(connect.mset({'name1':'zhangsan', 'name2':'lisi'})) #返回true # key均不存在时才批量复制 print(connect.msetnx({'name3':'wangwu', 'name4':'zhaoliu'})) #返回true # key为name的value减值操作,默认1,key不存在则被创建并设置为 - amount print(connect.decr('age', 1)) # age=20 修改后为19 # key为name的value增值操作,默认1,key不存在则被创建并设置为 + amount print(connect.incr('age', 2)) #age=19 修改后为21 # key为name的string的值附加value print(connect.append('age', '岁')) #返回字符串的长度 # 返回key为name的string的value的字串 print(connect.substr('newname', 1, -1)) # 获取key的value值从start到end的子字符串 print(connect.getrange('newname', 2, 4)) """ key操作 """ # 判断一个key是否存在 print(connect.exists('name')) #返回1 表示True # 删除一个key print(connect.delete('name')) #返回1表示删除 print(connect.delete('name33')) #返回0,表示没有这个key # 判断key类型 print(connect.type('newname')) #返回string # 获取所有符合规则的key print(connect.keys('n*')) #以n开头的,返回一个列表 # 获取随机的一个key print(connect.randomkey()) # 将key重命名 print(connect.rename('newname', 'nickname')) #返回true说明命名成功 # 获取当前数据库中key的数目 print(connect.dbsize()) # 设定key的过期时间,单位为s print(connect.expire('name1', 4)) #设定成功返回true # 获取key的过期时间,单位s,-1表示永久不过期,-2表示已经过期 print(connect.ttl('name1')) #返回-2 # 将key移到其他数据库 print(connect.move('name2', 1)) #将name2移动到DB1,移动成功返回True # 删除当前选择数据库中的所有key print(connect.flushdb()) #删除成功返回true # 删除所有数据库中的所有key print(connect.flushall()) #删除成功返回true """ list操作 """ # 在key为name的list尾添加值为value的元素,可以传多个 print(connect.rpush('name2', 'xiao', 'chun', 'zhen')) #返回list大小 # 在key为name的list头添加值为value的元素,可以传多个 print(connect.lpush('name2', 1, 2)) #返回list大小 # 返回key为name的list的长度 print(connect.llen('name2')) # 返回key为name的list中start至end之间的元素 print(connect.lrange('name2', 1, 3)) #返回一个列表 # 截取key为name的list,保留索引为start到end的内容 print(connect.ltrim('name2', 1, 3)) # 截取成功返回True # 返回key为name的list中index位置的元素 print(connect.lindex('name2', 2)) # 给key为name的list中index位置的元素赋值,越界则报错 print(connect.lset('name2', 2, 'mozi')) #赋值成功返回true # 删除count个key的list中值为value的元素 print(connect.lrem('name2', 2, 1)) #返回删除的个数 # 返回并删除key为name的list中的首元素 print(connect.lpop('name2')) #返回删除的首元素 # 返回并删除key为name的list中的尾元素 print(connect.rpop('name1')) #返回删除的元素 # 返回并删除名称在keys中的list中的首元素,如果list为空,则会一直阻塞等待 print(connect.blpop('name1', timeout=4)) #返回一个元祖,timeout为阻塞等待时间 # 返回并删除名称在keys中的list中的尾元素,如果list为空,则会一直阻塞等待 print(connect.brpop('name1', timeout=0)) #返回一个元祖,timeout为阻塞等待时间 # 返回并删除名称为src的list的尾部元素,并将该元素添加到名称为dst的list的头部 print(connect.rpoplpush('name2', 'name1')) #返回name2删除的尾元素 """ set操作 """ # 向key为name的set中添加元素 print(connect.sadd('tags1', 'tea', 'coffee', 'wine')) #返回插入的数据的个数 # 向key为name的set中删除元素 print(connect.srem('tags', 'book')) #返回删除的数据个数 # 随机返回并删除key为name的set中的一个元素 print(connect.spop('tags')) #返回删除的元素 # 从color对应的tags中移除元素并添加到dst对应的set中 print(connect.smove('color', 'tags', 'red')) #移除成功返回true # 返回key为name的set的元素的个数 print(connect.scard('tags')) # 测试member是否是key为name的set的元素 print(connect.sismember('tags', 'coffee')) #是的话返回true # 返回所有给定的key的set的交集 print(connect.sinter('tags', 'tags1')) # 求交集并将交集保存到tags2的集合 print(connect.sinterstore('tags2', ['tags', 'tags1'])) #返回交集的数量 # 返回所有给定key的set的并集 print(connect.sunion(['tags1', 'tags2'])) # 求并集并将并集保存到tags3的集合 print(connect.sunionstore('tags3', ['tags', 'tags1', 'tags2'])) #返回tags3中的数量 # 返回所有给定key的set的差集 print(connect.sdiff(['tags1', 'tags2'])) # 求差集并将差集保存到tags4的集合 print(connect.sdiffstore('tags4', ['tags1', 'tags2'])) #返回tags4集合中元素的个数 # 返回key为name的set的所有元素 print(connect.smembers('tags1')) # 随机返回key为name的set的一个元素,但不删除元素 print(connect.srandmember('tags')) """ sorted set操作 """ # 向key为name的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序 print(connect.zadd('grade', {'bob':100, 'mike':99, 'lucy':87})) #返回添加元素的个数 # 删除key为name的zset中的元素 print(connect.zrem('grade', 'lucy')) #返回删除的元素的个数 # 如果在key为name的zset中已经存在元素value,则该元素的score增加amount,否则向该集合中添加该元素,其score的值为amount print(connect.zincrby('grade', -2, 'mike')) #返回修改后的值 print(connect.zincrby('grade', 9, 'lucy')) # 返回key为name的zset中元素的排名(按score从小到大排列)即下标 print(connect.zrank('grade', 'bob')) #返回下标 # 返回key为name的zset中元素的倒数排名(按score从小到大排列)即下标 print(connect.zrevrank('grade', 'lucy')) # 返回key为name的zset(按score从小到大排序)中的index从start到end的所有元素 print(connect.zrevrange('grade', 0, 2)) #返回一个列表 # 返回key为name的zset中score在给定区间的元素 print(connect.zrangebyscore('grade', 70, 100)) #是一个列表 # 返回key为name的zset中score在给定区间的数量 print(connect.zcount('grade', 80, 100)) # 返回key为name的zset元素的个数 print(connect.zcard('grade')) # 删除key为name的zset中排名在给定区间的元素 print(connect.zremrangebyrank('grade', 0 , 9)) #返回删除的个数 # 删除key为name的zset中score在给定区间的元素 print(connect.zremrangebyscore('grade', 80, 90)) #返回删除元素的个数 """ hash操作 """ # 向key为name的hash中添加映射 print(connect.hset('price', 'cake', 5)) #返回添加映射的个数 # 向key为name的hash中添加映射,如果映射键名不存在 print(connect.hsetnx('price', 'tea', 6)) #返回添加映射的个数 # 返回key为name的hash中field对应的value print(connect.hget('price', 'tea')) #返回tea映射的值 # 返回key为name的hash中各个键对应的value print(connect.hmget('price', ['cake', 'tea'])) #返回一个列表,分别是cake,tea映射的值 # 向key为name的hash中批量添加映射 print(connect.hmset('price', {'coffee': 4, 'pear': 5})) #添加成功返回true # 将key为name的hash中映射的value增加amount print(connect.hincrby('price', 'coffee', 4)) #返回修改后的值 # key为name的hash中是否存在键名为key的映射 print(connect.hexists('price', 'coffee')) # key为name的hash中删除键名为key的映射 print(connect.hdel('price', 'tea')) #删除成功返回1 # 从key为name的hash中获取所有映射个数 print(connect.hlen('price')) # 从key为name的hash中获取所有映射键名 print(connect.hkeys('price')) #返回列表,所有键名 # 从key为name的hash中获取所有映射键值 print(connect.hvals('price')) #返回列表,所有键值 # 从key为name的hash中获取所有映射的键值对 print(connect.hgetall('price')) #返回一个字典,键值对
2、操作结果