Free HTML5 by FreeHTMl5.co 2017-07-19 11:18:00

redis知识点总结

-------------------------------------我是一条正文分割线-------------------------------------

公司项目需要用到redis、dubbo分布式开发、还有zdal分库分表。这段时间一直在学习相关框架、技术。这里先把redis相关知识点总结先放上来。

Redis知识点总结(未完)

1、 NoSQL

NoSQL 又名not only sql。是一个非关系型数据库。Web2.0比Web1.0多了很多的互动。
传统数据库很难横向发展的,很难进行数据库的扩展。
Web2.0,
需求一:高并发读写。动态页面静态化的技术很难使用关系型数据库实现,
需求二:对海量数据的高效率存储和访问的需求。
需求三:高可扩展和高可用性

2、 NoSQL四大分类

2.1 键值对存储—Redis
2.2 列存储—hbase
2.3 文档数据库—mongoDB-查询性能不高,缺少统一的查询规则
2.4 图形数据库—infoGrid


3、 NoSQL的特点

3.1 易扩展
3.2 灵活的数据模型
3.3 大数据量、高性能
3.4 高可用


4、Redis安装

4.1 所需要环境、安装

VM、Linux系统 gcc环境  yum install gcc-c++   然后去官网下载redis安装包,解压后先make一下,然后make PREFIX=/usr/local/redis install

4.2 配置conf文件

拷贝redis.conf文件到安装路径下,vi将倒数的no改为yes。详细配置如下。

4.3 启动以及关闭

 ./bin/redis-server ./redis.conf     
 ./bin/redis-cli shutdown

5、 Redis特性

5.2 多数据库

A、使用select _数字选择对应数据库,最多到15
B、使用move key名称 数据库数据 (select myredis1 1)把keymyredis1移动到1号数据库

5.2 Redis事务

使用三个指令Multi  exec  discard开始redis事务
1、  使用multi开启事务 -----相当于是关系型数据库中的begin
2、  使用exec提交失误 ------相当于commit
3、  使用discard回滚    -----相当于rollback
同关系型数据库不同之处在于,redis事务开启后运行出错,

6、redis持久化

    Redis高效的原因在于它的数据存储在内存中,为了保证开关服务器时数据不丢失,需要将内存中的数据存储到磁盘中,这个过程叫做redis的持久化。持久化的方式有两种,可以一种单独使用,也能两种结合使用,现在大部分使用为两者结合使用。

6.1 RDB方式

A、默认支持,不需要进行配置
B、RDP指,在指定的时间间隔内,将内存中的数据集快照,写入到磁盘中。

优势:{
    1、采用这种方式,整个redis数据库,只包含一个文件,方便备份以及恢复数据
    2、在开始持久化时,只需要分叉处进程,可以由分线程执行
}   

缺点:{    
    1、  无法保证数据的高性能利用性
}

实现:

在redis.conf中存在
1、Save 900 1
2、Save 300 10
3、Save 60 1000
1----分别表示每十五分钟有一个key值发生变化时,执行一次
2----分别表示每五分钟有十个key值发生变化时,执行一次
3----分别表示每一分钟有千个key值发生变化时,执行一次
FilenameDB-----表示数据库名称
Dir ./   ------表示保存在当前路径下

6.2 AOF方式

AOF指、以日志的形式,记录服务器所处理的每一个操作,在redis服务器启启动时,它会读取该文件,重新构建数据库,以保证数据的完整性。

优势:{
    1、  更高的数据安全性、利用性每秒同步(效率不错,但是不够安全)、每次修改同步(同步持久化,效率比较低)、无持久化
    2、可以根据文件重建数据库

缺点:{
    1、AOF运行效率上低于rdb
}

在redis.conf中
appendonly no-----默认不打开,为no,改为yes打开,这个时候会产生一个appendonly.aof文件

同步策略
Appendfsync 【always everysec no】【每修改一次 每秒同步 无持久化】
改完以后需要重启redis服务器生效

6.3 无持久化

    这时,redis就是一个缓存的机制,需要在conf配置文件中禁用持久化

6.4 RDB和AOF结合的方式

    按照上述配置AOF和RDB同时配置即可,现在大部分的redis使用为两则结合的方式。被当做缓存使用。

7、使用java操控redis

使用java操控redis数据库需要加载jedis.jar包。

步骤如下:
1、开启redis服务器
2、利用jedis连接池连接服务器
3、使用jedis连接池获取jedis对象
4、通过jedis对象获取tx事务对象
5、通过事务对象tx操控数据库
6、事务提交或回滚
7、关闭连接

//Maven相关配置
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
//实现代码如下

 //配置参数
        String redisAddress = "127.0.0.1";
        int redisPort = 6379;
        int redisTimeout = 2000;
        //配置连接池,连接对象,其中jedisPoolConfig对象可以操控连接的空闲时间、连接个数等等,这里采用默认方式
        JedisPool pool = new JedisPool(new JedisPoolConfig(), redisAddress, redisPort, redisTimeout);

        Jedis jedis = null;
        Transaction tx = null;//事务
        try {
            //使用连接池获取jedis对象
            jedis = pool.getResource();
            //开启连接池事务
            tx = jedis.multi();
            //使用事务对象操控redis服务器库

            //。。。。。。省略业务操作。。。。。。。。
            //。。。。。。省略业务操作。。。。。。。。
            //。。。。。。省略业务操作。。。。。。。。

            //事务提交
            tx.exec();
        }catch (Exception e)
        {   
            //如果异常信息,事务回滚
            tx.discard();
            e.printStackTrace();
        } finally {
            if (jedis != null)
                jedis.close();
            if (pool != null)
                pool.close();
        }