ubuntu安装Redis

sudo vim/etc/redis/redis.conf

把bind 127.0.0.1这行注释掉

python redis lpush 撖寡情 python redis hmset_redis

然后重启Redis

连接池

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

python redis lpush 撖寡情 python redis hmset_自增_02

python redis lpush 撖寡情 python redis hmset_有序集合_03

importredis

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)

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)#设置新值并获取原来的值

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在内存中的存储格式如下图:

python redis lpush 撖寡情 python redis hmset_有序集合_04

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来存储。如图:

python redis lpush 撖寡情 python redis hmset_有序集合_05

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。