小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
Redis是一款开源的、基于内存的、可持久化存储的key-value型数据库,由于redis拥有丰富的数据结构,且性能极高,并且支持主从同步、分布式、集群等,所以经常用于实时通讯、缓存、高速读写等场景。
Redis有5种常用的数据结构,分别是:String(字符串)、List(列表)、Hash(哈希)、Set(集合)、ZSet(有序集合)。
安装第三方库:pip install redis,安装好redis库之后,只需使用import redis导入即可使用。
创建连接
普通连接
import redis
# 连接数据库
client = redis.StrictRedis(host='localhost', port=6379, db=0)
连接池
pool = redis.ConnectionPool(host='localhost', port=6379)
r = redis.Redis(connection_pool=pool)
字符串String
Python redis模块对Redis字符串的主要操作函数包括:set、get、getset、mset、mget、incr、append、strlen等。
set
为指定的键(key)设置值(value),键不存在则创建,存在则修改。
def set(name, value, ex=None, px=None, nx=False, xx=False, keepttl=False)
- ex:过期时间(秒)
- px:过期时间(毫秒)
- nx:如果设置为True,则只有name不存在时,当前set操作才执行
- xx:如果设置为True,则只有name存在时,当前set操作才执行
r.set('name', 'tigeriaf')
get
获取指定键(key)绑定的值(value)。
r.get("name")
getset
设置新值,返回旧值。
getset(name, value)
print(r.getset("name", "hahaha")) # 输出tigeriaf
print(r.get("name")) # 输出hahaha
mset
批量设置值。
# 多个值
person = {
'name1': 'zhangsan',
'name2': 'lisi'
}
r.mget(person)
mget
批量获取。
# 方式一
print(r.mget("name1", "name2"))
# 方式二
keys = ["name1", "name2"]
print(r.mget(keys))
incr
自增函数,incr(name, amount=1),步长amount默认为1
print(r.incr("count")) # 输出1
print(r.incr("count", amount=1)) # 输出2
print(r.incr("count", amount=3)) # 输出5
print(r.incr("count", amount=5)) # 输出10
print(r.incr("count", amount=-2)) # 输出8
print(r.get("count")) # 输出8
append
为指定的字符串追加值,若不存在则直接创建。
append(key, value)
r.set("test", "1111")
r.append("test", "2222")
print(r.get("test")) # 输出11112222
strlen
返回对应值的字节长度。
r.set("name", "tigeriaf")
print(r.strlen("name")) # 输出8
delete
删除对应的值。
r.delete("name")
注意: 这个命令可以用于所有类型。
列表List
Python redis模块对Redis列表的主要操作函数包括:lpush,lrange,lindex,blpop,brpop。
lpush
实现了在name对应的list中添加元素,每个新的元素都添加到列表的最左边。
r.lpush("list1", 1)
r.lpush("list1", 2, 3, 4, 5)
此时列表list1内的数据的顺序为5,4,3,2,1。
lrange
获取列表指定范围内的元素。
print(r.lrange("list1", 0, 3))
# 输出为['5', '4', '3', '2']
lindex
根据列表下标获取列表元素值。
print(r.lindex("list1", 1)) # 输出为4
blpop
从列表头部(左边)取出第一个元素,返回该元素值并从列表删除。
print(r.lpop("list1")) # 输出为5
brpop
从列表尾部(右边)取出第一个元素,返回该元素值并从列表删除。
print(r.rpop("list1")) # 输出为1
操作哈希Hash
Redis数据库hash数据类型是一个string类型的key和value的映射表,Python redis模块对Redis哈希的主要操作函数包括:hset,hget,hgetall,hmset,hmget,hlen,hkeys,hvals,hexists,hdel,hincrby,hincrbyfloat等。
hset
给对应的hash中设置一个键值对,不存在则创建,存在则修改。
r.hset("hash_name", "a", "1")
r.hset("hash_name", "b", "2")
r.hset("hash_name", "c", "3")
hget
在对应的hash中根据key获取值。
print(r.hget("hash_name", "a")) # 输出为1
hgetall
获取对应hash的所有键值对。
print(r.hgetall("hash_name")) # 输出为{'a': '1', 'b': '2', 'c': '3'}
hmset
在对应的hash中批量设置键值对。
dic = {"a1": "1", "b2": "2", "c3": 3}
r.hmset("hash_name", dic)
print(r.hgetall("hash_name"))
hmget
在对应的hash中获取多个key的值。
keys = ["a1", "b2"]
print(r.hmget("hash_name", keys))
print(r.hmget("hash_name", "a1", "b2"))
hlen
获取hash中键值对的个数。
print(r.hlen("hash_name"))
hkeys
获取hash中所有的key的值。
print(r.hkeys("hash_name"))
hvals
获取hash中所有的value的值。
print(r.hvals("hash_name"))
hexists
检查对应的hash中是否存在当前传入的key。
print(r.hexists("hash_name", "a")) # 输出为True
hdel
删除hash中指定的键值对。
r.hdel("hash_name", "a")
hincrby
自增hash中key对应的值,不存在则创建。
print(r.hincrby("hash_name", "test"))
print(r.hincrby("hash_name", "test", amount=5))
hincrbyfloat
自增hash中key对应的值,不存在则创建。与hincrby不同的是amount为浮点数。
print(r.hincrbyfloat("hash_name", "test_float"))
print(r.hincrbyfloat("hash_name", "test_float", amount=2.5))
集合Set
Set集合就是不允许重复的列表。Python redis模块对Redis集合的主要操作函数包括:sadd、smembers、scard、sdiff、sinter、sismember、append、strlen等。
sadd
向对应的集合中添加元素。
r.sadd("set_name", "a")
r.sadd("set_name", "b", "c")
smembers
获取对应的集合的所有元素。
print(r.smembers("set_name"))
scard
获取name对应的集合中的元素个数。
print(r.scard("set_name"))
sdiff
返回给定多个集合的差集。
r.sadd("set_name", "a", "b", "c")
r.sadd("set_name1", "b", "c")
r.sadd("set_name2", "b", "c", "d")
print(r.sdiff("set_name", "set_name1", "set_name2")) # 输出为{"a"}
sinter
返回给定多个集合的交集。
r.sadd("set_name", "a", "b", "c")
r.sadd("set_name1", "b", "c")
r.sadd("set_name2", "b", "c", "d")
print(r.sinter("set_name", "set_name1", "set_name2")) # 输出为{"b","c"}
sunion
返回给定多集合的并集。
print(r.sunion("set_name", "set_name1", "set_name2")) # 输出为{"a", "b", "c", "d"}
sismember
判断元素是否是指定集合的元素,返回True或者False。
print(sismember("set_name", "a"))
smove
将某个元素从一个集合移动到另外一个集合。
r.smove("set_name", "set_name", "c")
spop
从集合的右侧移除一个元素,并将其返回。
r.spop("set_name")
srandmember
从对应的集合中随机获取元素。可指定获取元素的个数。
print(r.srandmember("set_name", 2))
srem
删除对应的集合中的某些元素。
r.srem("set_name", "a")
有序集合ZSet
有序集合ZSet是在集合的基础上,为集合中的每个元素关联一个double类型的分数(分数可以重复),可以通过分数来为集合中的元素进行排序。所以,有序集合中的每一个元素有两个值,即:值和分数。Python redis模块对Redis集合的主要操作函数包括:zadd、zcard、zcount、zincrby、zrange、zrank、zscore等。
zadd
向对应的有序集合中添加元素。
dic = {
"a": 1,
"b": 2,
"c": 3
}
r.zadd("zset_name", dic)
zcard
获取对应的有序集合内元素的数量。
print(r.zcard("zset_name"))
zcount
获取有序集合中分数在指定区间的个数。
print(r.zcount("zset_name", 1, 2))
zincrby
自增有序集合内value对应的分数。
r.zincrby("zset_name", "a", amount=5)
zrange
按照索引范围获取对应的有序集合中的元素。
zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)
print(r.zrange("zset_name", 1, 2, withscores=True))
zrank
获取value值在对应的有序集合中的排行位置(从0开始)
print(r.zrank("zset_name", "b"))
zscore
获取有序集合中value对应的分数。
print(r.zscore("zset_name", "a"))
zrem
删除对应的有序集合中值是value的元素。
r.zrem("zset_name", "a", "c")
总结
这里只展示了一些很常用的命令函数,还有很多很多,不过也不用可以去记住,因为实在是太多了,使用的时候查一查就可以了,在此附上Redis中文网。
最后,感谢女朋友在工作和生活中的包容、理解与支持 !