redis的使用

最近一直在学java后台,看的是黑马的视频,这里复习一下redis服务器,下面是黑马视频的笔记,加以修改。
redis的作用:为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql。NoSql,叫非关系型数据库,它的全名Not only sql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。redis是以键值对存储数据的。
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。 
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化


1.redis的安装
准备工作:因为redis是用c语言开发的,先安装c语言环境
[root@itheima ~]# yum install gcc-c++
这个步骤需要联网,重网上下载东西的。

第一步 把下载的redis安装包上传到linux服务器

然后在linux的用户文件夹下找到压缩包。


第二步 解压压缩文件
[root@itheima ~]# tar -zxf redis-3.0.0.tar.gz


第三步 编译redis源码
先进入解压出来的文件夹,然后编译
[root@itheima ~]# cd redis-3.0.0
[root@itheima redis-3.0.0]# make


第四步 安装redis,安装到/usr/local/redis这个文件夹下
[root@itheima redis-3.0.0]# make install PREFIX=/usr/local/redis
如果安装成功了,这个文件夹下会有一个bin的文件夹



2.redis的启动
两种启动方式:
2.1 前端启动
进入安装的文件夹下(/usr/local/redis 这个文件夹)
[root@itheima bin]# ./redis-server

前端启动的关闭
强制关闭:Ctrl+c
正常关闭:[root@itheima bin]# ./redis-cli shutdown

启动界面:

前端启动的问题
一旦客户端关闭,则redis服务也停掉。


2.2 后端启动
第一步:需要将redis解压之后的源码包中的redis.conf文件拷贝到bin目录下
[root@itheima bin]# cp /root/redis-3.0.0/redis.conf ./

第二步:修改redis.conf文件,将daemonize改为yes
先要使用vim redis.conf,然后输入i,然后将no改成yes,然后按ESC键,然后输入:wq,就可以保存



第三步:使用命令后端启动redis
[root@itheima bin]# ./redis-server redis.conf

第四步:查看是否启动成功
ps -aux | qrep redis


关闭后端启动的方式:

强制关闭:[root@itheima bin]# kill -9 5071
正常关闭:[root@itheima bin]# ./redis-cli shutdown

在项目中,建议使用正常关闭。
因为redis作为缓存来使用的话,将数据存储到内存中,如果使用正常关闭,则会将内存数据持久化到本地之后,再关闭。

如果是强制关闭,则不会进行持久化操作,可能会造成部分数据的丢失。



3.redis客户端的启动
在redis的安装目录的bin文件夹下输入命令
[root@itheima bin]# ./redis-cli -h 127.0.0.1 -p 6379

默认启动:[root@itheima bin]# ./redis-cli
使用默认配置:默认的ip【127.0.0.1】,默认的port【6379】
- 关闭
Ctrl+c
127.0.0.1:6379> quit



4.redis持久化方案
持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中

4.1 Rdb方式
在redis.conf文件中添加如下
save 900 1  
save 300 10
save 60 10000
解释: 如果修改了一次数据库,900秒存储一下。如果修改了10次,300秒存储一次。如果修改了10000次,60秒存储一次。

在redis.conf中可以指定持久化文件存储的目录

dump.rdb这个文件

Rdb问题:
一旦redis非法关闭,那么会丢失最后一次持久化之后的数据。
如果数据不重要,则不必要关心。
如果数据不能允许丢失,那么要使用aof方式。


4.2 Aof方式:
aof方式是,修改一次数据库,就将操作的记录存储到aof持久化文件中。

开启aof持久化方式:
将redis.conf中的appendonly改为yes,即开启aof方式的持久化方案。

Aof文件存储的名称

在使用aof和rdb方式时,如果redis重启,则数据从aof文件加载。
实际项目中,aof也是要开启



5.redis集群(准备工作)
搭建ruby
1.安装ruby
[root@itheima bin2]# yum install ruby
[root@itheima bin2]# yum install rubygems

2.把gem文件上传到linux系统中

然后到这个目录下,安装ruby和redis接口
[root@itheima ~]# gem install redis-3.0.0.gem

3.把redis解压的文件夹里src目录下的redis-trib.rb这个文件,拷贝到redis安装目录下的redis-cluster这个文件夹下(这个文件夹需要自己创建)
1) 先去redis安装目录下把redis-cluster这个文件夹创建。
[root@itheima src]# cd /usr/local/redis19/
[root@itheima redis19]# mkdir redis-cluster

2) 接下来去redis解压缩src目录下,把redis-trib.rb拷贝到redis-cluster这个文件夹里
[root@itheima redis19]# cd /root/redis-3.0.0/src/
[root@itheima src]# cp redis-trib.rb /usr/local/redis19/redis-cluster

4.查看是否拷贝成功




6.搭建集群
搭建集群最少也得需要3台主机,如果每台主机再配置一台从机的话,则最少需要6台机器。(这里就用一台虚拟机,不同的主机也就是ip或者端口不同而已,改下各个的端口就可以模拟一下了)
端口设计如下:7001-7006

第一步:复制出一个7001机器
[root@itheima redis]# cp bin ./redis-cluster/7001 –r

第二步:如果存在持久化文件,则删除
[root@itheima 7001]# rm -rf appendonly.aof dump.rdb

第三步:设置集群参数,修改redis.conf文件 这段本来是注释掉的(用#),去掉#
,修改端口


第四步:复制出7002-7006机器
[root@itheima redis-cluster]# cp 7001/ 7002 -r
[root@itheima redis-cluster]# cp 7001/ 7003 -r
[root@itheima redis-cluster]# cp 7001/ 7004 -r
[root@itheima redis-cluster]# cp 7001/ 7005 -r
[root@itheima redis-cluster]# cp 7001/ 7006 –r

第五步:修改7002-7006机器的端口(重复第三步,挨个修改7002~7006里面的端口)

第七步:启动7001-7006这六台机器
创建一个脚本
[root@itheima redis-cluster]# vim start-all.sh


第八步:修改start-all.sh文件的权限,并且执行脚本
[root@itheima redis-cluster]# chmod u+x start-all.sh

[root@itheima redis-cluster]# ./start-all.sh

第九步:创建集群
[root@itheima redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.72.128:7001 192.168.72.128:7002 192.168.72.128:7003 192.168.72.128:7004 192.168.72.128:7005 192.168.72.128:7006
这里的ip地址,是你虚拟机的ip地址

第十步:连接集群
[root@itheima 7001]# ./redis-cli -h 192.168.242.137 -p 7001 –c

只要连接上了一个集群,所有的集群就都连接上了




7.jedis连接集群
7.1 设置防火墙
[root@itheima redis-cluster]# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7001 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7002 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7003 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7004 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7005 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7006 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7007 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

~

~

~

~

"/etc/sysconfig/iptables" 23L, 1146C 已写入

[root@itheima redis-cluster]# service iptables restart

iptables:清除防火墙规则: [确定]

iptables:将链设置为政策 ACCEPT:filter [确定]

iptables:正在卸载模块: [确定]

iptables:应用防火墙规则: [确定]

[root@itheima redis-cluster]#

7.2 代码

添加jar包





运行结果:



8.spring配置连接集群
思路:创建一个redis操作的接口。分别创建两个实现类对应redis 的单机版和集群版。当使用单机版redis时,配置单机版的实现类,当使用集群版本的时候,配置集群版的实现类。

测试类:


第一步:导入jedis的jar包
 <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
</dependency>


第二步:jedisClient接口
public interface JedisClient {
     String set(String key, String value);

     String get(String key);

     /**
      * hashmap设置值,map里面有一个名字key,然后里面是一个一个的键值对
      *
      * @param key
      *            map的名字
      * @param item
      *            键
      * @param value
      *            值
      */
     Long hset(String key, String item, String value);

     /**
      * hashmap取值
      */
     String hget(String key, String item);

     Long incr(String key);

     Long decr(String key);

     Long expire(String key, int second);

     Long ttl(String key);
}

单机版和集群版的两个实现类

1.单机版:
package com.taotao.rest.component.impl;

import org.springframework.beans.factory.annotation.Autowired;

import com.taotao.rest.component.JedisClient;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCommands;
import redis.clients.jedis.JedisPool;

public class JedisClientSingle implements JedisClient {

    @Autowired
    private JedisPool jedisPool;

    @Override
    public String set(String key, String value) {
        Jedis jedis = jedisPool.getResource();
        String result = jedis.set(key, value);
        return result;
    }

    @Override
    public String get(String key) {
        Jedis jedis = jedisPool.getResource();
        String result = jedis.get(key);
        return result;
    }

    @Override
    public Long hset(String key, String item, String value) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.hset(key, item, value);
        return result;
    }

    @Override
    public String hget(String key, String item) {
        Jedis jedis = jedisPool.getResource();
        String result = jedis.hget(key, item);
        return result;
    }

    @Override
    public Long incr(String key) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.incr(key);
        return result;
    }

    @Override
    public Long decr(String key) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.decr(key);
        return result;
    }

    @Override
    public Long expire(String key, int second) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.expire(key, second);
        return result;
    }

    @Override
    public Long ttl(String key) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.ttl(key);
        return result;
    }

}

2.集群版
package com.taotao.rest.component.impl;

import org.springframework.beans.factory.annotation.Autowired;

import com.taotao.rest.component.JedisClient;

import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;

public class JedisClientCluster implements JedisClient {

     @Autowired
     private JedisCluster cluster;

     @Override
     public String set(String key, String value) {
           return cluster.set(key, value);
     }

     @Override
     public String get(String key) {
           return cluster.get(key);
     }

     @Override
     public Long hset(String key, String item, String value) {
           return cluster.hset(key, item, value);
     }

     @Override
     public String hget(String key, String item) {
           return cluster.hget(key, item);
     }

     @Override
     public Long incr(String key) {
           return cluster.incr(key);
     }

     @Override
     public Long decr(String key) {
           return cluster.decr(key);
     }

     @Override
     public Long expire(String key, int second) {
           return cluster.expire(key, second);
     }

     @Override
     public Long ttl(String key) {
           return cluster.ttl(key);
     }
}


第二步:spring配置
<!-- 配置包扫描器,扫描@Service主键的类 -->
     <context:component-scan base-package="com.taotao.rest.service" />

     <!-- 配置连接池 -->
     <bean class="redis.clients.jedis.JedisPool" id="jedisPool">
           <constructor-arg name="host" value="192.168.72.128"></constructor-arg>
           <constructor-arg name="port" value="6379"></constructor-arg>
     </bean>

     <!-- 单机版redis -->
     <bean id="jedisClientSingle" class="com.taotao.rest.component.impl.JedisClientSingle" />

     <bean class="redis.clients.jedis.JedisCluster" id="jedisCluster">
           <constructor-arg>
                <set>
                     <bean class="redis.clients.jedis.HostAndPort">
                           <constructor-arg name="host" value="192.168.72.128"></constructor-arg>
                           <constructor-arg name="port" value="7001"></constructor-arg>
                     </bean>
                     <bean class="redis.clients.jedis.HostAndPort">
                           <constructor-arg name="host" value="192.168.72.128"></constructor-arg>
                           <constructor-arg name="port" value="7002"></constructor-arg>
                     </bean>
                     <bean class="redis.clients.jedis.HostAndPort">
                           <constructor-arg name="host" value="192.168.72.128"></constructor-arg>
                           <constructor-arg name="port" value="7003"></constructor-arg>
                     </bean>
                     <bean class="redis.clients.jedis.HostAndPort">
                           <constructor-arg name="host" value="192.168.72.128"></constructor-arg>
                           <constructor-arg name="port" value="7004"></constructor-arg>
                     </bean>
                     <bean class="redis.clients.jedis.HostAndPort">
                           <constructor-arg name="host" value="192.168.72.128"></constructor-arg>
                           <constructor-arg name="port" value="7005"></constructor-arg>
                     </bean>
                     <bean class="redis.clients.jedis.HostAndPort">
                           <constructor-arg name="host" value="192.168.72.128"></constructor-arg>
                           <constructor-arg name="port" value="7006"></constructor-arg>
                     </bean>
                </set>
           </constructor-arg>
     </bean>

     <bean class="com.taotao.rest.component.impl.JedisClientCluster"
           id="jedisClientCluster" />
上面是单机版和集群版都配置了,项目使用哪个,就把另一个配置注释掉即可

测试代码:
   @Test
     public void springJedis(){
           ApplicationContext applicationContext = new

                     ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
           JedisClient jedis = applicationContext.getBean(JedisClient.class);
           jedis.set("client", "111111");
           String result = jedis.get("client");
           System.out.println("result: " + result);
     }

以上
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。
### 内容概要 这份《计算机试卷1》包含多个部分,主要覆盖了计算机基础知识、操作系统应用、文字处理、电子表格、演示文稿制作、互联网应用以及计算机多媒体技术。试卷以单选题开始,涉及计算机历史、基本概念、硬件组成、软件系统、网络协议等。接着是操作应用部分,要求考生在给定的软件环境中完成一系列具体的计算机操作任务。 ### 适用人群 本试卷适用于计算机科学与技术、信息技术相关专业的学生,以及准备计算机水平考试或职业资格认证的人士。它适合那些希望检验和提升自己计算机操作能力的学习者,也适用于教育工作者作为教学评估工具。 ### 使用场景及目标 1. **学习评估**:作为教育机构的课程评估工具,帮助教师了解学生对计算机基础知识的掌握程度。 2. **自学检验**:供个人自学者检验自己的计算机操作技能和理论知识,为进一步学习提供方向。 3. **职业发展**:为职场人士提供计算机技能的自我提升途径,增强其在信息时代的竞争力。 4. **考试准备**:为准备计算机相关考试的考生提供实战演练的机会,加强考试自信。 5. **教学资源**:教师可以将其作为教学资源,设计课程和实验,提高教学效果。 试卷的目标是通过理论知识的测试和实践技能的操作,全面提升考生的计算机应用能力。考生应掌握从基础的计算机组成原理到复杂的数据处理、演示文稿制作、网络应用以及多媒体技术处理等多方面技能。通过本试卷的学习与练习,考生将能够更加熟练地使用计算机解决实际问题,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值