【多图警告】Redis简介安装以及五大数据类型

可以根据目录查阅五大数据类型操作指令 →→→→→→→→→→→→→→→在右侧
方便查阅redis常见指令做参考

文章目录

NoSQL数据库概述

  • NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。
  • NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
  • 不遵循SQL标准。
  • 不支持ACID。
  • 远超于SQL的性能。

NoSQL适用场景

  • 对数据高并发的读写
  • 海量数据的读写
  • 对数据高可扩展性的
  • NoSQL不适用场景 需要事务支持
  • 基于sql的结构化查询存储,处理复杂的关系,需要即席查询。 用不着sql的和用了sql也不行的情况,请考虑用NoSql

NoSQL数据库简介—缓存数据库

Memcached

很早出现的NoSql数据库
数据都在内存中,一般不持久化
支持简单的key-value模式
一般是作为缓存数据库辅助持久化的数据库

Redis

几乎覆盖了Memcached的绝大部分功能
数据都在内存中,支持持久化,主要用作备份恢复
除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。
一般是作为缓存数据库辅助持久化的数据库
NoSQL数据库简介—文档数据库

mongoDB

高性能、开源、模式自由(schema free)的文档型数据库
数据都在内存中, 如果内存不足,
虽然是key-value模式,但是对value(尤其是json)提供把不常用的数据保存到硬盘了丰富的查询功能
支持二进制数据及大型对象
可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,
NoSQL数据库简介—列式数据库

HBase

HBase是Hadoop项目中的数据库。它用于需要对大量的数据进行随机、实时的读写操作的场景中。HBase的目标就是处理数据量非常庞大的表,可以用普通的计算机处理超过10亿行数据,还可处理有数百万列元素的数据表。

Cassandra

Apache Cassandra是一款免费的开源NoSQL数据库,其设计目的在于管理由大量商用服务器构建起来的庞大集群上的海量数据集(数据量通常达到PB级别)。在众多显著特性当中,Cassandra最为卓越的长处是对写入及读取操作进行规模调整,而且其不强调主集群的设计思路能够以相对直观的方式简化各集群的创建与扩展流程。
Neo4j
主要应用:社会关系,公共交通网络,地图及网络拓谱

Redis介绍安装

Redis是一个开源的key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis介绍安装—应用场景

1、配合关系型数据库做高速缓存
高频次,热门访问的数据,降低数据库IO
分布式架构,做session共享
2、由于其拥有持久化能力,利用其多样的数据结构存储特定的数据。
最新N个数据 - 通过List实现按自然时间排序的数据
排行榜 ,Top N, - 利用zset(有序集合)
时效性的数据,比如手机验证码 - Expire 过期
计数器,秒杀 - 原子性,自增方法INCR、DECR
去除大量数据中的重复数据 - 利用Set集合
构建队列 - 利用list集合
发布订阅消息系统 - pub/sub模式

Redis介绍安装—安装

关于安装版本:3.2.5 for Linux
不用考虑在windows环境下对Redis的支持:
在这里插入图片描述

安装步骤:

1、下载获得redis-3.2.5.tar.gz后将它放入我们的Linux目录/opt
2、解压命令:tar -zxvf redis-3.2.5.tar.gz
3、解压完成后进入目录:cd redis-3.2.5
4、在redis-3.2.5目录下执行make命令
运行make命令时出现故障意出现的错误解析:gcc:命令未找到
能上网:
yum install gcc
yum install gcc-c++
不能上网:
执行 cd /run/media/root/CentOS 7 x86_64/Packages
(路径跟centos6不同) 进入安装包目录
详见《01在VM上安装CentOS7_201802V1.4》第40步

5、在ISO文件中的Packages目录中找到如下rpm文件
在这里插入图片描述
6、离线安装gcc

在opt目录下创建rpmgcc目录,用于保存所有的rpm文件

进入rpmgcc目录中执行:

rpm -Uvh *.rpm --nodeps(不检查依赖关系) --force(强制安装)
-ivh安装 -Uvh升级
安装完成后使用如下命令查看版本

gcc -v
g++ -v

7、在redis-3.2.5目录下再次执行make命令
Jemalloc/jemalloc.h:没有那个文件
解决方案:运行make distclean之后再 make

8、在redis-3.2.5目录下再次执行make命令
在这里插入图片描述

9、执行完make后,跳过Redis test 继续执行make install
在这里插入图片描述

Redis介绍安装—目录

查看默认安装目录:usr/local/bin
在这里插入图片描述
Redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何(服务启动起来后执行)
Redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
Redis-check-dump:修复有问题的dump.rdb文件
Redis-sentinel:Redis集群使用
redis-server:Redis服务器启动命令
redis-cli:客户端,操作入口

Redis介绍安装—启动

启动

redis根目录
在这里插入图片描述
1、备份redis.conf:拷贝一份redis.conf到其他目录
2、修改redis.conf文件将里面的daemonize no 改成 yes,让服务在后台启动
在这里插入图片描述
3、启动命令:执行 redis-server /myredis/redis.conf
4、用客户端访问: Redis-cli
多个端口可以 Redis-cli –p 6379
5、测试验证: ping

Redis介绍安装—关闭

在这里插入图片描述
单实例关闭:Redis-cli shutdown
在这里插入图片描述
也可以进入终端后再关闭
在这里插入图片描述
多实例关闭,指定端口关闭:Redis-cli -p 6379 shutdown
在这里插入图片描述

Redis介绍安装—相关知识

默认16个数据库,类似数组下标从0开始,初始默认使用0号库
使用命令 select 来切换数据库。如: select 8
统一密码管理,所有库都是同样密码,要么都OK要么一个也连接不上。

Redis是单线程+多路IO复用技术
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
串行 vs 多线程+锁(memcached) vs 单线程+多路IO复用(Redis)

多路复用 IO 模型

多路复用 IO 模型是目前使用得比较多的模型。 Java NIO 实际上就是多路复用 IO。在多路复用 IO模型中,会有一个线程不断去轮询多个
socket 的状态,只有当 socket 真正有读写事件时,才真正调用实际的 IO 读写操作。因为在多路复用 IO 模型中,只需要使用一个线程就可
以管理多个socket,系统不需要建立新的进程或者线程,也不必维护这些线程和进程,并且只有在真正有socket 读写事件进行时,才会使用
IO 资源,所以它大大减少了资源占用。在 Java NIO 中,是通过 selector.select()去查询每个通道是否有到达事件,如果没有事件,则一直
阻塞在那里,因此这种方式会导致用户线程的阻塞。多路复用 IO 模式,通过一个线程就可以管理多个 socket,只有当
socket 真正有读写事件发生才会占用资源来进行实际的读写操作。因此,多路复用 IO 比较适合连接数比较多的情况。
另外多路复用 IO 为何比非阻塞 IO 模型的效率高是因为在非阻塞 IO 中,不断地询问 socket 状态时通过用户线程去进行的,而在多路复用
IO 中,轮询每个 socket 状态是内核在进行的,这个效率要比用户线程要高的多。
不过要注意的是,多路复用 IO 模型是通过轮询的方式来检测是否有事件到达,并且对到达的事件
逐一进行响应。因此对于多路复用 IO 模型来说, 一旦事件响应体很大,那么就会导致后续的事件
迟迟得不到处理,并且会影响新的事件轮询。

Redis五大数据类型

Redis数据类型

string set list hash zset

查询当前库的所有键 keys *

在这里插入图片描述

判断某个键是否存在 exists

在这里插入图片描述

删除某个键 type

在这里插入图片描述

删除某个键 del

在这里插入图片描述

为键值设置过期时间,单位秒。expire

在这里插入图片描述

查看还有多少秒过期,-1表示永不过期, -2表示已过期 ttl

在这里插入图片描述

查看当前数据库的key的数量 dbsize

在这里插入图片描述

清空当前库 Flushdb

在这里插入图片描述

通杀全部库 Flushall

删除十六个数据库中的所有key


String

String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

查询对应键值 get <key>

添加键值对set <key> <value>

在这里插入图片描述

将给定的<value> 追加到原值的末尾 append <key> <value>

在这里插入图片描述

获得值的长度 strlen <key>

在这里插入图片描述

只有在 key 不存在时 设置 key 的值setnx <key> <value>

在这里插入图片描述

将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1 incr <key>

在这里插入图片描述

将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1decr <key>

在这里插入图片描述

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

在这里插入图片描述

原子性

在这里插入图片描述
所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。
(1) 在单线程中, 能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间。
(2)在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。
Redis单命令的原子性主要得益于Redis的单线程
java中的i++是否是原子操作? 否

同时设置一个或多个 key-value对 mset <key1> <value1> <key2> <value2> .....

在这里插入图片描述

同时获取一个或多个 value mget <key1> <key2> <key3> .....

在这里插入图片描述

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。msetnx <key1> <value1> <key2> <value2> .....

在这里插入图片描述

获得值的范围,类似java中的substringgetrange <key> <起始位置> <结束位置>

在这里插入图片描述

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

在这里插入图片描述

设置键值的同时,设置过期时间,单位秒。setex <key> <过期时间> <value>

在这里插入图片描述

以新换旧,设置了新值同时获得旧值。`getset

在这里插入图片描述

Redis五大数据类型–list

List
单键多值
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
在这里插入图片描述

从左边/右边插入一个或多个值。lpush/rpush <key> <value1> <value2> <value3> ....

lpush从最左边添加数据
在这里插入图片描述
rpush 从最右边添加数据
在这里插入图片描述

从左边/右边吐出一个值。值在键在,值光键亡。lpop/rpop <key>

从最左边取出一个数据
在这里插入图片描述
从最右边取出一个数据
`在这里插入图片描述

从<key1>列表右边吐出一个值,插到<key2>列表左边。 rpoplpush <key1> <key2>

把一个key1的最右边数据取出添加到key2的最左边数据
在这里插入图片描述

按照索引下标获得元素(从左到右)lrange <key> <start> <stop>

按照索引下标获得元素(从左到右)lindex <key> <index>

在这里插入图片描述

获得列表长度 llen <key>

在这里插入图片描述

在<value>的后面插入<newvalue> 插入值 linsert <key> before|after <value> <newvalue>

在这里插入图片描述

从左边删除n个value(从左到右)lrem <key> <n> <value>

<n>当n为正数的时候从左往右查找是否有匹配的n个,匹配的个数大于n个也只删除n个,否则匹配的个数小于n个,有几个删几个
在这里插入图片描述
<n>当n为负数的时候从右往左查找是否有匹配的n个,匹配的个数大于n个也只删除n个,否则匹配的个数小于n个,有几个删几个

当n为0时,删除所有匹配的
在这里插入图片描述

Redis五大数据类型–set

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。

将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。sadd <key> <value1> <value2> .....

在这里插入图片描述

取出该集合的所有值。smembers <key>

在这里插入图片描述

判断集合<key>是否为含有该<value>值,有返回1,没有返回0 sismember <key> <value>

在这里插入图片描述

返回该集合的元素个数。scard <key>

在这里插入图片描述

删除集合中的某个元素。srem <key> <value1> <value2> ....

在这里插入图片描述

随机从该集合中吐出一个值。`spop

`在这里插入图片描述

随机从该集合中取出n个值。不会从集合中删除srandmember <key> <n>

在这里插入图片描述

返回两个集合的交集元素。sinter <key1> <key2>

在这里插入图片描述

返回两个集合的并集元素。sunion <key1> <key2>

在这里插入图片描述

返回两个集合的差集元素。sdiff <key1> <key2>

在这里插入图片描述

Redis五大数据类型–hash

  • Redis hash 是一个键值对集合。
  • Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  • 类似Java里面的Map<String,String>

用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:

每次修改用户的某个属性需要,先反序列化改好后再序列化回去。开销较大。
在这里插入图片描述
用户ID数据冗余 userinfo:1001:username–>admin
userinfo:1001:age–>23
在这里插入图片描述
通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题 userinfo:1001–>
username:admin
age:23
sex:nan
在这里插入图片描述

给<key>集合中的 <field>键赋值<value> hset <key> <field> <value>

在这里插入图片描述

从<key1>集合<field> 取出 value hget <key1> <field>

在这里插入图片描述

批量设置hash的值 hmset <key1> <field1> <value1> <field2> <value2>...

在这里插入图片描述

查看哈希表 key 中,给定域 field 是否存在。hexists key <field>

在这里插入图片描述

列出该hash集合的所有field hkeys <key>

在这里插入图片描述

列出该hash集合的所有value hvals <key>

在这里插入图片描述

为哈希表 key 中的域 field 的值加上增量 increment hincrby <key> <field> <increment>

在这里插入图片描述

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值