python Redis使用

 ubuntu安装Redis

sudo vim /etc/redis/redis.conf

把bind 127.0.0.1这行注释掉

然后重启Redis

sudo /etc/init.d/redis-server restart
 
import redis

r = redis.Redis(host='192.168.181.128', port=6379)
r.set('foo', 'Bar')

print(r.get('foo'))
连接并操作

连接池

python操作redis,操作一次就请求一次连接,操作完成就断开连接,连接池把redis的连接请求放入池中,方便操作,避免每次建立、释放连接的开销

import redis
pool = redis.ConnectionPool(host='192.168.181.128', port=6379)

r = redis.Redis(connection_pool=pool)
r.set('foo', 'Bar')

print(r.get('foo'))
连接池

 1. String操作

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

1
2
3
4
5
6
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
     ex,过期时间(秒)
     px,过期时间(毫秒)
     nx,如果设置为True,则只有name不存在时,当前set操作才执行
     xx,如果设置为True,则只有name存在时,岗前set操作才执行

setnx(name, value)

设置值,只有name不存在时,执行设置操作(添加)

setex(name,time ,value) # time,过期时间(数字秒 或 timedelta对象)

psetex(name, time_ms, value) # time_ms,过期时间(数字毫秒 或 timedelta对象)

mset(*args, **kwargs)# mset(k1='v1', k2='v2')or mget({'k1''v1''k2''v2'})

get(name)#获取值

mget(keys, *args)# mget('ylr', 'wupeiqi') or rmget(['ylr''wupeiqi'])

getset(name, value)#设置新值并获取原来的值

getrange(key, start, end) # name,Redis 的 name    # start,起始位置(字节)    # end,结束位置(字节)

setrange(name, offset, value)# 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)

setbit(name, offset, value)# 获取name对应的值的二进制表示中的某位的值 (0或1)

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

strlen(name)# 返回name对应值的字节长度(一个汉字3个字节)

incr(self, name, amount=1)# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。

incrbyfloat(self, name, amount=1.0)# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。

decr(self, name, amount=1)# 自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。

append(key, value)# 在redis name对应的值后面追加内容

2. Hash操作

hash表现形式上有些像pyhton中的dict,可以存储一组关联性较强的数据 , redis中Hash在内存中的存储格式如下图:  

 hset(name, key, value)# name对应的hash中设置一个键值对(不存在,则创建;否则,修改)

 hmset(name, mapping)#在name对应的hash中批量设置键值对hmset('xx', {'k1':'v1', 'k2': 'v2'})

 hget(name,key)# 在name对应的hash中获取根据key获取value

 hmget(name, keys, *args)# 在name对应的hash中获取多个key的值

 hgetall(name)#获取name对应hash的所有键值

 hlen(name)## 获取name对应的hash中键值对的个数

 hkeys(name)# 获取name对应的hash中所有的key的值

 hvals(name)# 获取name对应的hash中所有的value的值

 hexists(name, key)# 检查name对应的hash是否存在当前传入的key,返回1是ture.0是false

 hdel(name,*keys)# 将name对应的hash中指定key的键值对删除

 hincrby(name, key, amount=1)# 自增name对应的hash中的指定key的值,不存在则创建key=amount

 hincrbyfloat(name, key, amount=1.0)# 自增name对应的hash中的指定key的值,不存在则创建key=amount

 hscan(name, cursor=0, match=None, count=None) 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆

 hscan_iter(name, match=None, count=None)# 利用yield封装hscan创建生成器,实现分批去redis中获取数据

3. list

List操作,redis中的List在在内存中按照一个name对应一个List来存储。如图:  

 lpush(name,values)# 在name对应的list中添加元素,每个新的元素都添加到列表的最左边

 lpushx(name,value)# 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边

 llen(name)# name对应的list元素的个数

 linsert(name, where, refvalue, value))# 在name对应的列表的某一个值前或后插入一个新值,实例:linsert username before pivot  fall

 lpop(name)# 在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素

 lset(name, index, value)# 对name对应的list中的某一个索引位置重新赋值

 lindex(name, index)#在name对应的列表中根据索引获取列表元素

 lrange(name, start, end)# 在name对应的列表分片获取数据

 ltrim(name, start, end)# 在name对应的列表中移除没有在start-end索引之间的值

 rpoplpush(src, dst)# 从一个列表取出最右边的元素,同时将其添加至另一个列表的最左边

 blpop(keys, timeout)# 将多个列表排列,按照从左到右去pop对应列表的元素

 brpoplpush(src, dst, timeout=0)# 从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧

4.set集合操作

 Set操作,Set集合就是不允许重复的列表

 sadd(name,values)# name对应的集合中添加元素

 scard(name)#获取name对应的集合中元素个数

 sdiff(keys, *args)#在第一个name对应的集合中且不在其他name对应的集合的元素集合

 sdiffstore(dest, keys, *args)# 获取第一个name对应的集合中且不在其他name对应的集合,再将其新加入到dest对应的集合中

 sinter(keys, *args)# 获取多一个name对应集合的并集

 sinterstore(dest, keys, *args)# 获取多一个name对应集合的并集,再讲其加入到dest对应的集合中

 sismember(name, value)# 检查value是否是name对应的集合的成员

 smembers(name)# 获取name对应的集合的所有成员

 smove(src, dst, value)# 将某个成员从一个集合中移动到另外一个集合

 spop(name)# 从集合的右侧(尾部)移除一个成员,并将其返回

 srandmember(name, numbers)# 从name对应的集合中随机获取 numbers 个元素

 srem(name, values)# 在name对应的集合中删除某些值

 sunion(keys, *args)# 获取多一个name对应的集合的并集

 sunionstore(dest,keys, *args) #获取多一个name对应的集合的并集,并将结果保存到dest对应的集合中

 sscan(name, cursor=0, match=None, count=None)## 同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大
 sscan_iter(name, match=None, count=None)

有序集合,在集合的基础上,为每元素排序;元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。

zadd(name, *args, **kwargs)# 在name对应的有序集合中添加元素,# zadd('zz', 'n1', 1, 'n2', 2)

zcard(name)# 获取name对应的有序集合元素的数量

zcount(name, min, max)# 获取name对应的有序集合中分数 在 [min,max] 之间的个数

zincrby(name, value, amount)# 自增name对应的有序集合的 name 对应的分数

zrange( name, start, end, desc=False, withscores=False, score_cast_func=float) # 按照索引范围获取name对应的有序集合的元素

zrank(name, value)# 获取某个值在 name对应的有序集合中的排行(从 0 开始)

zrem(name, values)# 删除name对应的有序集合中值是values的成员

zremrangebyrank(name, min, max)# 根据排行范围删除

zremrangebyscore(name, min, max)# 根据分数范围删除

zscore(name, value)# 获取name对应有序集合中 value 对应的分数

zinterstore(dest, keys, aggregate=None)# 获取两个有序集合的交集,如果遇到相同值不同分数,则按照aggregate进行操作,# aggregate的值为:  SUM  MIN  MAX

zunionstore(dest, keys, aggregate=None)# 获取两个有序集合的并集,如果遇到相同值不同分数,则按照aggregate进行操作

zscan(name, cursor=0, match=None, count=None, score_cast_func=float)
zscan_iter(name, match=None, count=None,score_cast_func=float)# 同字符串相似,相较于字符串新增score_cast_func,用来对分数进行操作

其他常用操作

delete(*names)# 根据删除redis中的任意数据类型

exists(name)# 检测redis的name是否存在

keys(pattern='*')# 根据模型获取redis的name, keys n*

expire(name ,time)# 为某个redis的某个name设置超时时间

rename(src, dst)# 对redis的name重命名为

move(name, db))# 将redis的某个值移动到指定的db下

randomkey()# 随机获取一个redis的name(不删除)

type(name)# 获取name对应值的类型

scan(cursor=0, match=None, count=None)
scan_iter(match=None, count=None)# 同字符串操作,用于增量迭代获取key

注释:

redis 一共用16个DB。

原文地址:https://www.cnblogs.com/anhao-world/p/13897176.html