导航:首页 > IDC知识 > redis数据保存服务器

redis数据保存服务器

发布时间:2020-11-13 00:48:29

1、用了redis后,接口是不是就可以多台服务器了,用一个redis 或一个redis集群 就可以

Set集合中不允许抄出现重复的元素,这一点和C++标准库中的set容器是完全相同的。换句话说,如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。

2、数据存到redis 过后怎么处理放到数据库

1、 快照的方式持久化到磁盘
自动持久化规则配置
save 900 1
save 300 10
save 60 10000
上面的配置规则意思如下:
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
redis也可以关闭自动持久化,注释掉这些save配置,或者save “”
如果后台保存到磁盘发生错误,将停止写操作.
stop-writes-on-bgsave-error yes
使用LZF压缩rdb文件,这会耗CPU, 但是可以减少磁盘占用.
rdbcompression yes
保存rdb和加载rdb文件的时候检验,可以防止错误,但是要付出约10%的性能,可以关闭他,提高性能。
rdbchecksum yes
导出的rdb文件名
dbfilename mp.rdb
设置工作目录, rdb文件会写到该目录, append only file也会存储在该目录下.
dir ./
Redis自动快照保存到磁盘或者调用bgsave,是后台进程完成的,其他客户端仍然和可以读写redis服务器,后台保存快照到磁盘会占用大量内存。调用save保存内存中的数据到磁盘,将阻塞客户端请求,直到保存完毕。
调用shutdown命令,Redis服务器会先调用save,所有数据持久化到磁盘之后才会真正退出。
对于数据丢失的问题:
如果服务器crash,从上一次快照之后的数据将全部丢失。所以在设置保存规则的时候,要根据实际业务设置允许的范围。
如果对于数据敏感的业务,在程序中要使用恰当的日志,在服务器crash之后,通过日志恢复数据。
2、 Append-only file 的方式持久化

另外一种方式为递增的方式,将会引起数据变化的操作, 持久化到文件中, 重启redis的时候,通过操作命令,恢复数据.

每次执行写操作命令之后,都会将数据写到server.aofbuf中。
# appendfsync always
appendfsync everysec
# appendfsync no

当配置为always的时候,每次server.aofbuf中的数据写入到文件之后,才会返回给客户端,这样可以保证数据不丢,但是频繁的IO操作,会降低性能。

everysec每秒写一次,这可能会丢失一秒内的操作。

aof最大的问题就是随着时间append file会变的很大,所以我们需要bgrewriteaof命令重新整理文件,只保留最新的kv数据。

3、Linux服务器如何自定义安装Redis

一、安装步聚:
1、从Redis官网下载指定版本(http://redis.io/download):
wget http://download.redis.io/releases/redis-2.8.24.tar.gz
2、解压缩:
tar xzf redis-2.8.24.tar.gz
3、进入解压缩目录:
cd redis-2.8.24
4、安装至指定目录:
make PREFIX=/alidata/server/redis install
二、配置Redis:

1、复制redis-2.8.24文件夹中的配置文件至etc目录:cp redis.conf /etc/
2、修改配置文件:vi /etc/redis.conf

#查找daemonize no改为
#以守护进程方式运行
daemonize yes
#修改dir ./为绝对路径,
#默认的话redis-server启动时会在当前目录生成或读取mp.rdb
#所以如果在根目录下执行redis-server /etc/redis.conf的话,
#读取的是根目录下的mp.rdb,为了使redis-server可在任意目录下执行
#所以此处将dir改为绝对路径
dir /alidata/server/redis
#修改appendonly为yes
#指定是否在每次更新操作后进行日志记录,
#Redis在默认情况下是异步的把数据写入磁盘,
#如果不开启,可能会在断电时导致一段时间内的数据丢失。
#因为 redis本身同步数据文件是按上面save条件来同步的,
#所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly yes
#如果要设置登陆密码,则开启requirepass
requirepass 123456
3、#将redis添加到自启动中
echo "/alidata/server/redis/bin/redis-server /etc/redis.conf" >> /etc/rc.d/rc.local
#启动redis
/alidata/server/redis/bin/redis-server /etc/redis.conf
#查看redis是否己启动
ps -ef | grep redis
#停止redis
/alidata/server/redis/bin/redis-cli shutdown(浦东数据中心为您解答)

4、如何用redis做session服务器

布式Session几种实现式

1.基于数据库Session共享
2.基于NFS共享文件系统
3.基于memcached session何保证 memcached 本身高用性
4. 基于resin/tomcat web容器本身session复制机制
5. 基于TT/Redis 或 jbosscache 进行 session 共享

6. 基于cookie 进行session共享

或者:

、Session Replication 式管理 (即session复制)

简介:台机器Session数据广播复制集群其余机器

使用场景:机器较少网络流量较

优点:实现简单、配置较少、网络机器Down掉影响用户访问

缺点:广播式复制其余机器定廷带定网络销

二、Session Sticky 式管理

简介:即粘性Session、用户访问集群某台机器强制指定续所请求均落机器

使用场景:机器数适、稳定性要求非苛刻

优点:实现简单、配置便、没额外网络销

缺点:网络机器Down掉、用户Session丢失、容易造单点故障

三、缓存集式管理

简介:Session存入布式缓存集群某台机器用户访问同节点先缓存拿Session信息

使用场景:集群机器数、网络环境复杂

优点:靠性

缺点:实现复杂、稳定性依赖于缓存稳定性、Session信息放入缓存要合理策略写入

二SessionCookie区别联系及Session实现原理

1、session保存服务器客户端知道其信息;cookie保存客户端服务器能够知道其信息

2、session保存象cookie保存字符串

3、session能区路径同用户访问网站期间所session任何都访问cookie设置路径参数同网站同路径cookie互相访问

4、session需要借助cookie才能<nobr oncontextmenu="return false;"
onmousemove="kwM(3);" id="key3" onmouseover="kwE(event,3, this);"
style="COLOR: #6600ff; BORDER-BOTTOM: 0px dotted; BACKGROUND-COLOR:
transparent; TEXT-DECORATION: underline" onclick="return kwC();"
onmouseout="kwL(event, this);"
target="_blank">工作客户端完全禁止cookiesession失效

http状态协议客户每读取web页面服务器都打新且服务器自维护客户文信息要才能实现网商店
购物车呢session种保存文信息机制针每用户变量值保存服务器端通SessionID区同客
户,sessioncookie或URL重写基础默认使用cookie实现系统创造名JSESSIONID输cookie我
叫做session cookie,区别persistent
cookies,我通所说cookie,注意session
cookie存储于浏览器内存并写硬盘我刚才看JSESSIONID我通情看JSESSIONID
我浏览器cookie禁止web服务器采用URL重写式传递Sessionid我址栏看
sessionid=KWJHUG6JJM65HS2K6类字符串
明白原理我容易辨persistent cookiessession
cookie区别网些关于两者安全性讨论目session cookie针某言结束session
cookie随着消失persistent
cookie存于客户端硬盘段文本(通加密)且能遭cookie欺骗及针cookie跨站脚本攻击自
session cookie安全
通session
cookie能跨窗口使用新浏览器窗口进入相同页面系统赋予新sessionid我信息共享目达
我先sessionid保存persistent
cookie新窗口读窗口SessionID通session cookiepersistent
cookie结合我实现跨窗口session tracking(跟踪)
些web发书往往简单Sessioncookie作两种并列http传送信息式session
cookies位于服务器端persistent
cookie位于客户端sessioncookie基础明白两者间联系区别我难选择合适技术发web
service
总:

、cookie机制session机制区别
具体说cookie机制采用客户端保持状态案session机制采用服务器端保持状态案
同我看由于服务器端保持状态案客户端需要保存标识所session机制能需要借助于cookie机制达保存标识目实际其选择
二、cookie持久cookie区别
设置期间则表示cookie命周期浏览器期间要关闭浏览器窗口cookie消失种命期浏览期cookie称cookiecookie般保存硬盘保存内存
设置期间浏览器cookie保存硬盘关闭再打浏览器些cookie依效直超设定期间
存储硬盘cookie同浏览器进程间共享比两IE窗口于保存内存cookie同浏览器同处理式
三、何利用实现自登录
用户某网站注册收惟用户IDcookie客户重新连接用户ID自返服务器进行检查确定否注册用户且选择自登录使用户需给明确用户名密码访问服务器资源
四、何根据用户定制站点
网站使用cookie记录用户意愿于简单设置网站直接页面设置存储cookie完定制于更复杂定制网站需仅惟标识符发送给用户由服务器端数据库存储每标识符应页面设置
五、cookie发送
1.创建Cookie象
2.设置效
3.Cookie放入HTTP响应报
 
 创建cookie并发送浏览器默认情况级别cookie:存储浏览器内存用户退浏览器删除
希望浏览器该cookie存储磁盘则需要使用maxAge并给秒单位间效设0则命令浏览器删除该
cookie
 
 发送cookie需要使用插入 Set-Cookie
HTTP请求报由于并修改任何前指定Set-Cookie报创建新报我称addCookie
非setCookie同要记住响应报必须任何文档内容发送客户端前设置
六、cookie读取
1.调用request.getCookie
要获取浏览器发送cookie需要调用HttpServletRequestgetCookies调用返Cookie象数组应由HTTP请求Cookie报输入值
2.数组进行循环调用每cookiegetName直找兴趣cookie止
cookie与主机(域)相关非servlet或JSP页面尽管servlet能发送单cookie能许相关cookie
例:
String cookieName = userID;
Cookie cookies[] = request.getCookies();
if (cookies!=null){
for(int i=0;i
Cookie
cookie = cookies[i];
if (cookieName.equals(cookie.getName())){
doSomethingWith(cookie.getValue());
}
}
}
七、何使用cookie检测初访者
A.调用HttpServletRequest.getCookies()获取Cookie数组
B.循环检索指定名字cookie否存及应值否确
C.则退循环并设置区别标识
D.根据区别标识判断用户否初访者进行同操作
八、使用cookie检测初访者见错误
能仅仅cookie数组存特定数据项认用户初访者cookie数组null客户能初访者能由于用户cookie删除或禁用造结
 
 数组非null,显示客户曾经网站或域并能说明曾经访问servlet其servlet、JSP页面及
非Java Web应用都设置cookie依据路径设置其任何cookie都能返给用户浏览器
确做判断cookie数组否空且否存指定Cookie象且值确
九、使用cookie属性注意问题
属性服务器发送浏览器报部;属于由浏览器返给服务器报 
除名称值外cookie属性适用于服务器输客户端cookie;服务器端自于浏览器cookie并没设置些属性 
 
 要期望通request.getCookiescookie使用属性意味着能仅仅通设置cookie效
发随输入数组查找适cookie,读取值修改并存Cookie实现断改变cookie值
十、何使用cookie记录各用户访问计数
1.获取cookie数组专门用于统计用户访问数cookie值
2.值转换int型
3.值加1并用原名称重新创建Cookie象
4.重新设置效
5.新cookie输
十、session同环境同含义
session文经翻译其本含义指始终系列作/消息比打电拿起电拨号挂断电间系列程称session
session词与网络协议相关联往往隐含面向连接/或保持状态两含义
sessionWeb发环境语义新扩展含义指类用客户端与服务器端间保持状态解决案候Session用指种解决案存储结构
十二、session机制
session机制种服务器端机制服务器使用种类似于散列表结构(能使用散列表)保存信息

程序需要某客户端请求创建session候服务器首先检查客户端请求否包含session标识-称session
id,已经包含session id则说明前已经客户创建session服务器按照session
idsession检索使用(检索能新建种情况能现服务端已经删除该用户应session象用户
请求URL面附加JSESSION参数)
客户请求包含session id则客户创建session并且与session相关联session idsession id本响应返给客户端保存
十三、保存session id几种式
A.保存session id式采用cookie交互程浏览器自按照规则标识发送给服务器
B.
由于cookie禁止必须其机制便cookie禁止仍能够session
id传递服务器经采用种技术叫做URL重写session
id附加URL路径面附加式两种种作URL路径附加信息另种作查询字符串附加URL面网络整交互程始终
保持状态必须每客户端能请求路径面都包含session
id
C.另种技术叫做表单隐藏字段服务器自修改表单添加隐藏字段便表单提交能够session id传递服务器
十四、session候创建
见错误session客户端访问创建事实直某server端程序(Servlet)调用HttpServletRequest.getSession(true)语句才创建
十五、session何删除
session列情况删除:
A.程序调用HttpSession.invalidate()
B.距离收客户端发送session id间间隔超session效间
C.服务器进程停止
再注意关闭浏览器使存储客户端浏览器内存session cookie失效使服务器端session象失效

5、redis 缓存服务器 怎么给外部系统用

  Redis介绍
Redis本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是string(字符串)、list(列表)、sets(集合)或者是ordered sets(被排序的集合),所有的数据类型都具有push/pop、add/remove、执行服务端的并集、交集、两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排序能力
Redis 2.0更是增加了很多新特性,如:提升了性能、增加了新的数据类型、更少的利用内存(AOF和VM)
Redis支持绝大部分主流的开发语言,如:C、Java、C#、PHP、Perl、Python、Lua、Erlang、Ruby等等
官网:http://code.google.com/p/redis/

Redis性能
根据Redis官方的测试结果:在50个并发的情况下请求10w次,写的速度是110000次/s,读的速度是81000次/s
地址:http://code.google.com/p/redis/wiki/Benchmarks

一、安装过程:
最新稳定版,Redis 2.0.4 stable
wget http://redis.googlecode.com/files/redis-2.6.7.tar.gz (其他版本到官网下载即可)
tar zxf redis-2.6.7.tar.gz
cd redis-2.6.7
与其它软件不同的是,不需要configure。
make
装完了。

创建一个目录
mkdir /usr/local/redis2
cd src
cp redis-server redis-benchmark redis-cli ../redis.conf /usr/local/redis2

二、启动与停止:
cd /usr/local/redis2
启动 ./redis-server > /dev/null & 或者 ./redis-server redis.conf 或者 ./redis-server redis.conf 1>log.log 2>errlog.log (1为标准输出,2为错误输出)

停止 ./redis-cli shutdown
客户端连接 ./redis-cli

三、测试:

存值:
./redis-cli set hx value
取值:
./redis-cli get hx

> quit
退出连接
> dbsize
(integer) 12
当前数据库中key的数量
> info
服务器基本信息
monitor
实时转储收到的请求
config get
获取服务器的参数配置
flushdb
清空当前数据库
flushall
清除所有数据库

四、附注
redis.conf配置文件:
引用
#是否作为守护进程运行
daemonize yes
#配置pid的存放路径及文件名,默认为当前路径下
pidfile redis.pid
#Redis默认监听端口
port 6379
#客户端闲置多少秒后,断开连接
timeout 300
#日志显示级别
loglevel verbose
#指定日志输出的文件名,也可指定到标准输出端口
logfile stdout
#设置数据库的数量,默认连接的数据库是0,可以通过select N来连接不同的数据库
databases 16
#保存数据到disk的策略
#当有一条Keys数据被改变是,900秒刷新到disk一次
save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
save 300 10
#当有1w条keys数据被改变时,60秒刷新到disk一次
save 60 10000
#当mp .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#mp数据库的数据保存的文件名
dbfilename mp.rdb
#Redis的工作目录
dir /home/falcon/redis-2.0.0/
########### Replication #####################
#Redis的复制配置
# slaveof <masterip> <masterport>
# masterauth <master-password>

############## SECURITY ###########
# requirepass foobared

############### LIMITS ##############
#最大客户端连接数
# maxclients 128
#最大内存使用率
# maxmemory <bytes>

########## APPEND ONLY MODE #########
#是否开启日志功能
appendonly no
# 刷新日志到disk的规则
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否开启VM功能
vm-enabled no
# vm-enabled yes
vm-swap-file logs/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG ###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes

6、两台服务器,一个放程序的,一个放数据库换季,redis装在哪个服务器上好

应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql,此种情况存在的问题主要是如何保证mysql与redis的数据同步,二者数据同步的关键在于mysql数据库中
主键,方案是在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新
失败,则需要及时清除缓存及同步redis主键。Stringtbname="login";//获取mysql表主键值--redis启动时
longid=MySQL.getID(tbname);//设置redis主键值--redis启动时
redisService.set(tbname,String.valueOf(id));System.out.println(id);longl=redisService.incr(tbname);
System.out.println(l);Loginlogin=newLogin();login.setId(l);
login.setName("redis");redisService.hmset(String.valueOf(login.getId()),login);booleanb=MySQL.insert("insertintologin(id,name)values("+login.getId()+",'"+login.getName()+"')");
/****队列处理器更新mysql失败:**清除缓存数据,同时主键值自减*/if(!b)
{redisService.delKeyAndDecr(tbname,"Login:"+String.valueOf(login.getId()));}System.out.println(redisService.exists("Login:"+String.valueOf(login.getId())));System.out.println(redisService.get(tbname))

7、游戏服务器使用MongoDB作为数据库,还有必要使用Redis缓存吗

MongoDB不多说,不是一个类型copy的东西,Redis相对Memcached来说功能和特性上的优势已经很明显了。而对于性能,Redis作者的说法是平均到单个核上的性能,在单条数据不大的情况下Redis更好。为什么这么说呢,理由就是Redis是单线程运行的。因为是单线程运行,所以和Memcached的多线程相比,整体性能肯定会偏低。因为是单线程运行,所以IO是串行化的,网络IO和内存IO,因此当单条数据太大时,由于需要等待一个命令的所有IO完成才能进行后续的命令,所以性能会受影响。

8、游戏服务器使用MongoDB作为数据库,还有必要使用Redis缓存吗

相比memcached:

1、redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上回。

2、redis具备binlog功能,可以将所有操作写入日志答,当redis出现故障,可依照binlog进行数据恢复。

3、redis支持virtual memory,可以限定内存使用大小,当数据超过阈值,则通过类似lru的算法把内存中的最不常用数据保存到硬盘的页面文件中。

4、redis原生支持的数据类型更多,使用的想象空间更大。

5、前面有位朋友所提及的一致性哈希,用在redis的sharding中,一般是在负载非常高需要水平扩展时使用。我们还没有用到这方面的功能,一般的项目,单机足够支撑并发了。redis 3.0将推出cluster,功能更加强大。

6、redis更多优点,请移步官方网站查询。

9、web服务器怎么使用redis分步式缓存

Redis复制流程概述
Redis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要注意你的系统内存容量规划,原因可以参考我上一篇文章中提到的Redis磁盘IO问题。
Redis复制流程在Slave和Master端各自是一套状态机流转,涉及的状态信息是:
Slave 端:
REDIS_REPL_NONEREDIS_REPL_CONNECTREDIS_REPL_CONNECTED
Master端:
REDIS_REPL_WAIT_BGSAVE_STARTREDIS_REPL_WAIT_BGSAVE_ENDREDIS_REPL_SEND_BULKREDIS_REPL_ONLINE
整个状态机流程过程如下:
Slave端在配置文件中添加了slave of指令,于是Slave启动时读取配置文件,初始状态为REDIS_REPL_CONNECT。
Slave端在定时任务serverCron(Redis内部的定时器触发事件)中连接Master,发送sync命令,然后阻塞等待master发送回其内存快照文件(最新版的Redis已经不需要让Slave阻塞)。
Master端收到sync命令简单判断是否有正在进行的内存快照子进程,没有则立即开始内存快照,有则等待其结束,当快照完成后会将该文件发送给Slave端。
Slave端接收Master发来的内存快照文件,保存到本地,待接收完成后,清空内存表,重新读取Master发来的内存快照文件,重建整个内存表数据结构,并最终状态置位为 REDIS_REPL_CONNECTED状态,Slave状态机流转完成。
Master端在发送快照文件过程中,接收的任何会改变数据集的命令都会暂时先保存在Slave网络连接的发送缓存队列里(list数据结构),待快照完成后,依次发给Slave,之后收到的命令相同处理,并将状态置位为 REDIS_REPL_ONLINE。

整个复制过程完成,流程如下图所示:

Redis复制机制的缺陷
从上面的流程可以看出,Slave从库在连接Master主库时,Master会进行内存快照,然后把整个快照文件发给Slave,也就是没有象MySQL那样有复制位置的概念,即无增量复制,这会给整个集群搭建带来非常多的问题。
比如一台线上正在运行的Master主库配置了一台从库进行简单读写分离,这时Slave由于网络或者其它原因与Master断开了连接,那么当Slave进行重新连接时,需要重新获取整个Master的内存快照,Slave所有数据跟着全部清除,然后重新建立整个内存表,一方面Slave恢复的时间会非常慢,另一方面也会给主库带来压力。
所以基于上述原因,如果你的Redis集群需要主从复制,那么最好事先配置好所有的从库,避免中途再去增加从库。
Cache还是Storage
在我们分析过了Redis的复制与持久化功能后,我们不难得出一个结论,实际上Redis目前发布的版本还都是一个单机版的思路,主要的问题集中在,持久化方式不够成熟,复制机制存在比较大的缺陷,这时我们又开始重新思考Redis的定位:Cache还是Storage?
如果作为Cache的话,似乎除了有些非常特殊的业务场景,必须要使用Redis的某种数据结构之外,我们使用Memcached可能更合适,毕竟Memcached无论客户端包和服务器本身更久经考验。
如果是作为存储Storage的话,我们面临的最大的问题是无论是持久化还是复制都没有办法解决Redis单点问题,即一台Redis挂掉了,没有太好的办法能够快速的恢复,通常几十G的持久化数据,Redis重启加载需要几个小时的时间,而复制又有缺陷,如何解决呢?
Redis可扩展集群搭建1. 主动复制避开Redis复制缺陷。
既然Redis的复制功能有缺陷,那么我们不妨放弃Redis本身提供的复制功能,我们可以采用主动复制的方式来搭建我们的集群环境。
所谓主动复制是指由业务端或者通过代理中间件对Redis存储的数据进行双写或多写,通过数据的多份存储来达到与复制相同的目的,主动复制不仅限于用在Redis集群上,目前很多公司采用主动复制的技术来解决MySQL主从之间复制的延迟问题,比如Twitter还专门开发了用于复制和分区的中间件gizzard(https://github.com/twitter/gizzard) 。
主动复制虽然解决了被动复制的延迟问题,但也带来了新的问题,就是数据的一致性问题,数据写2次或多次,如何保证多份数据的一致性呢?如果你的应用对数据一致性要求不高,允许最终一致性的话,那么通常简单的解决方案是可以通过时间戳或者vector clock等方式,让客户端同时取到多份数据并进行校验,如果你的应用对数据一致性要求非常高,那么就需要引入一些复杂的一致性算法比如Paxos来保证数据的一致性,但是写入性能也会相应下降很多。
通过主动复制,数据多份存储我们也就不再担心Redis单点故障的问题了,如果一组Redis集群挂掉,我们可以让业务快速切换到另一组Redis上,降低业务风险。
2. 通过presharding进行Redis在线扩容。
通过主动复制我们解决了Redis单点故障问题,那么还有一个重要的问题需要解决:容量规划与在线扩容问题。
我们前面分析过Redis的适用场景是全部数据存储在内存中,而内存容量有限,那么首先需要根据业务数据量进行初步的容量规划,比如你的业务数据需要100G存储空间,假设服务器内存是48G,那么根据上一篇我们讨论的Redis磁盘IO的问题,我们大约需要3~4台服务器来存储。这个实际是对现有业务情况所做的一个容量规划,假如业务增长很快,很快就会发现当前的容量已经不够了,Redis里面存储的数据很快就会超过物理内存大小,那么如何进行Redis的在线扩容呢?
Redis的作者提出了一种叫做presharding的方案来解决动态扩容和数据分区的问题,实际就是在同一台机器上部署多个Redis实例的方式,当容量不够时将多个实例拆分到不同的机器上,这样实际就达到了扩容的效果。
拆分过程如下:
在新机器上启动好对应端口的Redis实例。
配置新端口为待迁移端口的从库。
待复制完成,与主库完成同步后,切换所有客户端配置到新的从库的端口。
配置从库为新的主库。
移除老的端口实例。
重复上述过程迁移好所有的端口到指定服务器上。

以上拆分流程是Redis作者提出的一个平滑迁移的过程,不过该拆分方法还是很依赖Redis本身的复制功能的,如果主库快照数据文件过大,这个复制的过程也会很久,同时会给主库带来压力。所以做这个拆分的过程最好选择为业务访问低峰时段进行。
Redis复制的改进思路
我们线上的系统使用了我们自己改进版的Redis,主要解决了Redis没有增量复制的缺陷,能够完成类似Mysql Binlog那样可以通过从库请求日志位置进行增量复制。
我们的持久化方案是首先写Redis的AOF文件,并对这个AOF文件按文件大小进行自动分割滚动,同时关闭Redis的Rewrite命令,然后会在业务低峰时间进行内存快照存储,并把当前的AOF文件位置一起写入到快照文件中,这样我们可以使快照文件与AOF文件的位置保持一致性,这样我们得到了系统某一时刻的内存快照,并且同时也能知道这一时刻对应的AOF文件的位置,那么当从库发送同步命令时,我们首先会把快照文件发送给从库,然后从库会取出该快照文件中存储的AOF文件位置,并将该位置发给主库,主库会随后发送该位置之后的所有命令,以后的复制就都是这个位置之后的增量信息了。

Redis与MySQL的结合
目前大部分互联网公司使用MySQL作为数据的主要持久化存储,那么如何让Redis与MySQL很好的结合在一起呢?我们主要使用了一种基于MySQL作为主库,Redis作为高速数据查询从库的异构读写分离的方案。
为此我们专门开发了自己的MySQL复制工具,可以方便的实时同步MySQL中的数据到Redis上。

(MySQL-Redis 异构读写分离)
总结:
Redis的复制功能没有增量复制,每次重连都会把主库整个内存快照发给从库,所以需要避免向在线服务的压力较大的主库上增加从库。
Redis的复制由于会使用快照持久化方式,所以如果你的Redis持久化方式选择的是日志追加方式(aof),那么系统有可能在同一时刻既做aof日志文件的同步刷写磁盘,又做快照写磁盘操作,这个时候Redis的响应能力会受到影响。所以如果选用aof持久化,则加从库需要更加谨慎。
可以使用主动复制和presharding方法进行Redis集群搭建与在线扩容。

10、阿里云数据库redis怎么配置

根据下面步骤创建适应业务需求的云数据库Redis版实例。

使用下列方法中任意一种打开购内买页:容

打开云数据库Redis版产品首页,单击立即购买。

说明 如果尚未登录阿里云账号,单击立即购买后需要先使用阿里云账号和密码登录。

登录Redis管理控制台,单击右上角的创建实例。

设置以下参数。

选择密码设置方式。

立即设置:在下方的输入密码区域设置密码。

稍后设置:创建实例后再修改密码。

设置实例名称、购买数量,如果创建包年包月实例,还需设置时长。

在确认订单页,阅读《云数据库KVStore版服务协议》,确认接受后在服务协议前的选框中单击勾选。

单击去开通。

因为这方面内容较多,这里也写不开那么多内容,所以你可以留言或到我的博客上搜索相关内容,老魏有写过教程,还不止一篇,都挺详细的内容,可以帮助你入门。

与redis数据保存服务器相关的知识