linux-Centos-7-64位:7、 redis安装及配置
2016-08-17 16:35
477 查看
Redis安装部署(最好使用3.0及以上功能附带集群)
Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。
Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。
需要安装gcc:yum install gcc-c++
然后开始安装redis
1. 下载地址:
Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。
Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。
需要安装gcc:yum install gcc-c++
然后开始安装redis
1. 下载地址:
$ wget http://redis.googlecode.com/files/redis-3.0.0.tar.gz[/code]
2. 解压缩 ( 放到/usr/local 目录下解压 )$ tar -zxvf redis-3.0.0.tar.gz
3. 编译$ cd redis-3.0.0 $ make $make install PREFIX=/usr/local/redis (安装的目录)
a、前端启动模式/usr/local/redis/bin/redis-server
默认是前端启动模式,端口是6379
b、后端启动
1)从redis的源码目录(既解压目录)中复制redis.conf到redis的安装目录/bin文件夹下。
2)修改配置文件cp /usr/local/redis/redis-3.0.0/redis.conf /usr/local/redis/bin cd /usr/local/redis/bin vi redis.conf
后端启动[root@leopard bin]# ./redis-server redis.conf
也可配置到/etc目录下$cp redis.conf /etc/ (复制到etc主目录下,方便当机启动)
参数介绍:
make install命令执行完成后,会在/usr/local/bin目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof 、redis-check-dump,它们的作用如下:
redis-server:Redis服务器的daemon启动程序(默认前端启动模式,端口是6379)
redis-cli:Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在当前系统下的读写性能
redis-check-aof:数据修复
redis-check-dump:检查导出工具
4. 修改系统配置文件,执行命令a) echo vm.overcommit_memory=1 >> /etc/sysctl.conf b) sysctl vm.overcommit_memory=1 或执行echo vm.overcommit_memory=1 >>/proc/sys/vm/overcommit_memory
使用数字含义:
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
5. 修改redis配置文件
a)$ cd /etc
b)vi redis.conf
c) 修改daemonize yes—目的使进程在后台运行
参数介绍:
daemonize:是否以后台daemon方式运行
pidfile:pid文件位置
port:监听的端口号
timeout:请求超时时间
loglevel:log信息级别
logfile:log文件位置
databases:开启数据库的数量
save * :保存快照的频率,第一个表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
rdbcompression:是否使用压缩
dbfilename:数据快照文件名(只是文件名,不包括目录)
dir:数据快照的保存目录(这个是目录)
appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
6. 启动redisa) $ cd /usr/local/bin b) ./redis-server /etc/redis.conf
7. 检查是否启动成功a) $ ps -ef | grep redis
小插曲:
/[b]*************************************************[/b]/
搭建集群需要使用到官方提供的ruby脚本。
需要安装ruby的环境。
安装rubyyum install ruby (ruby的虚拟机) yum install rubygems (ruby包的管理器)
redis集群管理工具 redis-trib.rb 位置[root@bogon ~]# cd /usr/local/redis-3.0.0 [root@bogon redis-3.0.0]# cd src [root@bogon src]# ll *.rb
根据下载好后的路径有 redis-3.0.0 和 redis-3.0.0.gem 两个包 没有就要去找官网下载
脚本需要的ruby包: redis-3.0.0.gem
需要上传到linux服务。
安装ruby的包(拷贝redis-3.0.0.gem 至 /usr/local下 执行以下命令):gem install redis-3.0.0.gem[root@bogon ~]# gem install redis-3.0.0.gem
伪集群的搭建(单个服务器创建6个redis实例,如果服务器充足,则各配一个)
第一步:创建6个redis实例,端口号从7001~7006#cd /user/local #mkdir redis-cluster #cd redis #cp -r bin ../redis-cluster/redis01
进入redis01将 dump.rdb快照文件删除并更改端口号#cd ../redis-cluster/redis01/ #rm -f dump.rdb
第二步:修改redis的配置文件
修改配置文件 redis-conf
1、修改端口号#vi redis-conf
2、打开cluster-enable前面的注释。(标示开始做集群)
保存更改完后返回到redis-cluster目录下,复制出其他5个redis实例,并将端口号改为7002-7006#cd .. #cp -r redis01/ redis02 #cp -r redis01/ redis03 #cp -r redis01/ redis04 #cp -r redis01/ redis05 #cp -r redis01/ redis06
第三步:把创建集群的ruby脚本复制到redis-cluster目录下。#cd /usr/local/redis-3.0.0/src #cp *.rb /usr/local/redis-cluster/
第四步:启动6个redis实例
因为单个启动比较麻烦,创建一个 startall.sh 脚本,一次性全启动vim startall.sh
写入如下内容,然后保存
添加权限操作,并执行
检查是否启动#ps aux | grep redis
启动成功
第五步:创建集群。#./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
创建6个实例节点,三个主,三个备
完成 yes
测试集群–# redis01/redis-cli -h 192.168.25.153 -p 7002 -c
注: -c 一定要加,标示集群
OK成功
关闭redis集群cd /usr/local/redis
单个关闭#bin/redis-cli -p 7001 shutdown
脚本一次性全关闭#vim shutdown.sh
保存并赋予操作权限,执行关闭
/[b]*************************************************[/b]/
导入redis.clients.jedis jar 包
进行集群
jedis整合spring
单机版<!-- 连接池配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大连接数 --> <property name="maxTotal" value="30" /> <!-- 最大空闲连接数 --> <property name="maxIdle" value="10" /> <!-- 每次释放连接的最大数目 --> <property name="numTestsPerEvictionRun" value="1024" /> <!-- 释放连接的扫描间隔(毫秒) --> <property name="timeBetweenEvictionRunsMillis" value="30000" /> <!-- 连接最小空闲时间 --> <property name="minEvictableIdleTimeMillis" value="1800000" /> <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 --> <property name="softMinEvictableIdleTimeMillis" value="10000" /> <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 --> <property name="maxWaitMillis" value="1500" /> <!-- 在获取连接的时候检查有效性, 默认false --> <property name="testOnBorrow" value="true" /> <!-- 在空闲时检查有效性, 默认false --> <property name="testWhileIdle" value="true" /> <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true --> <property name="blockWhenExhausted" value="false" /> </bean> <!-- jedis客户端单机版 --> <bean id="redisClient" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="192.168.25.153"></constructor-arg> <constructor-arg name="port" value="6379"></constructor-arg> <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg> </bean>
单机版测试/** * 单机版测试 * <p>Title: testSpringJedisSingle</p> * <p>Description: </p> */ @Test public void testSpringJedisSingle() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml"); JedisPool pool = (JedisPool) applicationContext.getBean("redisClient"); Jedis jedis = pool.getResource(); String string = jedis.get("key1"); System.out.println(string); jedis.close(); pool.close(); }
集群版整合<!-- jedis客户端集群版 --> <bean id="redisClient" class="redis.clients.jedis.JedisCluster"> <constructor-arg name="nodes"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"></constructor-arg> <constructor-arg name="port" value="7001"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"></constructor-arg> <constructor-arg name="port" value="7002"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"></constructor-arg> <constructor-arg name="port" value="7003"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"></constructor-arg> <constructor-arg name="port" value="7004"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"></constructor-arg> <constructor-arg name="port" value="7005"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.25.153"></constructor-arg> <constructor-arg name="port" value="7006"></constructor-arg> </bean> </set> </constructor-arg> <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg> </bean>
集群版测试@Test public void testSpringJedisCluster() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml"); JedisCluster jedisCluster = (JedisCluster) applicationContext.getBean("redisClient"); String string = jedisCluster.get("key1"); System.out.println(string); jedisCluster.close(); }
把缓存添加到业务逻辑。例子如下,
注意:缓存的添加不能影响正常的业务逻辑。
(整体逻辑就是,查找的内容先通过缓存查找,如果有直接返回,不需要连接数据库,如果没,则先查询并把结果添加进缓存内)
其中的“INDEX_CONTENT_REDIS_KEY”是定义主页的键,可随便定义@Override public List<TbContent> getContentList(long contentCid) { //从缓存中取内容 try { String result = jedisClient.hget(INDEX_CONTENT_REDIS_KEY, contentCid + ""); if (!StringUtils.isBlank(result)) { //把字符串转换成list List<TbContent> resultList = JsonUtils.jsonToList(result, TbContent.class); return resultList; } } catch (Exception e) { e.printStackTrace(); } //根据内容分类id查询内容列表 TbContentExample example = new TbContentExample(); Criteria criteria = example.createCriteria(); criteria.andCategoryIdEqualTo(contentCid); //执行查询 List<TbContent> list = contentMapper.selectByExample(example); //向缓存中添加内容 try { //把list转换成字符串 String cacheString = JsonUtils.objectToJson(list); jedisClient.hset(INDEX_CONTENT_REDIS_KEY, contentCid + "", cacheString); } catch (Exception e) { e.printStackTrace(); } return list; }
注:如果后台改变数据,需要同步缓存,也就是把对应的缓存信息删除,方便重新加载缓存内容。
相关文章推荐
- Linux/CentOS Redis安装与开机启动配置
- linux-Centos-7-64位:2、 安装Tomcat并配置
- linux-Centos-7-64位:6、 svn安装及配置
- linux(centos6.6) 下安装,配置redis, 及开机自启动
- Linux安装配置Redis CentOS 7 下安装Redis
- redis安装配置:inux系统为centOS 64位
- win10 64位下装Virtual Box安装Linux(centOS)配置联网
- linux-Centos-7-64位:8、sorl(搜索服务器)安装及配置
- Linux安装配置Redis CentOS 7 下安装Redis
- Linux (CentOS 7.3) 下Redis数据库的快速安装和配置
- Linux安装配置Redis CentOS 7 下安装Redis
- Linux安装配置Redis CentOS 7 下安装Redis
- CentOS Linux系统下安装Redis过程和配置参数说明
- 开发人员学Linux(12):CentOS7安装配置Memcached和Redis
- CentOS Linux下 redis 下载、安装、配置、主从集群配置
- 开发人员学Linux(12):CentOS7安装配置Memcached和Redis
- CentOS Linux系统下安装Redis过程和配置参数说明
- Linux安装配置Redis CentOS 7 下安装Redis
- CentOS Linux系统下安装Redis过程和配置参数说明
- Linux安装配置Redis CentOS 7 下安装Redis