美文网首页
Redis学习笔记01——初始Redis

Redis学习笔记01——初始Redis

作者: 江城子Leon | 来源:发表于2018-08-29 23:12 被阅读0次
    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

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" contenteditable="true" cid="n56" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">来自意大利的西西里岛,现居卡塔尼亚。供职于 Pivotal公司(Pirvotal是Spring框架的开发团队)。</pre>

    官网: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。

    下载

    启动

    • 启动 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/

    githubhttps://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

    笔记小结

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

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

    相关文章

      网友评论

          本文标题:Redis学习笔记01——初始Redis

          本文链接:https://www.haomeiwen.com/subject/maelwftx.html