3

【python】redis使用简记

 2 years ago
source link: https://www.guofei.site/2022/07/09/redis.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【python】redis使用简记

2022年07月09日    Author:Guofei

文章归类: 0xb0_Python语法    文章编号: 1265


版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2022/07/09/redis.html

Edit

安装

安装:https://redis.io/docs/getting-started/installation/install-redis-on-mac-os/

如果安装报错:https://github.com/Homebrew/homebrew-core/issues/11134

sudo pip3 install redis

使用

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.set('name', 'runoob')  # 设置 name 对应的值

r.get('name')

set(name, value, ex=None, px=None, nx=False, xx=False)

  • ex - 过期时间(秒),过了这个时间后,值就变成None
  • px - 过期时间(毫秒)
  • nx - 如果设置为True,则只有name不存在时,当前set操作才执行
  • xx - 如果设置为True,则只有name存在时,当前set操作才执行
# 批量get和set
r.mset({'k1': 'v1', 'k2': 'v2'})
r.mget("k1", "k2")

# 获取值,并且设置一个新值
r.getset("k1", "v3")

getrange 和 setrange

r.set("name", "abcde")
r.getrange("name", start=0, end=2)
# 得到 'abc'

r.setrange("name", offset=1, value="fff")
# 变成 'afffe'

# 删除
r.delete("name")
# 是否存在
r.exists("name")
# 模糊匹配
keys(pattern='')

# 设置超时时间
r.expire("list5", time=3)

# 重命名
rename(src, dst)

# 随机获取一个key
r.randomkey()

# 返回类型
r.type("set1")

操作二进制

setbit(name, offset, value)
getbit(name, offset)

bitcount(key, start=None, end=None)
# 获取name对应的值的二进制表示中 1 的个数

bitop(operation, dest, *keys)
# 获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值
bitop("AND", 'new_name', 'n1', 'n2', 'n3')
# 把n1,n2,n3 做AND运算,然后把结果放入 new_name

r.strlen(key) # 对应的长度



r.incr(self, name, amount=1)
# name对应的数字自增1,如果不存在则初始化为 amount
r.incrbyfloat(self, name, amount=1.0)
# 效果同上,但是是浮点型

r.decr(self, name, amount=1)
# 自减


# 字符串追加
r.append(key="name", value="a")

hash相关

import redis

pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)

r.hset("hash1", "k1", "v1")
r.hset("hash1", "k2", "v2")
print(r.hkeys("hash1"))  # 取hash中所有的key,['k1', 'k2']
print(r.hget("hash1", "k1"))  # 单个取hash的key对应的值,
print(r.hmget("hash1", "k1", "k2"))  # 多个取hash的key对应的值,['v1', 'v2']

# 批量set
hmset(name, mapping)
# 批量get
hmget(name, keys, *args)
# 取出所有kv
r.hgetall("hash1")
# 获取所有kv个数
r.hlen("hash1")
# 获取所有key
r.hkeys("hash1")
# 获取所有value
r.hvals("hash1")
# 判断是否存在
r.hexists("hash1", "k4")
# 删除一个键值对
r.hdel("hash1", "k1")    

# 自增
r.hincrby(name, key, amount=1)
r.hincrbyfloat(name, key, amount=1.0)


# 分片读取
hscan(name, cursor=0, match=None, count=None)

redis-list

import redis
import time

pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)

# 增加,每个新的元素都添加到列表的最左边
r.lpush("list1", 11, 22, 33)
print(r.lrange('list1', 0, -1))
# 33,22,11

# 增加,每个新元素添加到右边
r.rpush("list2", 11, 22, 33)
print(r.llen("list2"))  # 列表长度
print(r.lrange("list2", 0, 3))  # ['11', '22', '33']

# 往已经有的name的列表的左边添加元素,没有的话无法创建
lpushx(name,value)


redis-set

r.sadd("set1", 33, 44, 55, 66)  # 往集合中添加元素,返回添加的个数
print(r.scard("set1"))  # 集合的长度是4
print(r.smembers("set1"))  # 获取集合中所有的成员

# 差集
r.sdiff("set1", "set2")
# 差集放入 set3
r.sdiffstore("set3", "set1", "set2")

# 交集
r.sinter("set1", "set2")
# 交集放入 set3
r.sinterstore("set3", "set1", "set2")

# 并集
r.sunion("set1", "set2")
# 并集放入 set3
r.sunionstore("set3", "set1", "set2")

# 是否属于
r.sismember("set1", 33)

# 把一个元素从一个集合移动到另一个集合
r.smove(src="set1", dst="set2", value=33)


# 随机删除一个元素
r.spop("set1")

# 删除指定的元素
r.srem("set2", 11)

redis-有序set

r.zadd("zset1", {"n1": 11, "n2": 22})
r.zadd("zset2", {'m1': 22, 'm2': 44})
print(r.zcard("zset1"))  # 集合长度
print(r.zcard("zset2"))  # 集合长度
print(r.zrange("zset1", 0, -1))  # 获取有序集合中所有元素
print(r.zrange("zset2", 0, -1, withscores=True))  # 获取有序集合中所有元素和分数

# 集合长度
r.zcard("zset1")
# 获取
r.zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)

# 获取索引
zrank(name, value)
# 倒过来的索引
zrevrank(name, value)

# 删除
zrem(name, values)
# 根据索引,范围删除
zremrangebyrank(name, min, max)
# 根据分数范围删除
zremrangebyscore(name, min, max)

# 获取分数
zscore(name, value)

参考资料

https://www.runoob.com/w3cnote/python-redis-intro.html

您的支持将鼓励我继续创作!

qr.jpeg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK