Redis学习笔记01——初始Redis

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 的命令使用做一下整理。希望我们都能保持空杯心态,继续加油!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 转载请注明出处:牵手生活--简书:笔记是整理思路方式,分享是一个美德,牵手是我的生活方式 NoSQL(Not On...
    牵手生活阅读 582评论 1 2
  • 本文是对Redis基础知识的一个学习总结,共包括如下章节内容: Redis是什么 安装和部署 数据库操作 Java...
    我是老薛阅读 484评论 0 4
  • NoSQL NoSQL = Not only SQL 为什么需要NoSQL High performance - ...
    wch853阅读 274评论 0 1
  • Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行10...
    h2coder阅读 231评论 0 1
  • 1.什么是 Redis? Redis 是完全开源免费的,遵守BSD协议,是性能极高的nosql数据库,Key-Va...
    python与数据分析阅读 2,344评论 0 80