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的主要内容,如果未能解决你的问题,请参考以下文章

RedisRedis 安装启动使用流程

RedisRedis 安装启动使用流程

redisredis知识点总结

redisredis知识点总结

RedisRedis高级

RedisRedis简述