❖ 一篇文章入门Redis基础

Redis是目前最流行的NoSQL数据库,最重要的是它是运行在内存上的数据库。所以几乎所有高并发需求的产品都会考虑使用Redis作为数据库缓存。

不同于MongoDB的以硬盘存储为主、内存为辅,Redis是真·内存存储,即所有数据都存在内存中,只是偶尔间歇性的保存到硬盘上备份。

Redis特点:

  • NoSQL:采用类似JSON的Key-Value键值对存储。
  • 存储在内存中:几乎是计算机存储的最高读写速度(除CPU寄存器外)。
  • 可持久化:定期可以把内存中的数据备份到硬盘。
  • 轻量化:整个软件才1M,内存占用极少。
  • 单机多实例:同机器可以给多个应用配置多个Redis数据库,因为资源占用极少。

理解Redis

原子性

Redis处理高并发最强的就是其原子性。完全基于单线程,抛弃多进程、多线程等逻辑。

什么是“原子性”?参考:深入学习RedisAPI的原子性分析

原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。

Redis vs. JSON

作为NoSQL初学者,我觉得所有的NoSQL不过是一个更复杂的JSON文件而已。

但是只是一个文本文件的JSON面临IO堵塞、文本解析等很大屏障,速度决定了它的天花板。即使是放在Ram Disk内存盘上的JSON,也解决不了高并发的问题
而Redis不光用了内存,还用了原子性逻辑来加速运行,同时还加入了一系列的备份、恢复、分布式多机器运行的功能。

所以真的没法再说和JSON一样了。

Redis vs. MongoDB

MongoDB是基于Documentation的,

....

Redis vs. Memcached

....

安装

参考:How To Install and Secure Redis on Ubuntu 18.04

整个软件大约1M左右。

Mac的Homebrew安装:

brew install redis

Ubuntu安装:

sudo apt install redis-server

Docker安装:
因为Redis实在是太轻量了,而且原生支持多实例运行,配置也是单文件配置,所以不太需要专门用docker来做隔离。如果真有docker需要的话,也不会难。参考hub.docker.com。

编译安装:
如果需要自己编译的话,就到Redis的下载最新的release,一般用tar.gz格式。
目前最新的稳定版5.0。中文官网地址:http://www.redis.cn/

wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -xvzf redis-*.tar.gz
cd redis-*

make
make test
sudo make install

配置

Redis配置很好理解,只需一个redis.conf配置文件。

找到文件后,一般需要修改的地方只有以下几点:

# 绑定主机IP和端口,端口是redis默认
bind 127.0.0.1
port 6379

# (推荐)以守护进程方式运行,这样就不会进入命令行”前台堵塞模式“
daemonize yes

# 数据文件
dbfilename dump.db

# 数据存储的位置,运行前需手动创建文件夹,否则报错
dir /var/lib/redis/

# 日志文件
log /var/log/redis/redis-server.log

# 数据库数量,默认16个数据库
database 16

运行交互

启动redis服务器:

redis-server

# 或指定配置文件启动
redis-server /etc/redis/redis.conf

如果没有在配置中设置daemonize,那么这里就会在前端启动,即堵塞整个shell来运行这个程序。如果已经是守护进程了,那么就会在后台运行,可以用ps aux |grep redis看到。
如果要开机启动,直接在/etc/rc.local中加入启动redis的命令即可,不过这样的还不如设置系统service好管理。关闭服务器的方法就是直接kill掉进程即可:pkill redis-server

客户端:

# 客户端shell,与服务器进行命令交互
redis-cli 

# 关闭客户端
redis-cli shutdown

Redis的主从 "RAID 1"

以上是最简单的单机设置。然而,Redis的主从设置也不难,很简单。

记住:Redis的Master-Slave的结构,实际上只是一种备份关系!而不是数据分散在各地的那种。

Redis的Master-slave架构的作用:

  • 备份:slave从的最主要作用是备份,以弥补单机内存数据不稳固的缺点。
  • 读、写分离:写入是很耗时间的,而读很快。那么如果读和写分离,会加速很多。
image
image

设置方法:

  • 主从两台机器上,都安装了redis-server
  • 两台机子上都有一个配置文件redis.conf
  • 两台机子上的redis.conf中,互相指明自己是主还是从,主的IP是什么,以及权限等相关设置。
  • 两台机子同时启动redis-server

这个设置方法是最简单的主从设置,甚至有点像ssh-tunnelfrp内网穿越等设置。都是基于一个配置文件就能完成自动连接的。

主从可以在同一台机器(但是没有什么意义),只是注意端口号不要冲突。如果不是同一台机器,那么端口号就无所谓了。

Redis集群 "RAID 0"

如果说主从架构是硬盘组合的RAID 1模式,那么Redis集群就是RAID 0——数据是分布在各个机器上的。

如果只是简单的主从架构,那么主要的压力还是都集中在Master主机上,万百万级别的高并发肯定是扛不住的。所以要用到Redis集群。

Redis集群才是真正的分布式

集群分为软件层面的和硬件层面的。
Redis在同一台机器可以启动多个服务,也就是在本机可以使用多个Redis数据库服务,这叫软件层面集群(没什么用)。因为一台机器死机,整个集群就没了。所以软件方面的只适合同一台机器给不同应用配置redis数据库,不适合集群。
硬件集群是每台机器上都有redis,用于分担数据。

集群有这几大特点:

  • Slots:代表Redis对数据自动切分(Split)的能力
  • Partition:代表数据的高可用性(Availability)

集群的槽 Slots

Redis怎么把全部数据分配个集群的每台机器?
它会先把数据分为16,384个slots槽,然后把这些槽平均分配个每台机器。比如机器A分了0-1000的槽用来存数据,机器B分了1001-2000的槽。。。每台机器都会知道自己会负责哪些槽。

如果一台机器接收到不是自己负责的slot的数据,就会把请求“转发”给该负责的机器。这个就叫转向 (Redirection)。

怎么确定新来的数据在哪台机器上写入呢?

Redis利用了Hash Table数据结构的基本原理,即通过一个Hash function把key映射为一个固定的整数number。通过number % 16384而得到一个固定的index整数值,根据这个index就能直到它所属的slot在哪个“负责人”位置了。

集群的分区 Partition

如果有partition分区,那么及时有些机器突然不可用、断线,集群也可以继续完成请求任务。

Redis于Python交互

Python需要安装redis包:pip install redis

基础交互代码test.py

import redis


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

推荐阅读更多精彩内容