使用python操作redis
数据库的连接:
import redis
#连接数据库
db = redis.Redis('localhost',6379)
#连接池
# pool = redis.ConnectionPool(host='localhost',port=6379)
# db = redis.Redis(connection_pool=pool)
String操作:
使用key-value的模式来存储,相当于每个name对应一个value
set(name, value, ex=None, px=None, nx=False, xx=False)
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,岗前set操作才执行
db.set('name','fml')
print(db.get('name'))
结果:fml
setex(name,value,time)
time:过期时间(秒)
db.setex('name','1',2)
time.sleep(2)
print(db.get('name'))
结果:None
同样的还有
setnx(name,value),相当于set()中的nx参数为True
psetex(name.time,value),time为毫秒数
mset(*args,**kwargs) 批量操作,可传入字典
方式一
db.mset(t1 = 1,t2 = 2)
print(db.get('t1'))
print(db.get('t2'))
结果 1,2方式二
d = {'name':'fml','age':22}
db.mset(d)
print(db.get('name'))
print(db.get('age'))
结果: fml , 22get(name):返回name的值
mget(keys, *args):批量操作,返回多个值(列表的形式),可传入列表
print(db.mget('name','age'))
print(db.mget(['t1','t2']))
getset(name,value):设置新的值并返回之前的值
print(db.getset('name','test'))
print(db.get('name'))
getrange(key,start,end):获取子序列(根据字节获取,非字符)
start:起始位,end结束位,值得注意的是这个是按照字节来计算而不是字符个数 在utf-8的编码中一个中文汉字占三个字节,一个字符只占一位
db.set('name1','fml')
print(db.getrange('name1', 0, 1).decode())
db.set('name2','名字')
print(db.getrange('name2', 0, 2).decode())
setrange(name, offset, value): 从指定字符串索引开始向后替换(新值太长时,则向后添加)
offset:字符串索引号
db.set('name','test set range')
db.setrange('name',1,'ls') #从第二个字符开始替换
print(db.get('name').decode())
setbit(name, offset, value):和上面的一个功能类似,只不过是用bite方式来更改
getbit(name, offset):获取name的二进制表示中的某一位值
bitcount(key, start=None, end=None):统计name用二进制表示中的为1的个数
start,位起始位置end,位结束位置
db.set('name','f')
print(db.bitcount('name'))
#f对应的ASCII码的值为102,102转为二进制为 0110 0110 所以返回值为4
strlen(name):返回name对于值的字节长度,汉字三字节
db.set('name1','发生')
db.set('name2','fml')
print(db.strlen('name1'))
print(db.strlen('name2'))
incr(self, name, amount=1): name的对应值增加amount
自增只适用于整数,当name不存在的时候会新建一个name值为amount
db.set('num1',2)
db.incr('num1', amount=2)
db.incr('num2', amount=2)
print(db.get('num1').decode())
print(db.get('num2').decode())
incrbyfloat(self, name, amount=1.0):同上只不过是浮点型
decr(self, name, amount=1):同上功能为自减
append(key, value) :在name对应值后面追加value的内容,如果没有name就会新建一个name=value
db.set('name','fml')
db.append('name','test')
print(db.get('name').decode())
Hash操作
使用字典的方式来存储,name为字典名
hset(name, key, value):
db.hset('info','name','fml')
db.hset('info','age',22)
print(db.hget('info','name').decode())
print(db.hget('info','age').decode())
hmset(name, mapping):批量操作 ,mapping为字典
db.hmset('info1',{'name1':'fml','age1':23})
print(db.hget('info1','name1').decode())
print(db.hget('info1','age1').decode())
hget(name,key):同get操作
hmget(name, keys, *args):同mget,可传入列表或者多个值
hgetall(name):获取name的所有key-和value值
hlen(name):获取name中key的个数
hkeys(name):获取name中所有的key
hvals(name):获取name中所有的value值
hexists(name, key):判断name中是否存在传入的key
hdel(name,*keys):删除name中的key,若不存在返回0,删除成功后返回1
hincrby(name, key, amount=1):自增,同string操作一样
hincrbyfloat(name, key, amount=1.0) 自增浮点型
hscan(name, cursor=0, match=None, count=None) 过滤获取多个值
cursor:起始位置,match:过滤方法 ,count:获取的个数
过滤方法的例子:1:获取以n开头的key :n*
2:获取包含a的key:*a*
3:获取以e结尾的key:*e
db.hset('info','name','fml')
db.hset('info','age',22)
print(db.hscan('info',cursor=0,match= 'n*'))
print(db.hscan('info',cursor=0,match= '*e'))
print(db.hscan('info',cursor=0,match= '*g*'))
List操作
lpush(name,values): 向name添加元素,从左边开始添加
db.lpush('list','1','2','3')
print(db.lrange('list',0,-1))
lpush(name,values): 向name添加元素,从右边开始添加
db.rpush('list3','1','2','3')
print(db.lrange('list3',0,-1))
lpushx(name,value):只有当name存在的时候才在左边添加,相同的还有rpushx(name.value)
db.rpush('list3','1','2','3')
db.lpushx('list3',4)
print(db.lrange('list3',0,-1))
llen(name): 返回name的存储的长度
linsert(name, where, refvalue, value)) 在name的refvalue前面或后面插入value,如果存在多个refvalue的时候只会在从左往右数第一个起作用
where:BEFORE/AFTER
db.rpush('list5','1','2','3')
db.linsert('list5','BEFORE','2','5')
db.linsert('list5','AFTER','2','6')
print(db.lrange('list5',0,-1))
lset(name, index, value):修改index索引的值
db.rpush('list6','1','2','3')
db.lset('list6',1,4)
print(db.lrange('list6',0,-1))
lrem(name, value, num):删除name中的value,num为需要删除的个数
db.rpush('list7',1,2,3,4,1,2,4,5,7)
db.lrem('list7',1,1)
db.lrem('list7',2,2)
print(db.lrange('list7',0,-1))
lpop(name):删除左边第一个值并返回,同样的还有rpop(name):从右边弹出
lindex(name, index):获取index索引的值
lrange(name, start, end):返回切片获得的值
ltrim(name, start, end):删除除start-end之外的所有值
rpoplpush(src, dst) :删除src的最右的一个值,并把它添加到dst的最左边
blpop(keys, timeout):将多个列表排列,按照从左到右去pop对应列表的元素 同brpop(keys, timeout)
brpoplpush(src, dst, timeout=0):从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧
set集合操作