(十七)大数据学习之内存数据库

内存数据库

一.内存数据库

1.为什么要把数据存入内存?

2.常见的内存数据库:
(1)MemCached:看成Redis前身,严格来说,MemCached不能叫数据库,只能叫缓存

  • 不支持持久化。如果内存停电,数据丢失

(2)Redis:内存数据库,支持持久化,支持HA

(3)Oracle TimesTen
session一致性
MemCached + keepalive实现

二.Memcached

1.基本原理和体系架构
(1)在内存中,维护了一张巨大的Hash表
(2)通过路由算法来决定数据存储的位置。---> 客户端路由

2.安装配置MemCached
前提:
(1)gcc编译器

cd /opt/module

yum install gcc   //安装

gcc --version    //查看版本
image.png

(2)libevent库
a.下载
b.上传到linux:/opt/software
c.解压

cd /opt/software

tar -zxvf libevent-2.0.21-stable.tar.gz -C /opt/module

d.

cd /opt/module/libevent-2.0.21-stable

./configure --prefix=/opt/module/libevent    //输入命令

image.png
make         //输入命令
image.png
make install   //输入命令
image.png

(3)安装memchched
a.下载
b.上传到linux:/opt/software
c.解压

cd /opt/software

tar -zxvf memcached-1.4.25.tar.gz -C /opt/module

d.

 
cd /opt/module/memcached-1.4.25

./configure --prefix=/opt/module/memcached --with-libevent=/opt/module/libevent     //输入命令

e.

make      //输入命令

f.

make install     //输入命令

安装完毕
(4)启动?

cd /opt/module/memcached/bin

./memcached -u root -d -m 128 -p 11211
./memcached -u root -d -m 128 -p 11212
./memcached -u root -d -m 128 -p 11213
ps -ef | grep memcached
image.png

3.操作MemCached
(1)命令行

telnet 192.168.109.133 11211    
//保存数据:
set 如果key存在,替换原来的值
add 如果key存在,返回错误
            
set key1       0         0                       4
//key名字   标识位  数据过期时间0表示不过期        value的长度
abcd
            
get key1
//统计命令
stats items
stats

4.MemCached路由算法

二.Redis

1.redis简介
(1)Redis的前身:Memcached
(2)和Memcached区别

  • 支持持久化:RDB快照、AOF日志
  • 支持丰富的数据类型
    2.安装Redis
    (1)下载
    (2)上传到linux
    (3)解压
cd /opt/software

tar -zxvf redis-3.0.5.tar.gz -C /opt/module

(4)编译:

cd /opt/module/redis-3.0.5

make        //编译
image.png

(5)安装

cd /opt/module/redis-3.0.5

make PREFIX=/opt/module/redis install      //安装
image.png

(6)文件介绍

  • redis-benchmark Redis提供的压力测试工具。模拟产生客户端的压力
  • redis-check-aof 检查aof日志文件
  • redis-check-dump 检查rdb文件
  • redis-cli Redis客户端脚本
  • redis-sentinel 哨兵
  • redis-server Redis服务器脚本

(7)修改核心配置文件:redis.conf
a.新建conf目录

cd /opt/module/redis

mkdir conf

b.移动redis.conf

cd /opt/module/redis-3.0.5

cp redis.conf /opt/module/redis/conf
image.png

c.修改redis.conf

daemonize yes        //是否后台启动
port 6379

logfile "/opt/module/redis/logs/redis.log" 
image.png

d.启动redis

cd /opt/module/redis

bin/redis-server conf/redis.conf
image.png

3.操作Redis
(1)命令行

redis-cli   
./bin/redis-cli
            
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> keys *
1) "key1"
//对数据的操作:
127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> incr money
(integer) 101
127.0.0.1:6379> get money
"101"
127.0.0.1:6379> incrby money 1000
(integer) 1101

(2)Java Api

4.Redis的事务:不是真正的事务,是一种模拟
(1)复习:事务(关系型数据库)
a.什么是事务?

  • 事务有一组DML语句组成。DML 插入更新删除操作
    b.事务的特点
  • 要么都成功,要么都失败

c.Oracle中事务的本质:将事务的DML操作写入日志。日志写入成功,则事务执行成功。

(2)Redis事务的本质:将一组操作放入队列中,一次执行(批处理)。

(3)对比Oracle和Redis事务的区别

                                Oracle                                      Redis
            开启事务:           自动开启                                    命令:multi
            执行语句:           DML                                         Redis命令
            提交事务:   显式提交:commit 隐式提交:DDL语句(create table)    命令:exec 执行放在multi里面的操作
            回滚事务:   显式回滚:rollback  隐式回滚:系统掉电,客户端退出  命令:discard命令  把队列中的操作废弃掉
            注意:不是真正的事务,只是一种模拟。

(4)举例:模拟银行转账

set tom 1000
set mike 1000
tom --> mike 转账操作必须在事务中,要么都成功,要么都不成功
multi
decrby tom 100
incrby mike 100
exec
            
127.0.0.1:6379> set tom 1000
OK
127.0.0.1:6379> set mike 1000
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby tom 100
QUEUED
127.0.0.1:6379> incrby mike 100
QUEUED
127.0.0.1:6379> exec
1) (integer) 900
2) (integer) 1100

(5)举例:买票

set tom 1000
set ticket 1
multi
decrby tom 500
decr ticket
exec
//在exec前,从另一个窗口,decr ticket
127.0.0.1:6379> set tom 1000
OK
127.0.0.1:6379> set ticket 1
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby tom 500
QUEUED
127.0.0.1:6379> decr ticket
QUEUED
127.0.0.1:6379> exec
1) (integer) 500
2) (integer) -1

5.Redis锁机制:执行事务操作的时候,如果监视的值发生了变化,则提交失败。
(1)命令:watch

//举例:买票
set tom 1000
set ticket 1
watch ticket -----> 相当于给ticket加了锁。认为在下面执行事务的时候,值不会变。
multi
decrby tom 500
decr ticket
exec
        
127.0.0.1:6379> set tom 1000
OK
127.0.0.1:6379> set ticket 1
OK
127.0.0.1:6379> watch ticket
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby tom 500
QUEUED
127.0.0.1:6379> decr ticket
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get tom
"1000"
  • nil 代表操作没有执行或者执行失败。

6.Redis的消息机制:消息系统
(1)消息的类型

  • Queue消息:队列,点对点。
  • Topic消息:主题,群发:发布消息,订阅消息

(2)Redis消息机制:

  • 只支持Topic消息。

(3)命令:

  • 发布消息 publish
  • 订阅:subscribe
  • psubscribe 订阅消息 可以用通配符来订阅消息

(4)常用的消息系统:

  • Redis 只支持 Topic
  • Kacka 只支持Topic 需要Zookeeper支持。
  • JMS Java Messging Service java消息服务标准。支持Queue Topic
  • 产品:Weblogic

7.Redis持久化

  • 本质:备份和恢复
    (1)RDB快照:默认
  • 看成一种快照,备份。每隔段时间,将内存汇总的数据保存到硬盘上。产生RDB文件。
  • RDB 生成策略:
save 900 1       900秒内,有1个key发生变化
save 300 10      300内,如果有10个key发生变化,执行RDB
save 60 10000    60秒内,如果有10000个key发生变化,执行RDB                
save 时间 发生变化的key的个数
  • 其他参数
stop-writes-on-bgsave-error yes  当后台写进程出错时,禁止写入新的数据
                
rdbcompression yes      是否压缩。如果看重性能,设置成no
//压缩会节省空间,但会影响备份和恢复性能
                    
dbfilename dump.rdb
dir ./
  • RDB的优点和缺点
    优点:快 恢复速度快
    缺点:在两次RDB之间,可能会造成数据的丢失。
    解决:AOF

(2)AOF日志
客户端在操作Redis时,把操作记录到文件中,如果发生崩溃,读取日志,把操作完全执行一遍。

  • 默认是禁用。
appendonly no  参数修改成yes
  • AOF记录策略
# appendfsync always        //每个操作都记录日志:优点安全 缺点:慢
appendfsync everysec
# appendfsync no            //由操作系统来决定记录日志的方式。不会用的到。
  • AOF日志重写:overwrite
//举例:
set money 0
incr money
..100次              
set money 100               
./redis-benchmark -n 100000   
模拟客户端100000次请求
  • 参数设置
no-appendfsync-on-rewrite no   执行重写的时候,不写入新的日志
auto-aof-rewrite-min-size 64mb  执行重写的文件大小。到64M触发重写。

(3)当两个同时存在时,优先执行哪个?

 # If the AOF is enabled on startup Redis will load the AOF, that is the file
 # with the better durability guarantees.
            
AOF开启时,优先使用AOF

8.Redis的主从复制

(1)Redis主从复制集群:
作用:

  • 主从复制,主从备份,防止主节点down机
  • 任务分离:分摊主节点压力。读写分离。

(2)Memcacached 主主复制
(3)Redis 主从复制

(4)Redis集群两种部署方式

  • 星型模型:
    优点:效率高,两个slave地位一样,可以直接从主节点取出信息
    缺点:HA比较麻烦
  • 线性模型:
    优点:HA简单
    缺点:效率不如星型模型
cp redis.conf redis6379.conf 
cp redis.conf redis6380.conf 
cp redis.conf redis6381.conf 
            
主节点:关闭rdb aof
appendonly no
#save 900 1
#save 300 10
#save 60 10000
            
从节点
改端口号 
50 port 6380
改aof rdb文件名:
dbfilename dump6380.rdb
appendfilename "appendonly6380.aof"
slaveof 192.168.109.133 6379
            
[root@node3 redis]# ./bin/redis-server ./conf/redis6379.conf 
[root@node3 redis]# ./bin/redis-server ./conf/redis6380.conf 
[root@node3 redis]# ./bin/redis-server ./conf/redis6381.conf 
            
[root@node3 redis]# ps -ef | grep redis
root      4830     1  1 22:56 ?        00:00:00 ./bin/redis-server *:6379               
root      4834     1  2 22:56 ?        00:00:00 ./bin/redis-server *:6380               
root      4840     1  2 22:56 ?        00:00:00 ./bin/redis-server *:6381               
root      4846  1378  0 22:56 pts/1    00:00:00 grep redis
[root@node3 redis]# ./bin/redis-cli -p 6379
127.0.0.1:6379> set tom 10000
OK
127.0.0.1:6379> quit
[root@node3 redis]# ./bin/redis-cli -p 6380
127.0.0.1:6380> get tom
"10000"         
//默认情况下,从节点只读。
            
注意:一次性启动从节点不要太多。

9.Redis的分片
多个从节点分摊读的压力
客户端代理分片工具:Twemproxy

//解压
./config --prefix=.....
cp /usr/local/nutcracker-0.3.0/conf/nutcracker.yml ./conf/
            
//修改server信息
            
//检查配置文件是否正确
./sbin/nutcracker -t conf/nutcracker.yml
            
启动代理分片
./sbin/nutcracker -d -c conf/nutcracker.yml
            
./bin/redis-cli -p 22121 访问

10.Redis的HA(哨兵机制)
(1)主从结构,存在单点故障问题。
redis2.4版本之后有
redis-sentinel 就是哨兵

//配置:   
cp /usr/local/redis-3.0.5/sentitinel.conf ./conf/
        
vim sentitinel.conf 
        
53 sentinel monitor mymaster 192.168.109.134 6379 1
        
bin/redis-sentinel conf/sentinel.conf
//看日志:
10429:X 17 Apr 18:03:35.817 # +monitor master mymaster 192.168.109.134 6379 quorum 1
10429:X 17 Apr 18:03:36.820 * +slave slave 192.168.109.134:6380 192.168.109.134 6380 @ mymaster 192.168.109.134 6379
10429:X 17 Apr 18:03:36.836 * +slave slave 192.168.109.134:6381 192.168.109.134 6381 @ mymaster 192.168.109.134 6379

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

推荐阅读更多精彩内容

  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,936评论 2 27
  • Nosql概述 在介绍Redis之前,首先先要介绍Nosql的概念。 互联网架构发展 在90年代的时候,计算机访问...
    COKIDCC阅读 680评论 0 1
  • 基于内存的NoSQL数据库。提供五种数据结构的存储。字符串、列表、集合、有序集合、散列表。Redis 支持很多特性...
    韩绝交阅读 664评论 0 1
  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,016评论 1 51
  • Redis是单进程单线程的,Redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。 Red...
    编辑小猿阅读 311评论 0 0