Redis学习--1

此文章只是用来做笔记,期间拖了很久,多多见谅。


一.Redis简介

    我们一说到redis就会想到kv键值对,Cache(缓存)和Persistence(持久化),那么这个数据库为什么这么受到喜爱,首先要知道NoSql和关系型数据库的区别。

(一)关系型数据库遵循ACID规则

1.A(Atomicity)原子性

原子性比较好理解,用数据库事务来说就是,此次事务要么都不做,要么全部做完,比方说A向B转50块,这里分为两步,1)A账户里扣除50块;2)B账户里加50块,这两步要么一起完成,要么就不成功,若第一步完成了,第二步失败,则A少了50块,而B没收到,这显然很不合理。

2.C(Consistency)一致性

一致性就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

3.I(Isolation)独立性

独立性是指并发的事务之间不会相互影响,若一个事务要访问另一个事务正在所修改的数据时,只要另一个事务未提交,你所访问的数据就不会受其影响。比如还是上面的例子,在转账没成功之前,B怎么查看自己的账户,都不会有新增的50块。

4.D(Durability)持久性

持久性是指事务一旦提交后,它所做的修改将会永久的保存在数据库上,即使宕机也不会丢失。

(二)Nosql数据库CAP规则

1.一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

2. 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)

3.分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

同时这种数据库在分布式架构的时候必须做出取舍,在一致性和可用性之间取一个平衡,通常来说我们需要保证可用性取舍弃一致性,不是说不要一致性,只是相对来说没有其他两个那么重要,比方说我们在双11购物的时候只会关心我们自己的商品是否购买成功(这里主要是网站不瘫痪),而不会去关心货物的销售数值。

为解决数据库一致性引起的问题提出的解决方案是加入BASE,也就是基本可用(Basically Available),软状态(Soft state)和最终一致性(Eventually consistent),它的思想是通过让系统放松对某一时刻的数据一致性的要求来换取的系统整体伸缩性和性能上的改观。

同时我们还得知道分布式和集群的知识,简单来说,分布式是不同的多台服务器上面部署的不同的服务模块,他们之间通过RPC/RMI进行通信和调用,对外提供服务和组内协作;集群是不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一管理。

(三)Redis入门

Redis全称REmote DIctionary Server(远程字典服务器),是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。

Redis优点:1)Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用;2)Redis不仅支持key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;3)Redis支持数据的备份,即Master-Slave模式的数据备份.

(四)Redis安装

Redis中文官网

Redis英文官网

从以上两个网址都能获取到Redis安装包,推荐使用linux系统,下载之后解压,进入redis目录,然后make即可(这里make需要安装gcc,自行安装gcc,如centos yum install gcc,然后make distclean之后再重新make),再make install进行检查。

安装成功之后会出现这样的界面


安装之后能看见这几个文件

redis-benchmark:性能测试工具,测试电脑性能

redis-check-aof:修复有问题的aof文件

redis-check-dump:修复有问题的dump.rdb文件

redis-cli:客户端,操作入口

redis-sentinel:redis集群使用,哨兵模式由它开启

redis-server:redis服务器启动命令

redis.conf和sentinel.conf手动复制一份到此目录下,主要是方便操作。

然后redis-server redis.conf启动服务


服务启动界面

不喜欢看见这个界面就修改redis.conf文件

vim redis.conf

:/GENERAL找到daemonize no改成yes

然后重新启动

redis-server redis.conf 

ps -ef | grep redis    查看是否成功启动

redis-cli -p 6379


redis操作命令

redis默认没有密码,若要设置密码,则需要


一般操作前都得验证一次,避免麻烦一般不用设置

二、Redis持久化

说到Redis持久化就不得不说rdb和aop了。

(一)RDB

RDB就是在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。

运行时Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

其中fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。


rdb触发备份条件


是否进行快照压缩,以及存放路劲、文件名的配置

(二)AOF

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作,经我测试文件首先redis数据库先受aof影响,若报错则可以启动redis-check-aof修复。


appendonly默认关闭,需要一致性则开启

AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件。Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。

好处在于误差不会超过两秒,劣势是在于文件比rdb要大,AOF效率比RDB慢。

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

推荐阅读更多精彩内容

  • 从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明...
    不变甄心阅读 691评论 0 4
  • 前言 在上一篇文章中,介绍了Redis内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复...
    Java架构阅读 2,292评论 3 21
  • 超强、超详细Redis入门教程 转载2017年03月04日 16:20:02 16916 转载自: http://...
    邵云涛阅读 17,427评论 3 313
  • config.xml文件 cordova_plugins.js文件 js插件类文件 网页响应方法 cordova调...
    伏特加阅读 612评论 0 2
  • 廣東到江西。共670公里。
    司虎庫斯阅读 312评论 4 2