1.连接
测试连接是否成功:
1
2
3
4
5
|
import redis
r = redis.Redis(host = '192.168.136.102' , port = 6379 , db = 0 ,decode_responses = True )
r. set ( 'foo' , 'bar' )
print (r.get( 'foo' ))
del r
|
redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串。
redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类,用于向后兼用旧版本。
1
2
3
4
5
6
7
|
import redis # 导入redis 模块
r = redis.Redis(host = '192.168.136.102' , port = 6379 , decode_responses = True )
r. set ( 'name' , 'runoob' ) # 设置 name 对应的值
print (r[ 'name' ])
print (r.get( 'name' )) # 取出键 name 对应的值
print ( type (r.get( 'name' ))) # 查看类型
del r
|
连接池
redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销。
默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个 Redis 实例共享一个连接池。
1
2
3
4
5
|
import redis # 导入redis 模块
pool = redis.ConnectionPool(host = '192.168.136.102' , port = 6379 , decode_responses = True )
r = redis.Redis(connection_pool = pool)
r. set ( 'name' , 'runoob' ) # 设置 name 对应的值
print (r.get( 'name' )) # 取出键 name 对应的值
|
对比
2.String字符串
String使用场景:
1、用redis当缓存层来加速读写性能降低后端的压力
2、计数器
3、时间内限制请求次数
1.String set 设置单个键值
set(name, value, ex=None, px=None, nx=False, xx=False)
ex:过期时间(秒),时间到了后redis会自动删除
px:过期时间(毫秒),时间到了后redis会自动删除。ex、px二选一即可
nx:如果设置为True,则只有name不存在时,当前set操作才执行
xx:如果设置为True,则只有name存在时,当前set操作才执行
1
2
3
|
r. set ( 'name' , 'zhangsan' ,ex = 3 )
r. set ( 'name' , 'lisi' ,nx = True ) #如果设置为True,则只有name不存在时,当前set操作才执行
r. set ( 'name' , 'wangwu' ,xx = True ) #如果设置为True,则只有name存在时,当前set操作才执行
|
2.String get 获取单个值
1
2
|
v = r.get( 'name' )
print (v)
|
3.String mset 设置多个键值
mset(*args, **kwargs)
1
2
3
4
5
|
name_dict = {
'name_1' : 'zhangsan' ,
'name_2' : 'lisi'
}
r.mset(name_dict)
|
4.String mget 获取多个值
1
2
|
mget(keys, * args)
r.mget( 'name_1' , 'name_2' )
|
5.String setrange 根据索引修改某个键的value值
setrange(name, offset, value)
返回值为:修改后的字符串长度
name:键,所给不存在时自动添加
offset:偏移量,以0开始
value:修改的字符或字符串,字符串时以offset向后顺延
1
2
|
length = r.setrange( 'name_2' , 1 , 'zhihu' )
print (length)
|
6.String getrange 根据索引获取某个键的部分value值
若所给的键不存在时,返回空值 b''
getrange(key, start, end)
1
|
v = r.getrange( 'name_1' , 0 , 2 )
|
7.String strlen 获取value的长度
strlen(name)
所给的键不存在时,返回值为0
1
|
length = r.strlen( 'name_2' )
|
8.String append value后面追加
append(key, value)
若所给的键不存在,则设置新值,返回值为修改后的字符串的长度
1
|
length = r.append( 'name_1' , '666' )
|
3.列表
1.lpush(key , value) 将一个或多个值 value 插入到列表 key 的表头
1
|
r.lpush( 'list' , 'a' , 'b' , 'c' , 'd' )
|
2.rpush(key , value) 将一个或多个值 value 插入到列表 key 的表尾
1
|
r.rpush( 'rlist' , 'a' , 'b' , 'c' , 'd' )
|
3.llen key 返回列表 key 的长度
1
|
r.llen( 'list' )
|
4.lrem key count value 根据参数 count 的值,移除列表中与参数 value 相等的元素
1
|
r.lrem( 'list' , 2 , 'b' )
|
4.集合
1.sadd(name,values) 向对应的集合中添加元素
1
|
r.sadd( "set1" , 33 , 44 , 55 , 66 )
|
2.scard(name)
获取name对应的集合中元素个数
1
|
r.scard( 'set1' )
|
3.srandmember key [count] 返回集合中的 1 或 count 个随机元素
1
|
r.srandmember( "set1" )
|
4.spop key 移除并返回集合中的一个随机元素获取name对应的集合中元素个数
1
|
r.spop( 'set1' )
|
5.smove source destination member 将 member 元素从 source 集合移动到 destination 集合
1
|
r.smove( 'set1' , 'set2' , 66 )
|
5.哈希
1.hmset key field value [field value …]同时将多个 field-value (域-值)对设置到哈希表 key 中
1
|
r.hmset( 'zhangsan' ,{ 'name' : 'zhangsan' , 'age' : 20 , 'tel' : 123456 })
|
2.Hash hmget 获取哈希中多个键值对
1
|
hmget(name, keys, * args)
|
返回值:值的列表 list 形如: [‘1', ‘123'] <class ‘list'>
1
|
r.hmget( 'zhangsan' , [ 'sex' , 'tel' ])
|
3.Hash hget 获取指定key的值
hget(name, key)
1
|
r.hget( 'zhangsan' , 'tel' )
|
4.Hash hgetall 获取哈希中所有的键值对
hgetall(name)
返回值:dict类型
1
|
r.hgetall( 'zhangsan' )
|
6.有序集合
1.Zset zadd 有序集合中添加元素
zadd(name, *args, **kwargs)
添加元素时需指定元素的分数
返回值:返回添加的个数
1
2
|
r.zadd( 'myzset' , { 'a' : 3 , 'b' : 4 , 'c' : 5 })
r.zadd( 'myzset' , 'a' , 3 , 'b' , 4 , 'c' , 5 }) #不同版本
|
2.Zset zcard 返回有序集合中元素个数
zcard(name)
1
|
v = r.zcard( 'myzset' )
|
3.Zset zscore 返回有序集合中指定某个值的分数
zscore(name, value)
返回值:float 类型的分数;形如: -5.0 <class ‘float'>
1
|
v = r.zscore( 'myzset' , ‘a')
|
4.Zset zincrby 增加有序集合中某个值的分数
zincrby(name, value, amount=1)
value:若存在,则增加其amount分数;若不存在,则增加新值以及对应的分数
amount:增加的值,可以为负数
返回值:增加后的分数 float类型 ;
1
|
v = r.zincrby( 'myzset' , 1 , 'a' )
|
5.Zset zrevrange 返回有序集合分数排序的一段数据
zrevrange(name, start, end, withscores=False, score_cast_func=float)
name:redis的name
start:有序集合索引起始位置(非分数)
end:有序集合索引结束位置(非分数)
withscores:是否获取元素的分数,默认只获取元素的值
score_cast_func:对分数进行数据转换的函数
返回值:list类型
1
2
3
4
5
|
r.zadd( 'myzset1' , { 'a' : 4 , 'b' : 2 , 'c' : 3 , 'd' : 6 , 'e' : 1 , 'f' : 9 })
def double(num):
return float (num) * float (num)
print (r.zrevrange( 'myzset1' , 0 , 3 ,withscores = True ))
print (r.zrevrange( 'myzset1' , 0 , 3 ,withscores = True ,score_cast_func = double))
|
以上就是Python访问Redis的详细内容,更多关于Python访问Redis的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/BangLiSang/article/details/118220904