Nosql&Redis

1.什么是Nosql

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是~~SQL”,~~它泛指非关系型的数据库。

关系型数据库:以关系(由行和列组成二维表)来建模的数据库.

2.Redis

2.1什么是Redis

Redis 是一个高性能的开源的、C语言写的Nosql(非关系型数据库),数据保存在内存中。

Redis 是以key-value形式存储的Nosql,和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

2.2Redis优点

1.数据保存在内存,存取速度快,并发能力强

2.它支持存储的value类型相对memcached更多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)。

3.redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库(如MySQL)起到很好的补充作用。

4.它提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。

5.Redis支持集群(主从同步)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。

6.支持持久化,可以将数据保存在硬盘的文件中

7.支持订阅/发布(subscribe/publish)功能 QQ群

3mysql,redis,memcached的比较

|               | mysql |   redis | memcached |

|   类型     | 关系型 | 非关系型 | 非关系型 |

| 存储位置 | 磁盘  | 磁盘和内存 | 内存 |

| 存储过期 | 不支持 | 支持 | 支持 |

| 读写性能 | 低 | 非常高 | 非常高 |

Memcached和Redis的相同点和不同点? Memcached?

相同点:都是key-value类型Nosql,都存放数据到内存中,读写效率高,而且都支持存储过期.

不同点:1.redis相较于Memcached还支持持久化到磁盘,数据安全更高;2.redis相较于Memcached支持value类型更多.

4Redis的简单使用

1安装软件

官网: [http://redis.io/download](http://redis.io/download,可以去上面下载最新的安装程序下来)

2使用redis的server和client操作在此不再赘述

 5.java操作redis

 5.1创建普通的maven项目

在这里我引入jar包,不依赖maven坐标导入jar包;在这需要jedis和pool的jar:jedis-2.5.2.jar,commons-pool2-2.2.jar。

测试代码:

1简单的get,set

  @Test  
    public void testSet(){

        Jedis jedis = new Jedis("localhost");  
        jedis.set("name", "别黄昏");  
        jedis.close();

    }  
    @Test  
    public void testGet(){  
        Jedis jedis = new Jedis("localhost");  
        System.out.println(jedis.get("name"));  
        jedis.close();

    }  

2.通过连接池进行操作

@Test  
    public void testPoolSet(){  
        //获取连接池配置对象  
        JedisPoolConfig config = new JedisPoolConfig();  
        //配置  
        //高峰时最大连接数  
        config.setMaxTotal(20);  
        //空闲时最大连接数  
        config.setMaxIdle(5);  
        //最长等待时间  
        config.setMaxWaitMillis(3*1000);  
        //获取连接池  
        JedisPool jedisPool = new JedisPool(config, "localhost");  
        //获取连接对象  
        Jedis jedis = jedisPool.getResource();  
        jedis.set("name", "别黄昏");  
        jedis.close();  
        jedisPool.destroy();

    }  

抽取的简单的工具类

public enum JedisUtils {  
    INSTANCE;

    public static JedisPool jedisPool;

     static {  
         //获取连接池配置对象  
         JedisPoolConfig config = new JedisPoolConfig();  
         //配置  
         //高峰时最大连接数  
         config.setMaxTotal(20);  
         //空闲时最大连接数  
         config.setMaxIdle(5);  
         //最长等待时间  
         config.setMaxWaitMillis(3*1000);  
         //测试是否连接通  
         config.setTestOnBorrow(true);  
         //获取连接池  
         jedisPool = new JedisPool(config, "localhost");

    }  
    //获取连接  
    public Jedis getJedis(){  
        return jedisPool.getResource();  
    }

}  

5.2jedis数据结构操作

1.操作key

@Test  
    public void testStringKey(){

        Jedis jedis = JedisUtils.INSTANCE.getJedis();  
        //清空当前数据库  
        jedis.flushDB();  
        System.out.println(jedis.get("name"));  
        jedis.set("age", "18");  
        jedis.set("sex", "男");  
        System.out.println(jedis.keys(("*")));  
        //删除某个建  
        jedis.del("age");  
        System.out.println(jedis.keys(("*")));  
        jedis.close();  
    }  

2.List操作

@Test  
    public void testlist(){

        Jedis jedis = JedisUtils.INSTANCE.getJedis();  
        //清空当前数据库  
        jedis.flushDB();  
       //添加一个list  
        jedis.lpush("teacher","波多","小仓","小泽");  
        System.out.println(jedis.lrange("teacher", 0, -1));

        jedis.lpush("num","5","3","8");  
        System.out.println(jedis.sort("num"));  
        SortingParams sortingParams = new SortingParams();  
        sortingParams.desc();  
        System.out.println(jedis.sort("num",sortingParams));  
        jedis.close();  
    }  

6.redis中的持久化配置

持久化策略分为rdb和aof

6.1rdb模式

RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式.

如何关闭 rdb 模式:

save ""

\# save 900 1        //至少在900秒的时间段内至少有一次改变存储同步一次

\# save xxx

\# save 60 10000

6.2aof追加模式

AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。

如何开启aof模式:

appendonly yes         //yes 开启,no 关闭

\# appendfsync always //每次有新命令时就执行一次fsync

#这里我们启用 everysec

appendfsync everysec //每秒 fsync 一次

\# appendfsync no      //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)

其它的参数请大家看redis.conf配置文件详解

7.redis的淘汰策略

淘汰一些数据,达到redis数据都是有效的。选择合适的淘汰策略进行淘汰。

volatile-lru:从已设置过期时间的数据集(server.db\[i\].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db\[i\].expires)中挑选将要过期的数据淘汰

volatile-random~~:从已设置过期时间的数据集(server.db\[i\].expires~~~~)中任意选择数据淘汰~~

allkeys-lru:从数据集(server.db\[i\].dict)中挑选最近最少使用的数据淘汰

allkeys-random~~:从数据集(server.db\[i\].dict~~~~)中任意选择数据淘汰~~

no-enviction~~(驱逐):禁止驱逐数据~~

redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。

当redis存放的数据到达配置的最大内容后,会按照配置淘汰策略进行淘汰.

转载于:https://my.oschina.net/u/4107793/blog/3042482

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值