Redis
Posted liangxiaoji
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis相关的知识,希望对你有一定的参考价值。
import redis # 这个相当于是在pycharm中操作mysql的pymysql,只不过Redis中的就叫redis # r = redis.Redis() # 不带decode_responses取出来的是字节.另连接自己电脑的不用写host和port了 # r = redis.Redis(decode_responses=True) #带decode_responses取出来的是字符串 # print(r.get(‘name‘)) #b‘yy‘ ‘yy‘ pool = redis.ConnectionPool(decode_responses=True) # 数据库连接池,decode_responses写在数据库连接池中 r = redis.Redis(connection_pool=pool) ##############字符串操作################### # r.set(‘name‘,‘dayangge‘,10) # 10是过期时间,单位是秒 # r.set(‘name‘,‘dayangge‘) # r.setnx(‘name‘,‘chao‘) # 设置值,只有name不存在时,执行设置操作(添加) #批量设置值 # r.mset(‘k1‘:‘v1‘,‘k2‘:‘v2‘) #批量取值 # print(r.mget([‘k1‘,‘k2‘])) #[‘v1‘, ‘v2‘] # print(r.get(‘k1‘)) #更新值,并获取原来的值 # print(r.getset(‘name‘,‘anan‘)) # 得到dayangge # print(r.get(‘name‘)) # 得到 anan # r.set(‘name‘,‘安安‘) #取子序列,左右都包,是字节,如果是汉字的话,上面utf-8编码的一个"安"是(0,2),如果取的不是刚好一个完整的中文,会报错,比如(0,4):0-2是第一个"安",3-5是第二个"安" # print(r.getrange(‘name‘,0,2)) # 得到ana 或 安 #setrange 替换子序列 # r.set(‘movie‘,‘fuchouzhelianmeng4‘) # r.setrange(‘movie‘,2,‘xxxx‘) # 2代表是从第2个字节开始往后替换 # print(r.get(‘movie‘)) #字节长度 # print(r.strlen(‘name‘)) # 返回name对应值的字节长度(一个汉字3个字节) #incr自增 # r.set(‘age‘,18) # print(type(r.get(‘age‘))) # <class ‘str‘> # r.incr(‘age‘,1) #19(在原来的基础上自增1),针对的是数字类型的. incr自增 name对应的值,当name不存在时,则创建name=amount(必须是整数),否则,则自增。 # print(r.get(‘age‘)) # r.append(‘name‘,‘大长腿‘) # print(r.get(‘name‘)) ##############列表操作################### # r.lpush(‘l1‘,11,22,33) #[‘33‘, ‘22‘, ‘11‘] 从左边添加到列表中 # print(r.lrange(‘l1‘,0,-1)) # 列表没有像字符串那样的直接的取值的操作,使用range切片取值,数字是索引 # r.rpush(‘l2‘,11,22,33) # 从右边添加到列表中 # print(r.lrange(‘l2‘,0,-1)) #[‘11‘, ‘22‘, ‘33‘] #列表长度 # print(r.llen(‘l1‘)) #插入 linsert # r.linsert(‘l2‘,‘AFTER‘,‘22‘,‘66‘) #更新值 # r.lset(‘l2‘,1,‘chao‘) #删除值 remove,l代表list的意思.在name对应的list中删除指定的值,num=0,删除列表中所有的指定值; # r.lrem(‘l2‘,‘66‘,2) #没有两个66也不报错 # r.lrem(‘l1‘,‘22‘,2) #要删除的元素的个数 # r.lpush(‘name_list‘,‘yy‘,‘wd‘,‘chao‘) # print(r.lpop(‘name_list‘)) # 从左边删除 # print(r.rpop(‘name_list‘)) # 从右边删除 #根据索引查找值 # print(r.lindex(‘name_list‘,1)) # 在name对应的列表中根据索引获取列表元素 # print(r.lrange(‘name_list‘,0,-1)) # 在name对应的列表分片获取数据 ##################hash操作#################### #设置值,获取值 # r.hset(‘d1‘,‘name‘,‘chao‘) #d1:‘key‘,‘value‘ # print(r.hget(‘d1‘,‘name‘)) # r.hmset(‘xx‘, ‘k1‘:‘v1‘, ‘k2‘: ‘v2‘)#‘xx‘:‘k1‘:‘v1‘, ‘k2‘: ‘v2‘ # print(r.hget(‘xx‘,‘k1‘)) #批量获取值 # print(r.hmget(‘xx‘,[‘k1‘,‘k2‘])) #获取name对应的所有的键值对 # print(r.hgetall(‘xx‘)) #‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘,类型是dict #统计name对应的字典的键值对个数 # print(r.hlen(‘xx‘)) # print(r.hkeys(‘xx‘)) # [‘k1‘,‘k2‘] # print(r.keys()) # 这个获取的是Redis中所有的name,结果也是列表 # print(r.hexists(‘xx‘,‘xxx‘)) # 检查name对应的hash是否存在当前传入的key # r.hdel(‘xx‘,‘k1‘) # print(r.hkeys(‘xx‘)) #######注意################ import json #关于内层嵌套字典格式数据时的处理方式 # r.hmset(‘Jaden‘,‘k1‘:json.dumps(‘a‘:111),‘hobby‘:‘girl‘) # 方法一:将内层的字典先进行json序列化,否则Redis会自动帮你转化成str类型的,但是不是json的字符串 # r.set(‘Jaden‘,json.dumps(‘k1‘:‘a‘:111,‘hobby‘:‘girl‘)) # 方法二:不存储为hash的数据类型了,直接存储为string类型的,将整个字典序列化为json字符串,作为name对应的值 # res = r.hget(‘Jaden‘,‘k1‘) # print(type(res)) # res = json.loads(res) # print(res[‘a‘]) # print(r.hgetall(‘Jaden‘)) # r.delete(‘Jaden‘) #删除一个键 # print(r.get(‘Jaden‘)) # None # print(r.keys()) # r.delete(*r.keys()) #删除所有的key,如果没有键,你执行这个指令会报错 # 模糊查询key # print(r.keys(‘what*‘)) #[b‘what‘, b‘what1‘],模糊查询,*任意多个,?任意一个,h[ae]llo,能匹配hello,hallo,但不能匹配haello,不能匹配hillo,类似正则,
但是是人家redis提供的一些模糊匹配的规则 #为某个name设置超时时间 #r.set是对字符串设置过期时间 # r.hset(‘xxx‘,‘hobby‘,‘girls‘) # # # r.expire(‘xxx‘,10) #对hash数据设置过期时间,3是秒数 # print(r.keys()) # print(r.hget(‘xxx‘,‘hobby‘)) ############################list操作####################### # 1. 插入列表数据 # r.lpush(‘gf‘,‘铁锤‘,‘钢蛋‘) #多次运行,会给gf多次添加,先推进去的在最后,这样一个顺序 # print([i.decode(‘utf-8‘) for i in r.lrange(‘gf‘,0,-1)]) #取值,中文 # r.lpush(‘cc‘,22,33,11) # print(r.lrange(‘cc‘,0,-1)) #[b‘11‘, b‘33‘, b‘22‘] # r.lpushx(‘cc‘,‘xxx‘) #这个没啥说的 # print(r.lrange(‘cc‘,0,-1)) #没有直接获取列表的方法,只能通过lrange来取 #2 llen 查看当前的列表长度 # print(r.llen(‘cc‘)) #3 linsert 插入,在某个值的前面或者后面插入值: # r.linsert(‘cc‘,‘AFTER‘,‘11‘,‘chao‘) # print(r.lrange(‘cc‘,0,-1)) #4 lset 根据索引替换内容 # r.lset(‘cc‘,1,‘Jaden‘) # print(r.lrange(‘cc‘,0,-1)) #5 lrem 删除 # r.lrem(‘cc‘,‘chao‘) #删除所有的chao # r.lrem(‘cc‘,‘chao‘,1) #删除第一个的chao,从左往右 # print(r.lrange(‘cc‘,0,-1)) #6. lpop 删除, # print(r.lpop(‘cc‘)) #从左往右删,一个一个删除,返回删除的元素 # print(r.lrange(‘cc‘,0,-1)) # r.rpop(‘cc‘) #从右往左删 #7 lindex,根据索引查找对应元素 # print(r.lindex(‘cc‘,1)) # print(r.lrange(‘cc‘,0,-1)) #还有好多其他的,不挨个试了 ###################hash操作########################## import json #1 hset 设置值 # r.hset(‘info‘,‘name‘,‘chao‘) #info:‘name‘:‘chao‘ # print(r.hget(‘info‘,‘name‘)) #取值 # 2 hmset 批量设置值 # r.hmset(‘chao‘,‘age‘:18,‘hobby‘:‘girl‘) # print(r.hmget(‘chao‘,‘age‘,‘hobby‘)) #[b‘18‘, b‘girl‘] # print(r.hmget(‘chao‘,[‘age‘,‘hobby‘])) #[b‘18‘, b‘girl‘] # print(r.hgetall(‘chao‘)) #b‘age‘: b‘18‘, b‘hobby‘: b‘girl‘ 字典 # # r.hmset(‘Jaden‘,‘k1‘:‘a‘:111,‘hobby‘:‘girl‘) # print(r.hgetall(‘Jaden‘)) #b‘k1‘: b"‘a‘: 111", b‘hobby‘: b‘girl‘注意我们存的深层的字典变成了字符串"‘a‘:111",所以注意取出来的值,这个不是json字符串,
所以没办法反序列化,所以我们存的时候,可以直接存json字符串r.hmset(‘Jaden‘,json.dumps(‘k1‘:‘a‘:111),‘hobby‘:‘girl‘),还有一种方法: #r.set(‘Jaden‘,json.dumps(‘k1‘:‘a‘:111,‘hobby‘:‘girl‘)) #直接将所有的数据都搞成json字符串形式的,插入值不用hset了,直接用set,这个点用的比较多昂 #3 hlen(name),统计name对应的字典的键值对个数 #4 hkeys 取所有的键 # print(r.hkeys(‘Jaden‘)) #[b‘k1‘, b‘hobby‘] #5 r.keys() # print(r.keys()) # redis 下面的数据结构是: # keys:hkeys:‘xxx‘ # #取所有的值:hvals(name) #6 hexists(name,key) 查看name对应的字典中有没有这个key # print(r.hexists(‘Jaden‘,‘k1‘)) # print(r.exists(‘Jaden‘)) #7 hdel删除某个key # r.hdel(‘Jaden‘,‘k1‘) # print(r.hkeys(‘Jaden‘)) # print(r.hgetall(‘Jaden‘)) ###集合不咋用就不说了### #############来几个总体的redis层操作 # print(r.keys()) # r.delete(‘what2‘) #删除一个键 # print(r.keys()) # r.delete(*r.keys()) #删除所有的key,如果没有键,你执行这个指令会报错 # 模糊查询key # print(r.keys(‘what*‘)) #[b‘what‘, b‘what1‘],模糊查询,*任意多个,?任意一个,h[ae]llo,能匹配hello,hallo,但不能匹配haello,不能匹配hillo,类似正则,
但是是人家redis提供的一些模糊匹配的规则 #为某个name设置超时时间 #r.set是对字符串设置过期时间 # r.expire(‘what‘,3) #对hash数据设置过期时间,3是秒数 # print(r.keys()) # r.delete(*r.keys()) # print(r.keys()) # r.hmset(‘name_list‘,‘k1‘:‘v1‘,‘k2‘:‘v2‘) # r.hmset(‘hobby_list‘,‘h1‘:‘d1‘) # print(r.keys()) #获取所有的name # print(r.keys(‘h*‘)) #获取所有的以h开头的name # print(r.hkeys(‘name_list‘)) #Redis的name=name_list对应的字典的所有的key
以上是关于Redis的主要内容,如果未能解决你的问题,请参考以下文章