博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.Redis安装
阅读量:4048 次
发布时间:2019-05-25

本文共 9092 字,大约阅读时间需要 30 分钟。

环境CentOS6.5

 

一.tcl安装

su - roottar xvzf tcl8.6.1-src.tar.gzcd tcl8.6.1/unix/./configuremakemake install

 

二.安装Redis

不需要用root用户安装Redis

http://redis.io/topics/security

Redis does not requires root privileges to run. It is recommended to run it as an unprivileged redis user that is only used for this purpose. The Redis authors are currently investigating the possibility of adding a new configuration parameter to preventCONFIG SET/GET dir and other similar run-time configuration directives. This would prevent clients from forcing the server to write Redis dump files at arbitrary locations.

su - 目标用户tar -xvzf redis-2.8.12.tar.gzcd redis-2.8.12makesudo cp redis.conf /etc/make testsudo make install (将命令放到 /usr/local/bin/)

 

说明:

1.使用root用户先装好tcl,不然 redis 的 make test 不会通过。

2.把源码里的redis.conf复制到/etc目录下,解决make test时出现的下面这个err。

*** [err]: EVAL processes writes from AOF in read-only slaves in tests/unit/scripting.tcl

3.centos中(1)建立用户和(2)使用sudo(3)开放6379端口,可以在 http://sgq0085.iteye.com/blog/1947313 中找到答案。当然也可以直接使用root,但用其他用户启动服务的时候dump.rdb是root权限,数据会不能写入磁盘。

4.32位Linux安装,后面有详细说明,我的测试环境是CentOS 5.4 。

 

三.启动

1.直接运行 

直接运行/关闭,该方法主要用于开发环境。redis-cli进入Redis的命令行 redis-cli --raw 显示中文

 

redis-serverredis-cli shutdown

也可以在通过下面方式修改过配置文件后,通过指定配置文件启动,关闭时可以通过指定ip和端口关闭

redis-server /etc/redis/6379.confredis-cli -h 127.0.0.1 -p 6379 shutdown

 

# 查看端口占用sudo netstat -tlnp|grep 6379

2.通过初始化脚本开机自动运行

注意 (1) redis-2.8.12/utils/redis_init_script 提供的脚本适用于ubuntu,下文中提到的centos_6.5_redis_init_script是我自己修改的一份脚本,在附件中下载

        (2) sudo 表示需要root权限

 

1)创建redis文件夹

 

sudo mkdir /etc/redissudo mkdir -p /var/redis/6379
 其中 /etc/redis 存放Redis的配置文件,/var/redis/6379 存放Redis的持久化文件

 

 

2)将启动脚本复制到/etc/init.d目录下,并设置权限

 

sudo cp centos_6.5_redis_init_script /etc/init.d/redis_6379sudo chmod 755 /etc/init.d/redis_6379
注意 文件名为redis_端口号,端口号要跟该文件中 REDISPORT 参数一致,默认是6379

 

3)修改配置文件

 

首先将配置文件(redis.conf)复制到/etc/redis目录中,以端口号命名(如“6379.conf”)

 

sudo cp redis.conf /etc/redis/6379.conf
 

 

设置一下参数,参数设置方式是 key+空格+value

 

# 端口号port 6379# 是否作为守护进程运行daemonize yes# 如果作为后台进程运行需要配置pidpidfile /var/run/redis_6379.pid# 日志记录等级,有4个可选值,debug,verbose(默认值),notice,warningloglevel notice# 日志文件保存地址及命名logfile /var/log/redis_6379.log# 本地数据库存放路径,默认值为 ./dir /var/redis/6379# 本地数据库文件名,默认值为dump.rdbdbfilename  dump6379.rdb# 最大内存使用设置(单位bytes),设置为可用内存的一半。这里使用虚拟机内存为1G,所以设置为536870912,即512M。maxmemory 536870912# 设置为其他Redis数据库的slave# slaveof 127.0.0.1 6379

持久化机制的配置snapshotting是将数据库当前状态保存到快照文件中,aof方式是将每次收到的命令保存到文件中(该文件会越来越大),需要自己根据情况选择适用的方式,不使用AOF模式,即RDB快照模式

# snapshotting方式# 900秒内修改过1次,则发起快照保存save 900 1# 300秒内修改过超过10个key,则发起快照保存save 300 10save 60 10000# aof方式# 启用aof持久化方式 不使用AOF模式,即RDB模式appendonly yes# aof持久化命令文件名, 存放地址配置同样为 dirappendfilename "appendonly.aof"# 收到写命令立即写入磁盘,最慢,保证完全的持久化# appendfsync always# 每秒写入一次appendfsync everysec# 完全依赖OS,性能最好,持久化没保证# appendfsync no# RDB#格式save seconds changes 即N秒变更N次则保存,从如下默认配置可以看到丢失数据的周期很长,通过save “” 配置可以完全禁用此持久化  save 900 1    save 300 10    save 60 10000   #RDB是否进行压缩,压缩耗CPU但是可以减少存储大小  rdbcompression yes  #RDB保存的位置,默认当前位置    dir ./  #RDB保存的数据库名称  dbfilename dump.rdb

 

 

其它在收集的附录中有说明。

 

4)设置内核参数(调优)

 

修改/etc/sysctl.conf文件

sudo vi /etc/sysctl.conf

 

在其中加上一行(末尾追加)

vm.overcommit_memory = 1

 

让应用生效

sudo sysctl -p# 或下面这句sysctl vm.overcommit_memory=1

 

说明:

该文件指定了内核针对内存分配的策略,其值可以是0、1、2。

0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2,表示内核允许分配超过所有物理内存和交换空间总和的内存

Redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为 8G,这个时候也要同样分配8G的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)。

通过设置,防止Redis脚本在重启或停止报错,及不能自动在停止服务前同步数据到磁盘上的问题。

 

 

调整/proc/sys/vm/overcommit_memory

该参数0、1、2、3同上面的是一样的,同时调整默认为0,如果内存情况比较紧张的话,设为1:

# 查看当前cat /proc/sys/vm/overcommit_memory# 设置值echo 1 > /proc/sys/vm/overcommit_memory

 

5)运行 Redis

 

启动或停止

 

sudo service redis_6379 startsudo service redis_6379 stop
 

 

设置是否随开机启动

 

sudo chkconfig redis_6379 onsudo chkconfig redis_6379 off

 

四.测试

(1) 使用 redis-cli 测试

redis-cli set foo barredis-cli get foo

 

(2) Java ,通过Jedis

依赖如下

 

redis.clients
jedis
2.5.1

测试代码

 

 

public static void main(String[] args) {    Jedis jedis = new Jedis("192.168.158.131", 6379, 1000);    jedis.set("redis", "redis value");    String value = jedis.get("redis");    System.out.println("redis=" + value);}

 

动态密码

config set requirepass my_redis  config get requirepass

 

 

 

五. redis.conf 配置参数说明

#是否作为守护进程运行daemonize yes#如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pidpidfile redis.pid#绑定主机IP,默认值为127.0.0.1#bind 127.0.0.1#Redis默认监听端口port 6379#客户端闲置多少秒后,断开连接,默认为300(秒)timeout 300#日志记录等级,有4个可选值,debug,verbose(默认值),notice,warningloglevel verbose#指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志logfile stdout#可用数据库数,默认值为16,默认数据库为0databases 16#保存数据到disk的策略#当有一条Keys数据被改变是,900秒刷新到disk一次save 900 1#当有10条Keys数据被改变时,300秒刷新到disk一次save 300 10#当有1w条keys数据被改变时,60秒刷新到disk一次save 60 10000#当dump .rdb数据库的时候是否压缩数据对象rdbcompression yes#本地数据库文件名,默认值为dump.rdbdbfilename dump.rdb#本地数据库存放路径,默认值为 ./dir /var/lib/redis/########### Replication ######################Redis的复制配置# slaveof 
当本机为从服务时,设置主服务的IP及端口# masterauth
当本机为从服务时,设置主服务的连接密码#连接密码# requirepass foobared#最大客户端连接数,默认不限制# maxclients 128#最大内存使用设置,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。# maxmemory
#不使用AOF模式,即RDB模式;是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为noappendonly no#更新日志文件名,默认值为appendonly.aof#appendfilename#更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。# appendfsync alwaysappendfsync everysec# appendfsync no################ VIRTUAL MEMORY ############是否开启VM功能,默认值为novm-enabled no# vm-enabled yes#虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享vm-swap-file /tmp/redis.swap#将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的 (Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0。vm-max-memory 0vm-page-size 32vm-pages 134217728vm-max-threads 4############# ADVANCED CONFIG ###############glueoutputbuf yes#配置字段最多64个hash-max-zipmap-entries 64#配置value最大为512字节hash-max-zipmap-value 512#是否重置Hash表activerehashing yes注意:Redis官方文档对VM的使用提出了一些建议:当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件.vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数.如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

 

六.集群配置

1.配置Master-Slave(主-从复制,主、从数据相同)

只需要在Slave上配置Master节点IP Port:

slaveof 192.168.3.98 6379

 依次启动Master,Slave

或者通过命令设置是否为master和slave

# 设置当前为masterslaveof no one# 设置当前为slave并指定master的ip和端口号slaveof 192.168.3.98 6379
  

2.主从备份

在Slave上执行下列命令:

#备份redis-cli save

#关闭redis服务器

redis-cli shutdown

 然后,拷贝数据目录下的rdb文件。

 

3.Prd-Sharding扩容方式(分布式,各个节点数据不同)

在上述得到rdb文件的基础上,客户端使用的Jedis的List<JedisShardInfo>,中原位置的ip和端口号替换成新的ip和端口。

注意,List中顺序一定不能改变,Jedis的ShardedJedis保证相同顺序和相同key通过hash计算后指向固定的服务器。

七. CentOS 5.4 32位安装说明

 

1.getconf LONG_BIT查看多少位,lsb_release -a 查看系统版本号。很奇怪 redis-2.8.18make不能通过,redis-2.8.12 make可以通过。

2.直接输入lua,测试是否安装lua。

(1) lua下载地址http://www.lua.org/ftp/lua-5.2.3.tar.gz

 

# tar -xvzf lua压缩包lua-5.2.3]# cd lua-5.2.3lua-5.2.3]# make linuxlua-5.2.3]# make linux install

 

(2)遇到下面错误执行:  yum install libtermcap-devel ncurses-devel libevent-devel readline-devel

 

 

make[1]: Entering directory `/root/install/lua-5.2.3/src'make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline"make[2]: Entering directory `/root/install/lua-5.2.3/src'gcc -o lua   lua.o liblua.a -lm -Wl,-E -ldl -lreadline /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `PC'/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetflag'/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetent'/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `UP'/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tputs'/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgoto'/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetnum'/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `BC'/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetstr'collect2: ld returned 1 exit statusmake[2]: *** [lua] Error 1make[2]: Leaving directory `/root/install/lua-5.2.3/src'make[1]: *** [linux] Error 2make[1]: Leaving directory `/root/install/lua-5.2.3/src'make: *** [linux] Error 2

 

 

(3)修改由于lua编译依赖readline库,而其依赖ncurses库,但没有指定,所以出现“未定义的符合引用”错误。需要修改${LUA_DIR}/src/Makefile中linux编译target,在SYSLIBS变量中追加‘-lncurses’选项即可。修改后,如下:

 

lua-5.2.3]# vi src/Makefile

 

 

注:lua-5.2.3中在第106行

 

linux:	$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -lncurses"

 

 

3.make命令后面需要加上 CFLAGS= -march=i686

 

make CFLAGS="-march=i686"

 

 

4.另外有一种说法 编辑了下src/.make_settings里的OPT,改为OPT=-O2 -march=i686,我没有使用这种方法,但make通过。

 

5.make test或make install不能通过的情况下,可以尝试 make test本来就是可选步骤

 

sudo cp src/redis-server /usr/local/bin/sudo cp src/redis-cli /usr/local/bin/

 

 

 

 

转载地址:http://lmyci.baihongyu.com/

你可能感兴趣的文章
Oracle 12C DG 搭建(RAC-RAC/RAC-单机)
查看>>
Truncate 表之恢复
查看>>
Oracle DG failover 后恢复
查看>>
mysql 主从同步配置
查看>>
为什么很多程序员都选择跳槽?
查看>>
mongdb介绍
查看>>
mongdb在java中的应用
查看>>
区块链技术让Yotta企业云盘为行政事业服务助力
查看>>
Yotta企业云盘更好的为媒体广告业服务
查看>>
Yotta企业云盘助力科技行业创高峰
查看>>
Yotta企业云盘更好地为教育行业服务
查看>>
Yotta企业云盘怎么帮助到能源化工行业
查看>>
企业云盘如何助力商业新发展
查看>>
医疗行业运用企业云盘可以带来什么样的提升
查看>>
教育数字智能化能为现有体系带来新的起点
查看>>
媒体广告业如何将内容资产进行高效地综合管理与利用
查看>>
能源化工要怎么管控核心数据
查看>>
媒体广告业如何运用云盘提升效率
查看>>
企业如何运用企业云盘进行数字化转型-实现新发展
查看>>
司法如何运用电子智能化加快现代化建设
查看>>