Redis学习笔记01——初始Redis

Redis学习笔记01——初始Redis_第1张图片
redis.jpg

之前一直有听说 Redis,但是一直没有使用和学习过,而项目上关于缓存数据库的知识用到的只有一点 Memcached 的客户端使用,没有深入学习缓存数据库的原理。

因此,作为一个小白,有必要写一篇比较基础的入门笔记,方便自己“温故而知新”。

所以呢……就有此文啦,也欢迎各位朋友多多指点!

NoSQL

What

什么是NoSQL?

其实对NoSQL,即便是我这样没有接触过的小白也是耳濡目染了。NoSQL的全称是Not Only SQL,指的是一类非关系型的数据库。

与关系型数据库相对,结构简单,数据之间不存在关联关系是其特点。

它拥有简单的结构,不需要维护数据之间复杂的关联关系,单从这两点看,就可以看出它的性能上是有很大提升的。

Why

为什么需要使用Nosql?

正所谓“存在即合理”。虽然大家都在用,但也不能盲从,必须要了解其原因。

我想,既然已经存在Oracle、MySQL等关系型数据库了,为什么不能使用已有的数据库来做呢?想来是有什么场景是它们做不到的,所以才会出现NoSQL。

下面来看一下关系型数据库的瓶颈:

  • 无法应对每秒上万次的读写请求,无法处理大量集中的高并发操作。关系型数据是IO密集的应用,系统性能的瓶颈往往会出现在硬盘IO上。

  • 表中存储记录有限,横向可扩展能力有限,一张表最多200多列。纵向数据可承受能力也是有限的,一张表数据达到百万级,读写速度就会下降。在大数据的场景下,必须使用主从复制、分库分表等方法来解决问题。但与此同时,这些解决方法也会给维护增加难度。

  • 无法简单地通过增加硬件、服务节点来提高系统性能。数据整体存储在一个数据库内,多个服务器之间没有很好的办法来完成数据的复制。

  • 关系型数据库大多是收费的(我想这里主要指的是Oracle),对硬件要求高。软硬件成本较高。

NoSQL的优劣势

优势:

  1. 大数据量,高性能(数据的无关性大大提高了缓存性能)

  2. 灵活的数据模型(数据结构的可变性能够很好的适应快速迭代的需求)

  3. 高可用(在不太影响性能的情况下,就可以方便的实现高可用架构)

  4. 低成本(这是大多数分布式数据库的特点,开源软件的优势)

劣势:

  1. 数据无关性(没有关联关系会造成一定程度上的数据冗余,也就是常说的“空间换时间”)

  2. 不支持标准SQL,没有公认的NoSQL标准

  3. 没有关系型数据库的约束,大多数也没有索引的概念

  4. 没有事务,不能依靠事务实现 ACID

    ACID是数据库事务正确执行的四个基本要素的缩写,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有ACID特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

  5. 没有丰富的数据类型(数值、日期、字符、二进制、大文本等)

Redis简介

Redis 是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库。

Remote Dictionary Server(Redis) 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的 Key-Value 数据库。Key 字符类型,Value 可以是字符串(String),哈希(Map),列表(list),集合(sets) 和 有序集合(sorted sets)等类型,每种数据类型有自己的专属命令。所以它通常被成为数据结构服务器。

Redis之父:Salvatore Sanfilippo

来自意大利的西西里岛,现居卡塔尼亚。供职于 Pivotal公司(Pirvotal是Spring框架的开发团队)。

官网:https://redis.io/

中文:http://www.redis.cn/

客户端:支持多种语言,Java客户端包括aredis、JDBC-Redis、Jedipus、Jedis、JRedis等,其中Jedis中的方法名和redis的命令是一致的,使用更加方便。

Redis安装和使用

Windows上安装Redis

Windows版本的Redis是Microsoft的开原部门提供的Redis。这个版本的Redis适合开发人员学习使用,生产环境下使用Linux系统的Redis。

下载

  • 官网:https://redis.io/

    • windows版本

启动

  • 启动 redis-server.exe

    • 若启动窗口一闪而过,使用CMD命令窗口,在当前目录下执行

      • redis-server.exe redis.conf

      在Linux环境下,redis配置文件名默认为 redis.conf

  • 启动 redis-client.exe

    • 客户端启动,默认链接本机的 redis ,默认端口号 6379
  • 测试

    • 输入 set k1 v1 ,回车后显示 OK

    • 输入 get k1 ,回车后显示 "v1"

Linux上安装Redis

下载与解压

下载

wget http://download.redis.io/releases/redis-3.2.9.tar.gz

使用tar命令解压

tar -zxvf redis-3.2.9.tar.gz -C /usr/local

tar命令:

  • 压缩命令: tar -zcvf 压缩文件名 .tar.gz 被压缩文件名
  • 解压缩命令: tar -zxvf 压缩文件名 .tar.gz

在redis目录下有两个重要的配置文件:

redis.confreids配置文件

sentinel.conf :哨兵配置文件

编译Redis文件

Redis 是使用 C 语言编写的,所以还需要使用 gcc 编译器对 .c 源文件进行编译。

gccGNU compiler collection 的缩写,是Linux下一个编译器集合(相当于javac),是 c 或 c++ 程序的编译器。

redis 目录下执行make命令

make命令可能会出现的报错:

  • gcc 命令找不到,是由于没有安装 gcc 导致
*   安装 `gcc` 编译器解决
    
    
    *   `yum -y install gcc`
  • error:jemalloc/jemalloc.h:No such file or directory
*   解决方式: `make MALLOC=libc`

编译完成后,src 下会生成一些文件

redis-serverredis 服务端程序

redis-cliredis 客户端程序

启动

  • 前台启动 ./redis-server

  • 后台启动 ./redis-server & (在末尾加一个地址符“&”,感觉类似nuhup命令)

关闭

  • 使用 redis 客户端关闭

    • 切换到 src 目录,执行 ./redis-cli shutdown 命令

      • 推荐, redis 会先执行完数据操作,再关闭。
  • 使用 kill 命令杀掉进程

    • 简单粗暴,但有可能丢失数据。

Redis客户端

命令行客户端

命令行客户端 redis-cliRedis Commend Line Interface)是 Redis 自带的基于命令行的客户端,用于服务端交互。

连接方式

  • 直接连接本地

    • redissrc 目录下,执行 ./redis-cli
  • 指定 IP 和端口连接

    • ./redis-cli -h IP地址 -p 端口号

      • 例如: ./redis-cli -h 127.0.0.1 -p 6379

远程客户端

Redis Desktop Manager : C++ 编写,响应迅速,性能好。

官网地址:https://redisdesktop.com/

github :https://github.com/uglide/RedisDesktopManager

使用文档:http://docs.redisdesktop.com/latest/

远程访问 redis 需要注意两点

  • 关闭防火墙
*   `systemctl status firewalld`
  • redis 自身的安全机制默认是不允许外界访问的
*   修改 `redis.conf` 配置文件
    
    
    *   `bind ip` 绑定 `ip` ,将此行注释掉
        
        
    *   `protected-mode yes` 保护模式改为 `no`
        
        
*   修改完成后,启动 `redis` 时,指定配置文件路径
    
    
    *   例如: `./redis-server ../redis.conf`

编程客户端

编程客户端有很多种,这里只介绍最受欢迎的一种客户端 Jedis

Jedis

redis 的 Java 编程客户端,Redis 官方首选推荐使用 Jedisjedis 是一个很小但很健全的 redis 的 Java 客户端。因为 jedis 中的方法名和 Redis 的命令是保持一致的,所以完全不用担心会有额外的学习成本,简直太爽了!因此,通过 Jedis 可以像使用 Redis 命令行一样使用 Redis

  • jedis 完全兼容 redis 2.8.x and 3.x.x
  • Jedis 源码:https://github.com/xetorthio/jedis
  • api 文档:http://xetorthio.github.io/jedis/

笔记小结

通过这篇文章,应该可以对 Redis 的概念、优劣势、诞生的原因有一定的了解了。此外,还get到了 Redis在Windows和Linux环境下的安装与使用,掌握了 Redis 三种客户端的使用方式。

下一节,我会对 Redis 的命令使用做一下整理。希望我们都能保持空杯心态,继续加油!

学习渠道

因为朋友的推荐,在蛙课网进行了能力提升学习,课程讲解很通透细致,零基础也是没有问题的。要非常感谢朋友的帮助,也要感谢蛙课网提供的精心录制的视频!在这里也算是以私人的方式做一下宣传,也算是尽自己的绵薄之力做的一点小小的回馈吧。

你可能感兴趣的:(Redis学习笔记01——初始Redis)