java缓存(5、redis)

概述

       redis是第三方分布式缓存,采用单线程进行操作数据,支持很多功能。


功能介绍

       支持简单的事务,redis的事务的机制非常的简单,其主要作用就是保证,一个client的一个事务内的指令的连续性,在这个事务执行的过程中,其它客户端的指令不能让其中断,不支持回滚,注意,对于分布式的redis不支持事务,因为没有提供分布式事务的支持。

       支持集群,redis支持主从复制方式的集群,实现数据备份的功能。

       支持分布式,严格来说redis不支持,因为,其分布式是让客户端进程实现的,和memcached的分布式类似。

       支持多种数据类型存储,支持list,set等数据类型的存储。

       支持异步方式的处理,即管道模式操作。


分布式集群

       java缓存(5、redis)_第1张图片

       核心配置(redis.conf)

    bind 192.168.24.131    #绑定的主机地址
    port 10000             #Redis监听端口,默认端口为6379
    databases 17           #设置数据数量,默认为16
    timeout 300            #客户端闲置多长时间后关闭连接,0:关闭该功能
    maxclients 128         #同一时间最大客户端连接数,默认无限制

    #安全性:设置客户端连接后进行任何操作前的密码,默认无
    requirepass password   #较好服务器,用户1s可进行150k次密码尝试,所以,密码要强大

    #主从复制:从服务器配置,主服务器不需配置
    slaveof 192.168.24.131 10000

       核心代码

package com.tgb.test;

import java.util.ArrayList;
import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPipeline;
import redis.clients.jedis.ShardedJedisPool;

public class MyJedis3 {
	private ShardedJedis shardedJedis;
	@Before
	public void before(){
		List<JedisShardInfo> listJedisShardInfo = new ArrayList<JedisShardInfo>();
		JedisShardInfo jedisShardInfo1 = new JedisShardInfo("127.0.0.1",10001);
		JedisShardInfo jedisShardInfo2 = new JedisShardInfo("127.0.0.1",10002);
//		jedisShardInfo1.setPassword("");
		listJedisShardInfo.add(jedisShardInfo1);
		listJedisShardInfo.add(jedisShardInfo2);

		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
		jedisPoolConfig.setMaxIdle(500);
                jedisPoolConfig.setMaxWaitMillis(100000); //最长等待时间
                jedisPoolConfig.setTestOnBorrow(false);
		ShardedJedisPool shardedJedisPool = new ShardedJedisPool(jedisPoolConfig,listJedisShardInfo);
		shardedJedis = shardedJedisPool.getResource();
	}

	@After
	public void after(){
		shardedJedis.disconnect();
	}
	
	@Test
	public void write(){
		for(int i=0; i<10000;i++){
			shardedJedis.set("name"+i, "value"+i);
		}
	}
	@Test
	public void read(){
		System.out.println(shardedJedis.get("name1"));
	}
	
	@Test
	public void write2(){
		ShardedJedisPipeline shardedJedisPipeline = shardedJedis.pipelined();
		
		for(int i=0; i<10000;i++){
			shardedJedisPipeline.set("name2"+i, "value2"+i);
		}
		List<Object> results = shardedJedisPipeline.syncAndReturnAll();
	}
	
	@Test
	public void read2(){
		System.out.println(shardedJedis.get("name29001"));
	}
}

总结

       根据redis的特性,我们可以做其他方面的功能,如:redis的单线程操作数据的特性,我们可以实现应用程序id的生成,等等,其它方面的内容,大家下去可以查一下资料。

你可能感兴趣的:(java缓存(5、redis))