🍟Python玩转–Redis
文章目录
- 🍟Python玩转--Redis
- 😉前言
- 🍣学习导图
- ①💎概述
- 1.👻Redis??
- 2.🎐Redis能做什么
- ②🧤准备工作
- 1.🥯python安装
- 2.🍣pycharm安装
- 3.🌭Redis安装
- 4.🧶安装Redis库
- 🎣③基本操作
- 1.🥩使用python连接redis
- 2.🌯stirng操作
- 1.🍕方法 set
- 2.🍔方法 mset
- 3.🍿方法 mget
- 4.🥓方法 getrange
- 5.🍳方法 append
- 5.🍳方法 strlen
- 3.🍚List操作
- 1.🚍方法 lpush and rpush
- 2.🍘方法 lpushx and rpushx
- 3.🍜方法 llen
- 4.🍜方法 linsert
- 5.🍢方法 lset
- 6.🍢方法 lpop
- 7.🥣方法 lindex
- 8.🍧方法 lrange
- 9.🍪方法 ltrim
- 4.🧁Hash操作
- 1.🍠hash?
- 2.🍫hgetall、hmset和hmget
- 3.🍫hlen、hkeys和hvals
- 4.🍶hexists和hdel
- 6.🍸Set操作
- 1.🍹sadd、smembers和scard
- 2.🧊sdiff 和 sdiffstore
- 3.🥤sinter和 sinterstore
- 4.🍴sismember、smove和 spop
- 5.🍇有序集合
- 7.🍍通用操作
😉前言
提示:
🎂文章为个人学习心得 如有冒犯 call me!
🛴快点做!!!!
🍕参考文章:https://mp.weixin.qq.com/s/EiV2jVMm62bDo9518ul3pQ
🍣学习导图
①💎概述
1.👻Redis??
🌭①Redis 是一个高性能的key-value数据库
🪂 ②支持存储的value类型有:
1️⃣string(字符串)
2️⃣list(链表)
3️⃣set(集合)
4️⃣zset(sorted set --有序集合)
5️⃣hash(哈希类型)
💤简单来说,redis就是把数据库存储在内存里,然后隔一断时间再从内存备份到硬盘以防止数据丢失;由于访问内存,所以访问速度特别快,一般用来做缓存
2.🎐Redis能做什么
💥将一些热点数据存储到Redis中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。
1️⃣会话缓存(最常用)
2️⃣消息队列(支付)
3️⃣活动排行榜或计数
4️⃣发布,订阅消息(消息通知)
5️⃣商品列表,评论列表
②🧤准备工作
1.🥯python安装
https://www.runoob.com/w3cnote/pycharm-windows-install.html
2.🍣pycharm安装
https://www.runoob.com/python/python-install.html
3.🌭Redis安装
😎windos版:
https://www.runoob.com/redis/redis-install.html
🤤Linux版:
https://github.com/MicrosoftArchive/redis/releases
4.🧶安装Redis库
🍤使用pycharm进入Terminal
pip install redis
😀----😃----连----😃----接----😄----线----😆
🎣③基本操作
1.🥩使用python连接redis
🍳先启动redis服务器
😀----😃----连----😃----接----😄----线----😆
🌮普通连接
import redis
r = redis.Redis(host='127.0.0.1', port=6379)
r.set('hello', 'world') #设置键值对 key:hello value:world
print(r.get('hello')) #获取键值对 value值
😀----😃----连----😃----接----😄----线----😆
🎨host:本机地址
🎑port:端口号(redis默认6379)
🎀password:密码(安装完后默认无密码)
😀----😃----连----😃----接----😄----线----😆
🎨连接池连接
import redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)
r = redis.Redis(connection_pool=pool)
r.set('hello', 'world') #设置键值对 key:hello value:world
print(r.get('hello')) #获取键值对 value值
🥚关于中文乱码问题
🍞添加属性
decode_responses=True, charset='UTF-8'
😀----😃----连----😃----接----😄----线----😆
2.🌯stirng操作
😀----😃----连----😃----接----😄----线----😆
1.🍕方法 set
🥞设置key:value
🛴set(‘key’,‘value’)
1️⃣key值:不存在就创建
2️⃣key值:存在就修改value值
💫参数:
💦set(key,value,ex=None,px=None,nx=False,xx=False)
1️⃣ ex:过期时间(秒)
2️⃣ px:过期时间(毫秒)
3️⃣ nx:=True时,若key不存在时执行set()
4️⃣ xx:=True时,若key存在时执行set()
😀----😃----连----😃----接----😄----线----😆
骚操作↓
🍖设置过期时间(秒),这里是5秒过期
r.setex('key1',5,'value1')
🍖设置过期时间(毫秒),这里是1000耗秒过期
r.psetex("key2",1000,"value2")
2.🍔方法 mset
🌭批量设置key
🛴mset({‘key1’:‘value’,‘key2’:‘value2’})
r.mset({'key1':'value','key2':'value2'})
print(r.get('key1'))
print(r.get('key2'))
3.🍿方法 mget
🧂批量获取key
🛴mget(“key1”,“key2”)
#方法一
r.mset({'key1':'value','key2':'value2'})
print(r.mget("key1","key2"))
#方法二
key_list=['key1','key2']
print(r.mget(key_list))
4.🥓方法 getrange
🥚截取key值长度
🛴getrange({‘key1’,头序列号,尾序列号})
r.mset({'key1':'value','key2':'value2'})
print(r.getrange("key1",0,2))
5.🍳方法 append
🧇追加key值
🛴append(“key1”,“new_value”)
r.set('key1','value')
print(r.get("key1"))
r.append("key1","new")
print(r.get("key1"))
5.🍳方法 strlen
🧈输出key值字符长度
🛴strlen(“key1”,“new_value”)
r.set("key1","aaaaa")
print(r.strlen("key1"))
3.🍚List操作
1.🚍方法 lpush and rpush
🥠元素按顺序从头部添加 若 Key 存在则创建列表并添加进去 否则报错
🛴lpush(key,values)
r.lpush("key",1,2,3,4)
#return 4,3,2,1
😀----😃----连----😃----接----😄----线----😆
🥟元素按顺序从尾部开始添加 若 Key 存在则创建列表并添加进去 否则报错
🛴rpush(key,values)
r.rpush("key",1,2,3,4)
#return 1,2,3,4
2.🍘方法 lpushx and rpushx
🍙当 Key 存在时 从头部添加
🛴lpushx(key,value)
r.lpushx("key","aa")
r.lpushx("key","bb")
#return ['bb','aa']
😀----😃----连----😃----接----😄----线----😆
🍛当 Key 存在时 从尾部添加
🛴rpushx(key,value)
r.rpushx("key","aa")
r.rpushx("key","bb")
#return ['aa','bb']
3.🍜方法 llen
🍣返回 key的list元素的个数
🛴llen(key,索引值1,索引值2,索引值3)
llen("key",1,2,3)
#return 3
4.🍜方法 linsert
🍥指定列表前/后插人数据
🛴linsert(key, AFTER/BEFORE, refvalue, value))
💫参数:
💦linsert(“key”, AFTER/BEFORE, 2, “aaa”))
1️⃣ key:key 名字
2️⃣ where:AFTER/BEFORE 插入前面还是后面
3️⃣ refvalue:指定插入列表中的序列值
4️⃣ value:插入 value 值
5.🍢方法 lset
🧆指定列表中索引位置赋值
🛴 r.lset(key, index, value)
r.lset("key",1,"cc")
#return ["aa","cc"]
6.🍢方法 lpop
🍲移除列表的左侧第一个元素且返回此元素
🛴lpop(key)
7.🥣方法 lindex
🍦根据索引值获取列表中的元素
🛴lindex(name, index)
r.lindex("key",1)
#return aa
8.🍧方法 lrange
🍨通过切片操作获取元素
🛴lrange(key, start, end)
9.🍪方法 ltrim
🍰删除列表中索引值之外的值
🛴ltrim(name, start, end)
4.🧁Hash操作
1.🍠hash?
Redis中的hash在内存中类似一个key对应一个dict来存储
🍬hash中设置键值对 存在则修改值 不存在则创建并赋值
🛴r.hset(“dict”,“key”,“value”)
r.hset("key10","a1","a2")
print(r.hget("key10","a1"))
#return a2
2.🍫hgetall、hmset和hmget
🍭获取字典中所有键值对
🛴hgetall(dict)
r.hset("key10","a1","a2")
print(r.hgetall("key10"))
#return {'a1': 'a2'}
🍭批量设置键值对
🛴hmset(key,dict)
dic = {"c":"cc","d":"dd"}
r.hmset("key123",dic)
print(r.hget("key123","c"))
#return cc
🍡批量获取键值对
🛴hmget(dict,key)
dic = {"c":"cc","d":"dd"}
r.hmset("key123",dic)
k_list=["c","d"]
print(r.hmget("key123",k_list))
# return ['cc', 'dd']
print(r.hmget("key11","c","d"))
# return ['cc', 'dd']
3.🍫hlen、hkeys和hvals
☕获取key个数
🛴r.hlen(“key123”)
dic = {"c":"cc","d":"dd"}
r.hmset("key123",dic)
print(r.hlen("key123"))
#return 2
🍵获取所有key
🛴r.hkeys(“key123”)
dic = {"c":"cc","d":"dd"}
r.hmset("key123",dic)
print(r.hkeys("key123"))
#return ['c', 'd']
🧉获取所有value
🛴r.hvals(“key123”)
dic = {"c":"cc","d":"dd"}
r.hmset("key123",dic)
print(r.hvals("key123"))
#return ['cc', 'dd']
4.🍶hexists和hdel
🍾检查传入的key是否存在
🛴hexists(dict, key)
dic = {"c":"cc","d":"dd"}
r.hmset("key123",dic)
r.hexists("key123","c")
#return True
🍷删除指定的name
🛴hdel(dict,key)
dic = {"c":"cc","d":"dd"}
r.hmset("key123",dic)
r.hdel("key123","c")
6.🍸Set操作
🍺在Set集合中是不允许出现重复的列表
1.🍹sadd、smembers和scard
🍻在集合中添加元素
🛴sadd(key,value)
🥂获取集合中的元素
🛴smembers(key)
🥃获取集合中元素的个数
🛴scard(key)
r.sadd("key124","a")
r.sadd("key124","a","a")
print(r.smembers("key124"))
#return key1234
print(r.scard("key124"))
#return 1
2.🧊sdiff 和 sdiffstore
🍮筛选出在第一个key集合中且在其他集合里没有的元素
🛴sdiff(key)
r.sadd("key13","a1","a2","a4")
r.sadd("key14","a2","a3")
r.sadd("key15","a1","a2","a3")
print(r.sdiff("key13","key14","key15"))
#return {'a4'}
🍮筛选出在第一个key集合中且在其他集合里没有的元素后再加入新的集合里
🛴sdiffstore(key)
r.sdiffstore("key16","key13","key14","key15")
print(r.smembers("key16"))
#return {'a4'}
3.🥤sinter和 sinterstore
🥢获取多个集合里的并集
🛴sinter(key)
r.sadd("key13","a1","a2","a4")
r.sadd("key14","a2","a3")
r.sadd("key15","a1","a2","a3")
print(r.sinter("key13","key14","key15"))
#return {'a2'}
🍽获取多个集合里的并集后加入到新的集合里
🛴sinterstore(newkey)
r.sinterstore("key17","key13","key14","key15")
print(r.smembers("key17"))
#return:{'a2'}
4.🍴sismember、smove和 spop
🏺检查value是否是name对应的集合内的元素
🛴sismember(name, value)
r.sadd("key13", "a1", "a2", "a4")
print(r.sismember("key13","a1"))
# return True
print(r.sismember("key13","a5"))
# return False
🥝将元素从一个集合里移到另外一个集合
🛴smove(src, dst, value)
r.sadd("key18", "a1", "a2", "a4")
r.sadd("key19", "a5")
r.smove("key18", "key19", "a2")
print(r.smembers("key19"))
#return {'a2', 'a5'}
🥥将元素从集合中移出并返回
🛴spop(name)
print(r.spop("key19"))
#return a5
print(r.smembers("key19"))
#return {'a2'}
5.🍇有序集合
🍈添加有序集合
🛴zadd(name, mapping)
🍉获取有序集合里元素的数量
🛴zcard(name)
🍊获取有序集合中分数在[min,max]之间的个数
🛴zcount(name, min, max)
r.zadd("key20", {"a": 10, "b": 3, "c": 8})
print(r.zcard("key20")) #return 3
print(r.zcount("key20", 2, 5)) #return 1
print(r.zcount("key20", 7, 15)) #return 1
7.🍍通用操作
🥭根据name删除redis中的任意数据类型
🛴delete(names)
🍎检测redis的name是否存在
🛴exists(name)
🍏根据 ?等通配符匹配获取redis的name
🛴keys(pattern=’*’)
🍐为某个name设置超时时间
🛴expire(name ,time)
🍑重命名
🛴rename(src, dst)
🍒将redis的某个值移动到指定的db下
🛴move(name, db))
🍓随机获取一个redis的name(不删除)
🛴randomkey()
🍅获取name对应值的类型
🛴type(name)