缓存这块一直是大并发的一个重要模块。Redis是一个开源高性能K/V存储系统,key可包含多种数据结构,而且还支持持久化等功能,是近几年迅速成长起来的用于缓存的系统,大有超越Memcached之势。Redis在很多地方更优于Memcached。
不过这两个网上比较的已经很多,目前各有优点吧。 下面介绍下Redis的环境搭建,十分简单,只需要几个步骤即可。
环境搭建
首先获取redis并编译
$ wget http://redis.googlecode.com/files/redis-2.6.10.tar.gz
$ tar xzf redis-2.6.10.tar.gz
$ cd redis-2.6.10
$ make
下面修改redis.conf配置文件(修改前先备份一下),文件中个配置已经有详细的注释了,这里将后台运行模式修改为yes
$ cp redis.conf etc/redis.conf
#修改daemonize 为yes
daemonize yes
运行Redis:
$ src/redis-server etc/redis.conf
这样一个最基本的redis单例server就运行起来了,可以使用内置的客户端连接测试下redis服务
$ src/redis-cli redis> set foo bar OK redis> get foo "bar"
可以设置下redis开机启动
vi /etc/rc.d/rc.local
#添加自定义的运行程序,**表示路径
**/src/redis-server **/etc/redis.conf
不过Redis强大的还是他支持分布式架构,不能只有一个server实例啦,要不服务器宕机了咋办。一个master可配置多个slave,Redis的复制都是后台自动化的,很多特性都很智能了。配置也十分简单:
slaveof 192.168.1.1 6379
Java客户端Jedis
上面说了服务端的redis环境配置,这里介绍下redis的java客户端jedis的使用。
jedis已经是一个比较成熟的产品。要使用jedis需要依赖jedis包和一个apache的common包,可以去jedis的github上下载jedis。最简单的还是直接在maven项目中引入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.1.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
多线程的环境里需要使用jedis的连接池。
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
后面的操作就比较简单了
Jedis jedis = pool.getResource();
try {
/// ... do stuff here ... for example
jedis.set("foo", "bar");
String foobar = jedis.get("foo");
jedis.zadd("sose", 0, "car");
jedis.zadd("sose", 0, "bike");
Set<String> sose = jedis.zrange("sose", 0, -1);
} finally {
/// ... it's important to return the Jedis instance to the pool once you've finished using it
pool.returnResource(jedis);
}
/// ... when closing your application:
pool.destroy();
redis主要是为了分布式构建的,所以一般我们都会有好几个redis的server实例,jedis使用的时候也要设置下master和slave的,这样slave的作用才能出来。
jedis.slaveOf("localhost", 6379);
Redis的使用十分容易入手,而且大数据量下性能也能保证。更多的Redis数据类型可以见 《Redis数据类型》