Redis数据类型之散列表 清疚 2021-12-14 10:49 317阅读 0赞 一.redis的两种链接方式 二.redis的字符串操作(string) 三.redis的列表操作(list) 四.redis的散列表操作(类似于字典里面嵌套字典) 五.redis的集合操作(set) 六.redis的有序集合操作(zset) 一、redis的两种链接方式 1、简单连接 import redis conn = redis.Redis(host='10.0.0.200',port=6379) conn.set('k1','年后') print(conn.get('k1')) 2、连接池 如果要连接redis的时候推荐用连接池的方式;如果每次操作都用同一个链接,可以用连接池链接 redis使用connection pool来管理对一个redis服务的所有连接,避免每次建立,释放连接的开销。默认 ,每个redis实例都会维护一个自己的链接池。可以直接建立一个连接池, 然后作为参数redis,这样就可以实现多个redis实例共享一个连接池。 ![复制代码][Image 1] #连接池 import redis pool = redis.ConnectionPool(host='10.0.0.200',port=6379) conn = redis.Redis(connection_pool=pool) conn.set('a','lalla') print(conn.get('a')) ![复制代码][Image 1] 举例 pool.py import redis POOL = redis.ConnectionPool(host='10.0.0.200',port=6379) view.py ![复制代码][Image 1] from django.shortcuts import render,HttpResponse import redis from app01.pool import POOL # Create your views here. def index(request): pool = redis.Redis(connection_pool=POOL) #连接redis return HttpResponse('ok') def home(request): pool = redis.Redis(connection_pool=POOL) return HttpResponse('ok') ![复制代码][Image 1] 3、Django-redis组件 安装:pip install django-redis 配置文件 ![复制代码][Image 1] CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.0.0.200:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", #"PASSWORD": "asdfasdf", } } } ![复制代码][Image 1] 使用: ![复制代码][Image 1] #利用django-redis组件进行连接 from django.core.cache import caches import os import django_redis os.environ['DJANGO_SETTINGS_MODULE'] = 'redis之集合练习.settings' conn = django_redis.get_redis_connection() conn.set('b','666') ![复制代码][Image 1] 二、redis的字符串操作(string) String操作,redis中的String在在内存中按照一个name对应一个value来存储。 ![1184802-20180302112808703-991545894.png][] 1、set(name, value, ex=None, px=None, nx=False, xx=False) \#设置值 在Redis中设置值,默认,不存在则创建,存在则修改 参数: ex,过期时间(秒) px,过期时间(毫秒) nx,如果设置为True,则只有name不存在时,当前set操作才执行 xx,如果设置为True,则只有name存在时,岗前set操作才执行 2、setnx(name, value) 设置值,只有name不存在时,执行设置操作(添加) #相当于只是添加,不能进行修改操作 3、setex(name, value, time) # 设置值 # 参数: # time,过期时间(数字秒 或 timedelta对象) 4、psetex(name, time\_ms, value) # 设置值 # 参数: # time_ms,过期时间(数字毫秒 或 timedelta对象) 5、mset(\*args, \*\*kwargs) 批量设置值 如: mset(k1='v1', k2='v2') 或 mset({'k1': 'v1', 'k2': 'v2'}) 6、get(name) 获取值 7、mget(keys, \*args) 批量获取 如: mget('ylr', 'zzz') 或 r.mget(['ylr', 'zzz']) 8、getset(name, value) 设置新值并获取原来的值 9、getrange(key, start, end) # 获取子序列(根据字节获取,非字符) # 参数: # name,Redis 的 name # start,起始位置(字节) # end,结束位置(字节) # 如: "拉销量" ,0-3表示 "拉" 待续。。 三、redis的列表操作(list) 四、redis的散列表操作 Hash操作,也叫做散列表操作。redis中Hash在内存中的存储格式如下图: ![1184802-20180302115048108-1496786746.png][] 1、hset(name, key, value) ![复制代码][Image 1] # name对应的hash中设置一个键值对(不存在,则创建;否则,修改) # 参数: # name,redis的name # key,name对应的hash中的key # value,name对应的hash中的value # 注: # hsetnx(name, key, value),当name对应的hash中不存在当前key时则创建(相当于添加) ![复制代码][Image 1] 2、hmset(name, mapping) ![复制代码][Image 1] # 在name对应的hash中批量设置键值对 # 参数: # name,redis的name # mapping,字典,如:{'k1':'v1', 'k2': 'v2'} # 如: # r.hmset('xx', {'k1':'v1', 'k2': 'v2'}) ![复制代码][Image 1] 3、hget(name,key) # 在name对应的hash中获取根据key获取value 4、hmget(name, keys, \*args) ![复制代码][Image 1] # 在name对应的hash中获取多个key的值 # 参数: # name,reids对应的name # keys,要获取key集合,如:['k1', 'k2', 'k3'] # *args,要获取的key,如:k1,k2,k3 # 如: # r.mget('xx', ['k1', 'k2']) # 或 # print r.hmget('xx', 'k1', 'k2') ![复制代码][Image 1] 5、hgetall(name) 获取name对应的hash中的所有键值 6、hlen(name) 获取name对应的hash中键值对的个数 7、hkeys(name) 获取name对应的hash中所有的key的值 8、hvals(name) 获取name对应的hash中所有的value的值 9、hexists(name, key) 检查name对应的hash是否存在当前传入的key 10、hdel(name,\*keys) 将name对应的hash中指定key的键值对删除 11、hincrby(name, key, amount=1) 吧原来的值自加1 hincrby ('xxx','slex',amount=-1) \#吧原来的值自减1 # 自增name对应的hash中的指定key的值,不存在则创建key=amount # 参数: # name,redis中的name # key, hash对应的key # amount,自增数(整数) 12、hincrbyfloat(name, key, amount=1.0) 支持浮点型的 13、hscan(name, cursor=0, match=None, count=None) ![复制代码][Image 1] # 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆 # 参数: # name,redis的name # cursor,游标(基于游标分批取获取数据) # match,匹配指定key,默认None 表示所有的key # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数 # 如: # 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None) # 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None) # ... # 直到返回值cursor的值为0时,表示数据已经通过分片获取完毕 ![复制代码][Image 1] 14、hscan\_iter(name, match=None, count=None) ![复制代码][Image 1] # 利用yield封装hscan创建生成器,实现分批去redis中获取数据 # 参数: # match,匹配指定key,默认None 表示所有的key # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数 # 如: # for item in r.hscan_iter('xx'): # print item # for item in r.hscan_iter('xx',match='*lx'): #匹配以lx结尾的 # print item ![复制代码][Image 1] 五、redis的集合操作 六、redis的有序集合操作 [ 参考博客][Link 1] 转载于:https://www.cnblogs.com/kcwxx/p/10145737.html [Image 1]: [1184802-20180302112808703-991545894.png]: /images/20211214/ae740ed7f0c34a9bb573b46ff38433df.png [1184802-20180302115048108-1496786746.png]: /images/20211214/d196ef71e43d4389860e7af1552a7057.png [Link 1]: http://www.cnblogs.com/wupeiqi/articles/5132791.html
还没有评论,来说两句吧...