redis之五大数据类型

redis的两种链接方式

简单链接

  1. 1
    2
    3
    4
  1. import redis
    conn = redis.Redis(host='10.0.0.200',port=6379)
    conn.set('k1','value')
    print(conn.get('k1'))

连接池

如果要链接redis的时候推荐用连接池的方式;如果每次操作都用同一个链接,可以使用连接池

redis使用connection_poll来管理对一个redis服务的所有链接,避免每次建立,释放链接的开销
默认每个redis实例都会维护一个自己的链接池。可以直接建立一个连接池,然后作为参数redis,这样
就可以实现多个redis实例共享一个连接池

  1. 1
    2
    3
    4
    5
    6
    7
  1. #连接池
    import redis
    pool = redis.ConnectionPool(host='10.0.0.200',port=6379)
    conn = redis.Redis(connection_pool=pool)
  2.  
  3. conn.set('a','python')
    print(conn.get('a'))

例子

pool.py

  1. 1
    2
  1. import redis
    POOL = redis.ConnectionPool(host='10.0.0.200',port=6379)

view.py

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  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')
  2.  
  3. def home(request):
    pool = redis.Redis(connection_pool=POOL)
    return HttpResponse('ok')

Django-redis组件

安装: pip install django-redis

配置文件

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  1. CACHES = {
    "default": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://10.0.0.200:6379",
    "OPTIONS": {
    "CLIENT_CLASS": "django_redis.client.DefaultClient",
    #"PASSWORD": "123456",
    }
    }
    }

使用

  1. 1
    2
    3
    4
    5
    6
    7
    8
  1. #利用django-redis组件进行连接
    from django.core.cache import caches
    import os
    import django_redis
    os.environ['DJANGO_SETTINGS_MODULE'] = 'redis_use.settings'
  2.  
  3. conn = django_redis.get_redis_connection()
    conn.set('b','666')

redis的字符串操作(string)

Sting操作,redis中的String在内存中按照一个name对应一个value来存储

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)

  1. 设置值,只有name不存在时,执行设置操作(添加) #相当于只是添加,不能进行修改操作

3、setex(name, value, time)

  1. # 设置值
  2. # 参数:
  3. # time,过期时间(数字秒 或 timedelta对象)

4、psetex(name, time_ms, value)

  1. # 设置值
  2. # 参数:
  3. # time_ms,过期时间(数字毫秒 或 timedelta对象)

5、mset(*args, **kwargs)

  1. 批量设置值
  2. 如:
  3. mset(k1='v1', k2='v2')

  4. mset({'k1': 'v1', 'k2': 'v2'})

6、get(name) 获取值

7、mget(keys, *args)

  1. 批量获取
  2. 如:
  3. mget('ylr', 'zzz')

  4. r.mget(['ylr', 'zzz'])

8、getset(name, value) 设置新值并获取原来的值

9、getrange(key, start, end)

  1. # 获取子序列(根据字节获取,非字符)
  2. # 参数:
  3. # name,Redis 的 name
  4. # start,起始位置(字节)
  5. # end,结束位置(字节)
  6. # 如: "拉销量" ,0-3表示 "拉"

待续。。

redis的列表操作(list)

redis的散列表操作(类似于字典里面嵌套字典)

Hash操作,也叫做散列表操作。redis中Hash在内存中的存储格式如下

1、hset(name, key, value)

  1. # name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
  2. # 参数:
  3. # name,redis的name
  4. # key,name对应的hash中的key
  5. # value,name对应的hash中的value
  6. # 注:
  7. # hsetnx(name, key, value),当name对应的hash中不存在当前key时则创建(相当于添加)

2、hmset(name, mapping)

  1. # 在name对应的hash中批量设置键值对
  2. # 参数:
  3. # name,redis的name
  4. # mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
  5. # 如:
  6. # r.hmset('xx', {'k1':'v1', 'k2': 'v2'})

3、hget(name,key)

  1. # 在name对应的hash中获取根据key获取value

4、hmget(name, keys, *args)

  1. # 在name对应的hash中获取多个key的值
  2. # 参数:
  3. # name,reids对应的name
  4. # keys,要获取key集合,如:['k1', 'k2', 'k3']
  5. # *args,要获取的key,如:k1,k2,k3
  6. # 如:
  7. # r.mget('xx', ['k1', 'k2'])
  8. # 或
  9. # print r.hmget('xx', 'k1', 'k2')

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

  1. hincrby ('xxx','slex',amount=-1) #吧原来的值自减1
  2. # 自增name对应的hash中的指定key的值,不存在则创建key=amount
  3. # 参数:
  4. # name,redis中的name
  5. # key, hash对应的key
  6. # amount,自增数(整数)

12、hincrbyfloat(name, key, amount=1.0) 支持浮点型的

13、hscan(name, cursor=0, match=None, count=None)

  1. # 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆
  2. # 参数:
  3. # name,redis的name
  4. # cursor,游标(基于游标分批取获取数据)
  5. # match,匹配指定key,默认None 表示所有的key
  6. # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
  7. # 如:
  8. # 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
  9. # 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
  10. # ...
  11. # 直到返回值cursor的值为0时,表示数据已经通过分片获取完毕

14、hscan_iter(name, match=None, count=None)

  1. # 利用yield封装hscan创建生成器,实现分批去redis中获取数据
  2. # 参数:
  3. # match,匹配指定key,默认None 表示所有的key
  4. # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
  5. # 如:
  6. # for item in r.hscan_iter('xx'):
  7. # print item
  8.   # for item in r.hscan_iter('xx',match='*lx'): #匹配以lx结尾的
  9. # print item

redis的集合操作(set)

redis的有序集合操作(zset)

redis之五大数据类型的更多相关文章

  1. Redis(三)--- Redis的五大数据类型的底层实现

    1.简介 Redis的五大数据类型也称五大数据对象:前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject:这个对象系统包 ...

  2. Redis的五大数据类型以及key的相关操作命令

    Redis的五大数据类型 redis的数据都是以key/value存储,所以说,五大类型指的是value的数据类型 String 字符串,作为redis的最基本数据类型 redis中的string类型 ...

  3. 面试官:讲讲Redis的五大数据类型?如何使用?(内含完整测试源码)

    写在前面 最近面试跳槽的小伙伴有点多,给我反馈的面试情况更是千差万别,不过很多小伙伴反馈说:面试中的大部分问题都能够在我的公众号[冰河技术]中找到答案,面试过程还是挺轻松的,最终也是轻松的拿到了Off ...

  4. 解析Redis操作五大数据类型常用命令

    摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法. 本文分享自华为云社区<Redis操作五大数据类型常用命令解析>,作者:灰 ...

  5. Redis详解(五)------ redis的五大数据类型实现原理

    前面两篇博客,第一篇介绍了五大数据类型的基本用法,第二篇介绍了Redis底层的六种数据结构.在Redis中,并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对 ...

  6. redis之五大数据类型介绍

    目录 redis五大数据类型 1. string(字符串) 特点: 格式: 基本操作: 2. hash(哈希) 特点: 格式: 基本操作 3. list(列表) 特点 格式 基本操作 4. set(集 ...

  7. Redis 详解 (五) redis的五大数据类型实现原理

    目录 1.对象的类型与编码 ①.type属性 ②.encoding 属性和 *prt 指针 2.字符串对象 3.列表对象 4.哈希对象 5.集合对象 6.有序集合对象 7.五大数据类型的应用场景 8. ...

  8. redis的五大数据类型实现原理

    1.对象的类型与编码 Redis使用前面说的五大数据类型来表示键和值,每次在Redis数据库中创建一个键值对时,至少会创建两个对象,一个是键对象,一个是值对象,而Redis中的每个对象都是由 redi ...

  9. Redis常用五大数据类型

    1.String(字符串) string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 . string类型是Redis最基本的数据类型,一个red ...

随机推荐

  1. 基于对话框的Opengl框架

    转自:http://blog.csdn.net/longxiaoshi/article/details/8238933 12-11-29 14:55 1198人阅读 评论(6) 收藏 举报  分类: ...

  2. 假日旅游CSS网页模板

    假日旅游CSS3网页模板,蓝色,旅游,假日,公司,设计,主页,HTML,DIV+CSS,模板下载. http://www.huiyi8.com/lvyoumuban/css/

  3. 分享知识-快乐自己:Oracle中定义及使用同义词

    Oracle 同义词概念: Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系. 它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别; ...

  4. Python 使用正则表达式验证密码必须包含大小写字母和数字

    校验密码是否合法的程序. 输入一个密码 1.长度5-10位 2.密码里面必须包含,大写字母.小写字母和数字 3.最多输入5次 ===================================== ...

  5. haproxy透传用户ip-方法和原理

    为了透传用户ip到后端server, proxy机器需要解决两个问题: 1.在创建到后端server的套接字时, 将用户ip作为套接字的源ip,从而让后端server看到: 2.后端server在回包 ...

  6. next enum in swift

    enum Iter: Int{ case s1=0, s2, s3, s4 mutating func next(){ if self == .s4 { self = .s1 return } sel ...

  7. 点分治Day2 动态树分治

    蒟蒻Ez3real冬令营爆炸之后滚回来更新blog... 我们看一道题 bzoj3924 ZJOI2015D1T1 幻想乡战略游戏 给一棵$n$个点的树$(n \leqslant 150000)$ 点 ...

  8. ACM学习历程—HDU1028 Ignatius and the Princess(组合数学)

    Ignatius and the Princess Description        "Well, it seems the first problem is too easy. I w ...

  9. Oracle表空间维护总结

    1. 概念:表空间:最大的逻辑存储文件,与物理上的一个或多个数据文件对应,每个数据库至少拥有一个表空间,表空间的大小等于构成表空间的所有数据文件的大小总和,用于存储用户在数据库中存储的所有内容. 2. ...

  10. Set_ML

    参考资料:斯坦福(http://cs231n.github.io/linear-classify/:http://cs231n.stanford.edu/slides/2017/) Mastering ...