Redis基础

使用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 , 22

get(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集合操作


posted @ 2018-03-13 17:54  fanmleii  阅读(100)  评论(0编辑  收藏  举报