Redis五大数据类型以及操作

目录:

一、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实例共享一个连接池。

#连接池
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'))

举例

pool.py

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

view.py

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')

3、Django-redis组件

安装:pip install django-redis

配置文件

CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://10.0.0.200:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
#"PASSWORD": "asdfasdf",
}
}
}

使用:

#利用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')

二、redis的字符串操作(string)

String操作,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)

设置值,只有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在内存中的存储格式如下图:

1、hset(name, key, value)

# name对应的hash中设置一个键值对(不存在,则创建;否则,修改)

# 参数:
# name,redis的name
# key,name对应的hash中的key
# value,name对应的hash中的value # 注:
# hsetnx(name, key, value),当name对应的hash中不存在当前key时则创建(相当于添加)

2、hmset(name, mapping)

# 在name对应的hash中批量设置键值对

# 参数:
# name,redis的name
# mapping,字典,如:{'k1':'v1', 'k2': 'v2'} # 如:
# r.hmset('xx', {'k1':'v1', 'k2': 'v2'})

3、hget(name,key)

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

4、hmget(name, keys, *args)

# 在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')

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)

# 增量式迭代获取,对于数据大的数据非常有用,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时,表示数据已经通过分片获取完毕

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

# 利用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
 

五、redis的集合操作

六、redis的有序集合操作

Redis数据类型之散列表的更多相关文章

  1. Redis数据类型之散列类型hash

    在redis中用的最多的就是hash和string类型. 问题 假设有User对象以JSON序列化的形式存储到redis中, User对象有id.username.password.age.name等 ...

  2. Redis数据类型之散列(hash)

    1. 什么是散列 散列类似于一个字典,是一个<K, V>对的集合,不过这个key和value都只能是字符串类型的,不能嵌套,可以看做Java中的Map<String, String& ...

  3. redis数据类型-散列类型

    Redis数据类型 散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他 ...

  4. redis学习-散列表常用命令(hash)

    redis学习-散列表常用命令(hash)   hset,hmset:给指定散列表插入一个或者多个键值对 hget,hmget:获取指定散列表一个或者多个键值对的值 hgetall:获取所欲哦键值以及 ...

  5. Redis数据类型之列表(list)

    1. 什么是列表 redis的列表使用双向链表实现,往列表中放元素的时候复杂度是O(1),但是随机访问的时候速度就不行了,因为需要先遍历到指定的位置才可以取到元素. 既然列表是使用链表实现的,那么就说 ...

  6. 算法导论 第十章 基本数据类型 & 第十一章 散列表(python)

    更多的理论细节可以用<数据结构>严蔚敏 看几遍,数据结构很重要是实现算法的很大一部分 下面主要谈谈python怎么实现 10.1 栈和队列 栈:后进先出LIFO 队列:先进先出FIFO p ...

  7. Redis-cluster集群【第一篇】:redis安装及redis数据类型

    Redis介绍: 一.介绍 redis 是一个开源的.使用C语言编写的.支持网络交互的.可以基于内存也可以持久化的Key-Value数据库. redis的源码非常简单,只要有时间看看谭浩强的C语言,在 ...

  8. redis数据类型-有序集合

    有序集合类型 在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入.删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素.获得指 ...

  9. redis笔记总结之redis数据类型及常用命令

    三.常用命令 3.1 字符串类型(string) 字符串类型是Redis中最基本的数据类型,一个字符串类型的键允许存储的数据的最大容量为512MB. 3.1.1 赋值与取值: SET key valu ...

随机推荐

  1. 阶段3 2.Spring_03.Spring的 IOC 和 DI_4 ApplicationContext的三个实现类

    如何找到接口的实现类 BeanFactory是核心容器的顶层接口 查看接口的实现类 接下来介绍这三个实现类 把bean.xml复制到桌面上面 运行测试程序 实际更常用ClassPathXmlAppli ...

  2. python的dict,set,list,tuple应用详解

    python的dict,set,list,tuple应用详解 本文深入剖析了python中dict,set,list,tuple应用及对应示例,有助于读者对其概念及原理的掌握.具体如下: 1.字典(d ...

  3. Spring MVC -- 去掉静态资源的拦截

    <!-- springmvc的前端控制器 --> <servlet> <servlet-name>springMVC</servlet-name> &l ...

  4. Day04:继承的意义(下)

    对象转型 向上造型 什么是向上造型? 子类对象赋给父类引用. 父类引用指向子类对象. 子类转成父类 默认进行(父类引用指向子类对象). 为什么需要向上造型? 子类对象可以放入父类类型的数组中. 父类数 ...

  5. Java程序设计——反转字符串 & 找朋友 & 计算int型二进制1的个数 & 情报加密 & 计算日期 & 求近似数 & 输出较小数(练习1)

    作为刚刚入门Java的选手,其实C++的功底起到了很大的作用.但是,Java之于C++最大的不同,我个人认为,是其类的多样性.才入门的我,写着老师布置的简单的面对过程的题,如果是C++,可以算是简单了 ...

  6. java锁机制的面试题

    java锁机制的面试题 1.ABA问题 2.CAS乐观锁 3.synchronize实现原理 4.synchronize与lock的区别 5.volatile实现原理 6.乐观锁的业务场景及实现方式 ...

  7. OpenTSDB查询和写入毫秒级数据

    由于OpenTSDB没有支持Java的SDK进行调用,所以基于Java开发OpenTSDB的调用将要依靠HTTP请求的方式进行. 1.毫秒级数据写入 /api/put:通过POST方式插入JSON格式 ...

  8. P1142轰炸

    这是uva上的一道模拟题. 首先给出n(n<=700)个点的坐标(坐标在1*10^9)之内,询问走直线可以经过的点数.一开始我想到了一个类似于桶排序的方法来存坐标,但是要注意数组大小啊!第二次想 ...

  9. python中对多态和多态性的理解

    python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多态的概念依赖于继承) import abc class Animal( ...

  10. PostgreSQL-pg_ctl

    命令简介 pg_ctl 启动.关闭.重启 postgres pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p pat ...