r.set("foo1", "123.0")
r.set("foo2", "221.0")
print(r.mget("foo1", "foo2"))
r.incrbyfloat("foo1", amount=2.0)
r.incrbyfloat("foo2", amount=3.0)
print(r.mget("foo1", "foo2"))
['123.0', '221.0']
['125', '224']
11,decr(self, name, amount=1)
自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。
r.decr("foo5", amount=3) # 递减3
r.decr("foo6", amount=1) # 递减1
print(r.mget("foo5", "foo6"))
#['-3', '-1']
12,append(key, value)
在redis name对应的值后面追加内容
r.append('name','yang')
print(r.get('name'))
#zhenyuyang
4,hash redis基本命令
1.hset(name, key, value)
单个增加--修改(单个取出)--没有就新增,有的话就修改
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对应的值
# v1
print(r.hmget("hash1", "k1", "k2")) # 多个取hash的key对应的值
# ['v1', 'v2']
r.hsetnx("hash1", "k3", "v3") # 只能新建
print(r.hget("hash1", "k3"))
# 这个命令只能新建,不会覆盖原来的值
hget(name,key)
在name对应的hash中获取根据key获取value
hmget(name, keys, *args)
在name对应的hash中获取多个key的值
2,hmset(name, mapping)
批量插入数据,
参数:
name,redis的name
mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
r.hmset("hash2", {"k2": "v2", "k3": "v3"})
print(r.hmget('hash2','k2','k3'))
#['v2', 'v3']
3,hgetall(name)
获取所有的键值对
r.hmset("hash2", {"k2": "v2", "k3": "v3"})
print(r.hgetall('hash2'))
#{'k2': 'v2', 'k3': 'v3'}
4,hlen(name)
获取键值对长度,说白了就是计算几个字典而已
r.hmset("hash2", {"k2": "v2", "k3": "v3"})
print(r.hgetall('hash2'))
#{'k2': 'v2', 'k3': 'v3'}
print(r.hlen('hash2'))
#2
5,hkeys(name)
获取所有的键,返回列表
r.hmset("hash2", {"k2": "v2", "k3": "v3"})
print(r.hkeys('hash2'))
#['k2', 'k3']
6,hvals(name)
获取所有的值,返回列表
r.hmset("hash2", {"k2": "v2", "k3": "v3"})
print(r.hvals('hash2'))
#['v2', 'v3']
7,hexists(name, key)
判断成员是否存在(类似字典的in)
r.hmset("hash2", {"k2": "v2", "k3": "v3"})
s = r.hexists('hash2','k2')
print(s)
#True
8,hdel(name,*keys)
删除键值对
#{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
r.hdel("hash1", "k1") # 删除一个键值对
print(r.hgetall("hash1"))
#{'k2': 'v222', 'k3': 'v3', 'k11': 'v1'}
9,hincrby(name, key, amount=1)
自增name对应的hash中的指定key的值,不存在则创建key=amount
r.hset("hash1", "k3", 123)
r.hincrby("hash1", "k3", amount=-1)
print(r.hgetall("hash1"))
#{'k3': '122'}
r.hincrby("hash1", "k4", amount=1) # 不存在的话,value默认就是1
print(r.hgetall("hash1"))
#{'k3': '122', 'k4': '1'}
10,hincrbyfloat(name, key, amount=1.0)
自增自减浮点数(将key对应的value--浮点数 自增1.0或者2.0,或者别的浮点数 负数就是自减)
r.hset("hash1", "k5", "1.0")
r.hincrbyfloat("hash1", "k5", amount=-1.0) # 已经存在,递减-1.0
print(r.hgetall("hash1"))
#{'k5': '0'}
r.hincrbyfloat("hash1", "k6", amount=-1.0) # 不存在,value初始值是-1.0 每次递减1.0
print(r.hgetall("hash1"))
#{'k5': '0', 'k6': '-1'}
11,hscan_iter(name, match=None, count=None)
利用yield封装hscan创建生成器,实现分批去redis中获取数据
参数:
match,匹配指定key,默认None 表示所有的key
count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
print(r.hgetall('hash1'))
#{'k5': '0', 'k6': '-1'}
for item in r.hscan_iter('hash1'):
print(item)
#('k5', '0')
#('k6', '-1') #f返回键值对元祖
5,list redis基本命令
1,lpush(name,values)
增加(类似于list的append,只是这里是从左边新增加)--没有就新建
r = redis.Redis(host='localhost', port=6379, db=15,decode_responses=True)
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)) # 切片取出值,范围是索引号0-3
2,lpushx(name,value)
往已经有的name的列表的左边添加元素,没有的话无法创建
r.lpushx("list1", 11) #该list1必须存在,否则无法插入
3,rpushx(name,value)
往已经有的name的列表的右边添加元素,没有的话无法创建
print(r.lrange('list1',0,-1))
#['1100', '11', '33', '22', '11', '33', '22', '11', '1100']
r.rpushx("list1", 1100) #增加
print(r.lrange('list1',0,-1))
#['1100', '11', '33', '22', '11', '33', '22', '11', '1100', '1100']
4,linsert(name, where, refvalue, value))
在name对应的列表的某一个值前或后插入一个新值
参数:
name,redis的name
where,BEFORE或AFTER
refvalue,标杆值,即:在它前后插入数据
value,要插入的数据
r.linsert("list1", "before", "11", "00") #意思是在11 之前插入00
5,r.lset(name, index, value)
对name对应的list中的某一个索引位置重新赋值
参数:
name,redis的name
index,list的索引位置
value,要设置的值
print(r.lrange('list1',0,-1))
#['1100', '00', '11', '33', '22', '11', '33', '22', '11', '1100', '1100']
r.lset('list1',1,'222') #对下标1的值改为222
print(r.lrange('list1',0,-1))
#['1100', '222', '11', '33', '22', '11', '33', '22', '11', '1100', '1100']
6,r.lrem(name, value, num)
在name对应的list中删除指定的值
参数:
name,redis的name
value,要删除的值
num,
num=0,删除列表中所有的指定值;
num=2,从前到后,删除2个; num=1,从前到后,删除左边第1个
num=-2,从后向前,删除2个
print(r.lrange("list1", 0, -1))
#['1100', '222', '11', '33', '22', '11', '33', '22', '11', '1100', '1100']
r.lrem('list1','1100',4) #左边出现的11,后面指定删除数量
print(r.lrange("list1", 0, -1))
#['1100', '222', '33', '22', '11', '33', '22', '11', '1100', '1100']
7,lpop(name)
在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
s = r.lpop('list1') #从左边删除第一个,并返回
s = r.rpop('list1') #从右边删除第一个,并返回
8,ltrim(name, start, end)
在name对应的列表中移除没有在start-end索引之间的值
参数:
name,redis的name
start,索引的起始位置
end,索引结束位置
print(r.lrange("list1", 0, -1))
#['33', '22', '11', '22', '33', '22']
r.ltrim('list1',0,2) #下标0-2也就是3个数,不在这个范围的删除
print(r.lrange("list1", 0, -1))
#['33', '22', '11']
9,lindex(name, index)
在name对应的列表中根据索引获取列表元素
print(r.lrange("list1", 0, -1))
#['33', '22', '11']
print(r.lindex('list1',0))
#33
10,rpoplpush(src, dst)
移动 元素从一个列表移动到另外一个列表
# list1 ['33', '22']
# list2 ['11', '5', '4', '3', '2', '1']
r.rpoplpush('list1','list2') #可以看出从第一个列表最右边一个移到第二个列表的最左侧
print(r.lrange("list1", 0, -1))
print(r.lrange("list2", 0, -1))
#['33']
#['22', '11', '5', '4', '3', '2', '1']
11,brpoplpush(src, dst, timeout=0)
移动 元素从一个列表移动到另外一个列表 可以设置超时
参数:
src,取出并要移除元素的列表对应的name
dst,要插入元素的列表对应的name
timeout,当src对应的列表中没有数据时,阻塞等待其有数据的超时时间(秒),0 表示永远阻塞
r.brpoplpush('list1','list2' , timeout=0)
print(r.lrange("list1", 0, -1))
print(r.lrange("list2", 0, -1))
#['33']
6,set redis基本命令
1,sadd(name,values)
name对应的集合中添加元素
r.sadd("set1", 33, 44, 55, 66) # 往集合中添加元素
print(r.scard("set1")) # 集合的长度是4
print(r.smembers("set1")) # 获取集合中所有的成员
#{'33', '55', '44', '66'}
2.获取元素个数 类似于 len
scard(name)
获取 name 对应的集合中元素个数
3.获取集合中所有的成员
smembers(name)
获取name对应的集合的所有成员
4, sscan('set1')
获取集合中所有的成员--元组形式
r.sadd("set1", 33, 44, 55, 66) # 往集合中添加元素
print(r.sscan('set1'))
#(0, ['33', '44', '55', '66'])
5,sscan_iter()
获取集合中所有的成员--迭代器的方式
for i in r.sscan_iter('set1'):
print(i)
'''
33
44
55
66
'''
6,sismember(name, value)
判断是否是集合的成员 类似in
print(r.smembers("set2"))
#{'55', '33', '66', '44'}
print(r.sismember('set2', '33'))
True
7,smove(src, dst, value)
将某个成员从一个集合中移动到另外一个集合
print(r.smembers("set2"))
#{'55', '66', '33', '44'}
print(r.smembers("set3"))
#{'11', '22', '33'}
r.smove("set2", "set3", '44') #移动
print(r.smembers("set2"))
#{'66', '55', '33'}
print(r.smembers("set3"))
#{'44', '11', '22', '33'}
8,spop(name)
从集合移除一个成员,并将其返回,说明一下,集合是无序的,所有是随机删除的
print(r.smembers("set2"))
s = r.spop('set2')
print(s)
print(r.smembers("set2"))
'''
{'66', '55', '33'}
66
{'55', '33'}
'''
’8,srem(name, values)
删除--指定值删除
print(r.smembers("set2"))
r.srem('set2','55')
print(r.smembers("set2"))
'''
{'33', '55'}
{'33'}
'''
7,redis基本命令 有序set