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、操作结果

 

posted @ 2020-04-02 19:31  梅梅不想踩坑  阅读(323)  评论(0编辑  收藏  举报