栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

大数据之Redis(上)

大数据之Redis(上)

Redis(上)
  • 前言
  • 一、Redis为什么快
  • 二、BIO、NIO、AIO
  • 三、Redis数据类型
    • 3.1 key
    • 3.2 String
    • 3.3 List
      • 3.3.1 Redis List的特点
      • 3.3.2 相关操作
    • 3.4 Set
    • 3.5 Hash
      • 3.5.1 数据结构
      • 3.5.2 相关操作
    • 3.6 Zset
  • 总结


前言

Redis是基于内存的开源的key-value存储系统,本文主要介绍有关Redis的基本概念以及数据类型,在大数据之Redis(下)中介绍Redis事务、持久化、主从复制、哨兵机制以及集群的概念。


一、Redis为什么快

(1)Redis是单线程的;

(2)Redis是基于内存的;

(3)Redis采用多路IO复用技术


BIO:一个连接对应一个线程,一个线程会连接一个IO请求,如果请求数>线程数,那么多余的请求进行等待;

多路IO复用是只有一个线程负责IO调度,来了一个请求,线程连接一个IO请求,处理完了返回结果。但是因为只有一个线程,线程返回的时候不知道是谁发的请求,所以加了一个Mapping(映射关系),这里记录着请求的来源信息。一旦一个请求没有处理完,又来了新的请求,新来的等待。所以多路IO复用只适合数据请求少,数据写入不频繁的场景。

与此同时,消息完成返回的时候,通过Mapping向一开始的socket进行轮询来找到谁是刚刚消息的发送者。但是如果有100个socket就会轮询100遍,但是真正发数据的可能只有1,2个,浪费性能。所以出现了新的函数epoll方法,不是轮询所有的,只记录有几个发数据的,轮询发送数据的就可以;

二、BIO、NIO、AIO

BIO:一次连接一个线程,但是可能不发数据,这样就会占用线程资源

NIO:一次请求一个线程(数据请求)

AIO:一次有效请求一个线程,即发送了大量的数据,但是都不是我想要的,也不会给线程资源。

三、Redis数据类型

Redis有5中常用的数据类型:String、List、Set、Hash、Zset。

3.1 key

(1)查询当前库的所有键 keys *

(2)判断某一个键是否存在 exists

(3)删除某一个键 del

(4)查看键的类型 type

(5)设置键过期时间 expire

(6)查看还有多少秒过期 TTL ,-1表示永不过期,-2表示已过期

(7)查看当前数据库key的数量 dbsize

(8)清空当前库 flushdb

(9)通杀所有库 flushall

3.2 String

(1)数据库中放入数据 set 添加键值对

(2)查询对应键值 get

(3)在指定键值后面追加指定的值 append

(4)获得值的长度 strlen

(5)在key不存在时设置key的值(类似于set),如果key存在什么都不做,而set会覆盖掉原来的值

(6)将key对应的值+1 或者 -1 ;incr / decr ,如果为空(key不存在),新增值为1/-1;注意只能对数字值操作。

(7)将 key 中储存的数字值增减。自定义步长;
  incrby / decrby <步长>

(8)同时设置一个或多个 key-value对;
  mset

(9)同时获取一个或多个 value
  mget

(10)同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
  msetnx

(11)获得值的范围,类似java中的substring
  getrange <起始位置> <结束位置>
  getrange k1 0
, -1表示取出所有的字符串,换成-2就是取到倒数第二个字符串;

(12)用 覆写 所储存的字符串值,从<起始位置>开始。
  setrange <起始位置>

(13)设置键值的同时,设置过期时间,单位秒。
  setex <过期时间>

(14)以新换旧,设置了新值同时获得旧值
  getset

3.3 List 3.3.1 Redis List的特点

(1)单键多值

(2)Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

(3)它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

3.3.2 相关操作

(1)从左边/右边插入一个或多个值。
  lpush/rpush
  例如:lpush k1 v1 v2 v3 v4
  列表的顺序:v4 v3 v2 v1因为是左侧插入
  Rpush v5 v6 v7
  列表的顺序:v4 v3 v2 v1 v5 v6 v7
(2)从左边/右边吐出一个值。值在键在,值亡键亡
  lpop/rpop

(3)从列表右边吐出一个值,插到列表左边。
  rpoplpush

(4)按照索引下标获得元素(从左到右)
  lrange
  lindex

(5)获得列表长度
   llen

(6)在的前面插入
  linsert before

(7)从左边删除n个value(从左到右)
  lrem

3.4 Set

 set可以自动去重,是无序的,并且还提供了判断某一个元素在不在一个set集合内的接口;

(1)将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
  sadd

(2)取出该集合的所有值。
  smembers

(3)判断集合是否为含有该值,有返回1,没有返回0。如果输入的key不存在也返回0.
  sismember

3.5 Hash 3.5.1 数据结构

仍然存储的是key-value的形式,但是value里面类似于一个map,即还是一个key-value的形式。

3.5.2 相关操作

(1)给集合中的 键赋值
  hset

(2)从集合 取出 value
  hget

(3)批量设置hash的值
  hmset

(4)查看哈希表 key 中,给定域 field 是否存在。
  hexists key

(5)列出该hash集合的所有field
  hkeys

(6)将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 .
  hsetnx

(7)为哈希表 key 中的域 field(只能是数值)的值加上增量 increment
  hincrby

3.6 Zset

  Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。与此同时zset是有序的。但是他这个有序不是排序,而是在输入数据的时候对每一个数据增加一个评分,根据评分来排序。


总结

本文主要介绍了有关Redis的基本概念以及数据类型,在大数据之Redis(下)中主要介绍Redis事务、持久化、主从复制、哨兵机制以及集群的概念,如果有不足之处或者表述不当的地方欢迎大家指正。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/601829.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号