Redis总结

来源:互联网 发布:windows正版镜像 编辑:程序博客网 时间:2024/05/22 06:11

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

    Redis是一个Key-Value存储系统。它支持存储的value类型相对更多,包括String、List、Set、zset(sorted set 有序集合)和Hash。这些数据类型都支持push/pop、add/remove及取交集和差集及更丰富的操作,而且这些操作都是原子性的。

    Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。
    

    Redis的优势:

    ⑴速度快:使用标准C写的,所有数据都在内存中完成。

    ⑵持久化:对数据的更新采用copy-on-write技术,可以异步地保存到磁盘上,主要有两种策略,一是根据时间,更次次数的快照,二是基于语句追加方式。

    ⑶自动操作:对不同数据类型的操作都是自动的,很安全。

    ⑷快速的主从复制

    ⑸Sharding技术:很容易将数据分布到多个Redis实例中,实现数据库的扩展。Sharding技术把负载分布到多个特定节点上去的横向扩展方式。

    

    Redis小结:

    ⑴提高了DB的可扩展性,只需要将新加的数据放到新加的服务器上就可以了。

    ⑵提高了DB的可用性,只影响到需要访问的Shared服务器上的数据的用户。

    ⑶提高了DB的可维护性,对系统的升级和配置可以按shard一个个来搞,对服务器产生影响较小。

    ⑷查询更快,性能更好。

    

    Redis和Memcached的区别:

    ⑴网络IO模型方面:Memcached是多线程,分为监听线程、worker线程,引入锁,带来了性能消耗。Redis使用单线程的IO复用模型,将速度优势发挥到最大,也提供了较简单的计算功能。

    ⑵内存管理方面:Memcached使用预分配的内存池的方式,带来一定程度的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除。而Redis使用现场申请内存的方式来存储数据,不会剔除任何非临时数据。

    ⑶数据一致性方面:Memcached提供了cas命令来保证。而Redis提供了事物的功能,可以保证一串命令的原子性,中间不会被任何操作打断。

    ⑷存储方式方面:Memcached只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能。

    

    Jedis是redis的Java版本的客户端实现。

    启动redis:


    

    private Jedisjedis;//非切片额客户端连接

    private JedisPooljedisPool;//非切片连接池

    private ShardedJedisshardedJedis;//切片额客户端连接

    private ShardedJedisPoolshardedJedisPool;//切片连接池

 

//初始化非切片池

JedisPoolConfigconfig =new JedisPoolConfig();

config.setMaxActive(20);//控制pool分配20个jedis实例,如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhaused。可通过pool.getResource()来获取这个pool控制多少个jedis实例。

config.setMaxIdle(5);//一个pool最多有多少个状态为idle的jedis实例。

config.setMaxWait(10001);//表示当引入一个jedis实例时,最大的等待时间,如果超过等待时间,则直接跑出JedisConnectionException

Config.setTestOnBorrow(false);//在引入一个jedis实例时,是否提前进行validate操作,如果为true,则得到的jedis实例均是可用的。

JedisPooljedisPool =newJedisPool(config,"127.0.0.1",6379);//构建redis连接池

 

 /**

     * 初始化切片池

     */

    public void initialShardedPool() {

        // 池基本配置

     JedisPoolConfig config= newJedisPoolConfig();

       config.setMaxActive(20);

        config.setMaxIdle(5);

       config.setMaxWait(1000l);

       config.setTestOnBorrow(false);

        // slave链接

       List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();

        shards.add(new JedisShardInfo("127.0.0.1", 6379,"master"));

        // 构造池

      shardedJedisPool = newShardedJedisPool(config, shards);

    }

0 0