Redis

内容管理

  • NoSQL
    • 现代互联网应用特点
    • RDBMS弊端
      • 无法应对高并发 【磁盘IO瓶颈】
      • 数据存储有限,横向扩展弱
      • 硬件要求高
      • 不易提高性能【解决单一架构】
        • 单一架构解决方案
    • NoSQL的特点
      • 大数据量,高性能
      • 数据模型灵活,没有Relation
      • 高可用
      • 低成本
      • 无关系导致冗余
      • 无标准
      • 无约束、索引
      • 无事务
      • 数据类型少
    • Redis
      • 启动Redis 加上&
      • 关闭redis server
        • 使用客户端关闭 ./redis-cli shutdown
        • kill [-9] pid
      • Redis 客户端
        • redis 命令行客户端
        • redis 远程客户端
        • redis编程客户端
    • Redis的基本操作命令
      • ping 查看server状态
      • dbsize 查看当前数据库的key数目
      • select X 切换数据库
      • flushdb 删除当前库的所有数据
      • exit/quit 退出当前客户端
    • Redis的key操作指令
      • keys XX 查找符合XX模式的key,XX可以使用通配符
      • exists key1 key2 判断key是否存在
      • expire key seconds 设置key的生存时间
      • ttl key 返回key剩余的生存时间
      • type key 查看key所存储的数据类型
      • del key 删除key
    • redis的数据类型
      • string字符串类型
      • hash 哈希类型 映射表
      • list 列表类型
      • set 集合类型
      • 有序集合zet(sorted set)
    • Redis数据类型操作命令
      • String类型的操作命令
        • set (key value) 将字符串值设置给key
      • get key 获取key的value
      • incr/decr key 将key的数字值++/--, 不存在创建0
      • append key value 将value追加到key的stirng后面
      • strlen key 返回key存储的string的长度
      • getrange key start end [ ,] 取字串
      • setrange key offset value 用vlalue替换key的offset开始的字符串
      • mset k1 v1 k2 v2 .... 一次创建多个key
      • mget k1 k2 ... 一次获取多个key,和mset类似
    • Hash
      • hset hash表key field value 加入一个hash记录
      • hget key field 获取hash表中某个field值
      • hmset key field XX field2 XX 向hash的key中的map加入多个记录
      • hmget key field1 field2... 获取一张表中的field
      • hgetall 返回表中的所有的filed域以及value
      • hdel key field field .... 删除一张表中的filed
      • hkeys key 查看表中所有的field域
      • hvals key 查看表中所有的value
      • hexists key field 查看key表中是否存在field
    • list 列表
      • lpush/lpop key [value] 向key中插入多个值/删除 头插法
      • rpush/rpop key [value] 向key列表中尾插多个值/删除
      • lrange key start stop 获取指定位置的元素
      • lindex key index 返回指定位置元素
      • llen key 获取key列表的长度
      • lrem key count value 删除值为value的count个元素
      • lset key index value 替换,将index位置的元素进行替换为vlaue
      • linsert key [before/after] pivot value 在参考的pivot值前面/后插入vlaue
    • 无序集合set
      • sadd key member ..... 向集合中加入元素
      • smembers key 获取key集合中的所有的元素
      • sismemeber key member 查看member是否在集合中
      • scard key 获取集合的元素的个数
      • srem key member 移除集合中的一个或者多个元素
      • srandmember key count 随机返回集合中count个元素
      • spop key count 随机删除count个元素
    • 有序集合 zset (sorted set)
      • zadd key score member score2 member2 ... 插入有序集合
      • zrange key start stop [withscores] 查询有序集合指定区间元素
      • zrevrange key start stop [withscores] 查询有序集合指定区间元素
      • zrem key member.... 删除集合成员
      • zcard key 获取集合个数
      • zrangebyscore key min max withscores [limit offset count]
      • zrevrangebyscore max min 相反,分数从大到小
      • zcount key min max [min,max]间的数量

Redis数据库的简单介绍


昨天分享的是程序语言的基础知识,其中唯一需要记忆的就是高级程序语言编译的六大步骤,还有就是会将前缀、后缀、中缀码进行转换;这里我也要像流水线一样了,parallel进行,redis作为noSQL中最热门的数据库,当然也是必须要掌握的,MySQL后面也会深入分析一下【之前的数据库部分过于迅速的过了,数据库的设计远远不只是这么一点内容

【最近同时在进行很多事,Redis内容和Review的内容其实有交叉,但是博主决定将其放在两个不同的专栏中,Redis作为数据库,还是放在数据库的专栏中】

NoSQL

到现在为止,接触的技术栈已经很多了,比如

  • 解决功能性的问题【实现功能的基础】 : java 、Jsp、Tomcat、HTML、linux(这个后面会给大家分享一下,博主在开专栏之前就学过了)、JDBC
  • 解决扩展性问题: SSM、SpringBoot等框架,还有Vue等前端框架

依靠上面的技术,已经可以实现一个满足功能的web应用了,springboot+ vue开发一个web程序绰绰有余,但是问题来了 ---- 性能如何提升

之前的Dubbo+ zookeeper可以负载均衡,避免单一垂直架构带来的高访问量问题,那么还有其他的性能优化吗?

  • 解决性能的问题: NoSQL、java线程、hadoop、Nginx、MQ中间件

最开始的web应用就是单一架构,当后面互联网发展之后,访问量剧烈增加【高访问量】,给单台服务器带来了极大的压力(cpu和内存压力 ---- 之前说过cpu是核心,集数据运算和程序控制于一生),并且操作数据库也会带来巨大的IO压力

现代互联网应用特点

随着互联网的发展,现在的互联网应用的情况

1、 高访问量 【访问量大】

2、高并发 【同时做一件事情,比如秒杀】

3、高可用 【持续正常工作,就是之前类似计算机可靠性,当数据库宕,快速修复】

4、海量数据 【访问量大,产生了许多的数据】

RDBMS弊端

无法应对高并发 【磁盘IO瓶颈】

关系型数据库是IO密集的应用,也就是经常需要进行磁盘IO,会将数据及时存储到硬盘中持久化,但是Connect是重量级的,非常消耗时间,所以对于每秒上万次的读写请求,无法集中处理大量的高并发操作。

数据存储有限,横向扩展弱

关系型数据库的基本单位就是表,表中存储的记录数量有限,扩展能力弱,一张表最大二百多列,纵向的数据可承受能力有限,并且表的数据达到百万级别,读写速度下降,因为搜索需要时间, 对于海量的数据,必须使用主从复制,分库分表-----分表就需要考虑很多因素,难维护

硬件要求高

一般关系型数据库对于硬件设备要求较高,软件和硬件的成本花费大,并且大多数软件都是收费的。关系型数据库磁盘IO密集,如果磁盘的性能不好,那么数据库的使用体验就不好

不易提高性能【解决单一架构】

无法简单通过增加硬件、服务结点来提高系统的性能,数据整个都存储在一个数据库,对于多个服务器【分布式集群】,没有很好的解决办法复制数据

单一架构解决方案

既然单体架构存在的问题就是单台的服务器的CPU和内存的压力过大,那么就使用分布式架构负载均衡,使用nginx进行代理【vue和后端解决跨域问题,可以转发请求】,那么就可以使用服务器集群来操作

这样子操作单台服务器的压力就降低了许多

这里就产生了新的问题:

比如session共享问题: 最开始登录的时候nginx将请求转发到第一台服务器;这个时候该服务器就产生了session存放用户的相关信息,但是用户第二次登录可能分配到其他的服务器上,但是其他服务器一般没有该session,那么登录失败,如何解决?

  • 使用Cookie,这个很常用,就是发送一个sessionID,存储到客户端,每次访问都携带在请求头中,但是这种方式的问题 ----- 不安全
  • session复制 ---- 当用户访问的时候产生Session,同时将Session对象复制到其他的服务器中 ----- 【那就存在了大量的重复数据,空间浪费】
  • 存在文件服务器或者数据库中 ------ 这里每次访问都要访问数据库或文件(访问需要占用资源,会存在IO效率的问题)
  • 使用缓存式数据库【NoSQL】 ----- 之前分享存储系统的分级时,主存(内存)的速度比持久化存储要快的多,所以将session放在缓存中,最方便;redis将数据直接放在内存中,不会进行IO操作

解决IO压力: 减少IO操作

为了提高数据库的效率,可以将频繁使用的数据放在缓存数据库中,这样就不需要水平垂直切分来破环业务逻辑性

NoSQL的特点

RDBMS一业务逻辑为基础进行存储,磁盘IO密集,相比之下,因为互联网的发展,所以NoSQL也就出现解决高并发和高性能,高访问量等问题

大数据量,高性能

NoSQL数据库都具有很高的读写性能,大数据量下也表现出极大的优势,主要就是因为Nosql的无关系性,数据库的结构见到那。传统的RDBMS中,使用的查询缓存,但是更新数据后就失效了,需要重新进行IO,频繁读写的应用那么就会出现问题,而NoSQL最强大的就是缓存功能

数据模型灵活,没有Relation

Nosql是非关系型数据库,所谓关系就是数据之间的联系等【后面会在review中重点】,NoSQL不需要为数据建立字段,随时可以存储自定义的数据格式,对于关系型数据库,大数据量的表增删改字段就是emo ---- 所以这对于表设计提出了很大的挑战。但是市场变化,用户需求不断变化呢

高可用

Nosql在不影响性能,久可以实现高可用的架构。能偶解决RDBMS的扩展性差的问题,节省开发成本

低成本

因为磁盘IO少,所以对于硬件的要求较低,并且大多数Nosql软件都是开源的

无关系导致冗余

因为数据之间是没有关系的,RBMS中的外键能够很好联系两张表,减少数据的冗余,但是NoSQL没有关系,那么存储就会冗余

无标准

RDBMS是遵守统一的SQL规范,但是NoSQL后来发展的,没有统一的NoSQL标准

无约束、索引

NoSQL不支持约束,所以数据可以存任何类型的,没有限制,同样,也没有索引的概念【RDBMS使用索引来增加搜索效率】

无事务

RDMS大多都是支持事务的,事务的出现就是为了解决一致性,保证业务的正常执行;但是Nosql不支持事务,不能实现ACID 【atomic consistency …】

数据类型少

RDBMS比如MySQL是有很多数据类型的,比如数值、日期、二进制、大对象(文本),但是NoSQL只有一种类型,就是文本类型

NoSQL就是将除了存储之外的功能都放弃了,以此来提升性能; 比如不支持事务,这样就不需要加

【Redis】Nosql引入、Redis的数据类型和常用指令相关推荐

  1. Java Web学习day26------Redis基础、Redis数据类型、常用指令、jedis、持久化

    Redis基础.Redis数据类型.常用指令.jedis.持久化 1. Redis 简介 1.1 NoSQL概念 1.2 Redis概念 1.3 Redis 的下载与安装 1.4 Redis服务器启动 ...

  2. 跟着狂神学Redis(NoSql+环境配置+五大数据类型+三种特殊类型+Hyperloglog+Bitmap+事务+Jedis+SpringBoot整合+Redis持久化+...)

    跟着狂神学Redis 狂神聊Redis 学习方式:不是为了面试和工作学习!仅仅是为了兴趣!兴趣才是最好的老师! 基本的理论先学习,然后将知识融汇贯通! 狂神的Redis课程安排: nosql 讲解 阿 ...

  3. redis安装、持久化、数据类型、常用操作、操作键值、安全设置、慢查询日志、存储session、主从配置、集群介绍、集群搭建配置、集群操作,php安装redis扩展...

    21.9 redis介绍 21.10 redis安装 21.11 redis持久化 21.12 redis数据类型 21.13/21.14/21.15 redis常用操作 21.16 redis操作键 ...

  4. Redis数据库及五种数据类型的常用命令详解

    一.理论部分 1.什么是redis Redis(Remote Dictionary Server ),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value结 ...

  5. redis——NOSQL及redis概述

    NoSql入门概述 单机Mysql的美好时代 瓶颈: 数据库总大小一台机器硬盘内存放不下 数据的索引(B + tree)一个机器的运行内存放不下 访问量(读写混合)一个实例不能承受 Memcached ...

  6. Redis:Nosql数据库

    Redis Nosql技术 redis介绍 什么是NoSql NoSql是为了解决高并发.高可扩展.高可用以及高写入而产生的数据库解决方案. NoSql就是Not Only sql.Nosql是非关系 ...

  7. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

  8. NoSQL概述-Redis安装-常用五大数据类型-概述Bitmaps,HyperLogLog,Geospatial和redis.conf 基本解析

    NoSQL 概述 NoSQL(NoSQL=Not Only SQL),意即"不仅仅是SQL",泛指 非关系型的数据库. NoSQL不依赖业务逻辑方式存储,而以简单的key-valu ...

  9. NOSQL,Redis的常用数据类型

    文章目录 Redis的数据类型 String 数据结构和常用命令 hash 数据结构和常用命令 List 数据结构和常用命令 Set 数据结构和常用命令 Zset 数据结构和常用命令 Redis Hy ...

最新文章

  1. 【MATLAB】数据分析之多项式及其函数
  2. c#泛型的使用[转]
  3. 聊聊引用和 ThreadLocal 那些事儿
  4. Linux服务器上配置Tomcat的docBase路径映射时遇到的坑
  5. 兼顾FPGA和单片机
  6. 【科普】国内外高质量数据科学竞赛平台有哪些?
  7. Java黑皮书课后题第10章:***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序。设计一个名为Tax类,该类包含下面的实例数据域
  8. 360全景html插件,jQuery 360度全景图插件 PANORAMA VIEWER
  9. 使用SAP iRPA创建一个最简单的hello world项目并部署到SAP云平台上
  10. ArcGIS升级地理数据库
  11. 训练日志 2018.10.11
  12. 特斯拉最强自动驾驶系统登场,实测视频火热出炉
  13. Python读取csv数据文件,并按照指定比例划分为机器学习使用的训练集和测试集
  14. ganglia不能获取gpu_免费试用亚马逊云服务器进行深度学习实验:免环境配置/GPU支持...
  15. 迅雷计算机管理员删除文件,Win10安装迅雷精简版,管理员已阻止你运行此应用...
  16. android图片颜色识别器,颜色识别器APP
  17. 电场强度 高斯定理 习题
  18. 使用VS2019配置EDK2安装教程
  19. CSS基础(复合选择器-三大特性)
  20. Python Excel插入图片

热门文章

  1. 软件开发人员怎么升职加薪?技术高管建议你这么做
  2. MATLAB:im2bw()原理
  3. Python入门教程(一)
  4. 2021年中国环境监测专用仪器仪表制造行业发展现状分析:主营收入、总资产进一步增长[图]
  5. XMind中如何添加自定义图标
  6. 压力变送器差压变送器的正确安装方法
  7. 我的世界服务器防止右键无限钓鱼,我的世界右键钓杆定向发射火球技巧攻略
  8. 新品上市调查方案(2)-测试结果
  9. 自定义Js温馨提示窗
  10. 虚拟主机 windows linux,虚拟主机用Linux的好还是windows的好?