20分钟快速了解redis

Redis可以说是目前最火爆的NoSQL数据库! 过去几年,Memcached很盛行,现在有很多公司已将Memcached替换成了Redis。当然,很多人替换并不清楚为什么,只是感觉不想让主流抛弃,这也充分反映了目前Redis的强势。 

Redis是基于内存的数据结构存储开源系统,采用C语言编写,运行效率极高。可作为内存数据库、缓存或消息代理中间件,前两种情况实际当中使用更多些。 Redis与Memcached一样,以二元键值对的形式存储数据,但与Memcached最大的不同在于Redis支持更多的数据类型,包括String、Hash、List、Set、Sorted Set等。 

Redis目前发展很快,当前版本是3.2.3,其官方网址是:http://redis.io/ 源码地址:https://github.com/antirez/redis 由于采用ANSI C编写,Redis官方支持POSIX类型系统如linux等,Windows环境下有第三方的移植程序,但一般只做开发调试用,真正部署还是运行在linux系统上,才能发挥其威力。

redis的安装部署

下面我们就在ubuntu14上进行安装部署,具体步骤如下: 
1.wget http://download.redis.io/releases/redis-3.2.3.tar.gz 这是当前的最新版本,可以到官网下载页面查看最新版本或安装以前的版本。 
2.tar xzf redis-3.2.3.tar.gz 解压后,cd redis-3.2.3到Redis主目录 
3.make 编译,注意可能会出现机器上缺少依赖包的提示,按提示安装依赖包,直到make成功。 
4.make test 运行测试,一路显示ok通过(需要安装TCL依赖包,见提示)。

这时在src目录下会多出几个可执行程序,其中redis-server是服务主程序。我们运行redis-server --help看看有哪些参数:

./src/redis-server & 后台启动Redis,会显示成功画面,但会有三个警告提示。redis的提示很详细,我们照着做修改即可。 
sudo  echo 511 > /proc/sys/net/core/somaxconn (这个命令如果提示没有权限可以切换到root用户执行)
sudo vim /etc/sysctl.conf 加入vm.overcommit_memory = 1 
sudo vim /etc/rc.local 加入 echo never > /sys/kernel/mm/transparent_hugepage/enabled 后两个重启生效。
次运行redis-server命令,只存在一个没有指定config文件使用缺省配置的警告。启动画面如下:


可以看到,服务已经启动,默认监听6379端口

运行./redis-cli命令,启动客户端程序,输入几个命令体验一下:

redis所有支持命令在http://redis.io/commands上可以查到。 
./redis-cli shutdown 关闭redis服务。 
make install 将redis命令安装到bin目录下,成为系统命令。

配置参数

前面我们启动redis,没有指定配置文件,一般情况下,我们需要指定配置文件启动。
在redis主目录下,有个redis.conf配置文件模板。 cp redis.conf /etc 复制到etc目录下。 
redis.conf文件里的配置参数有详细的解释说明,下面是几个常用参数: 
daemonize 缺省是no, 一般使用改为yes,这样启动redis-server时自动是后台运行方式。 
port 6379 指定端口号,可以调整自己需要的端口值。 
tcp-backlog 511 这个值就是前面需要调整somaxconn值的原因,它涉及到TCP连接时accept queue队列的大小,是取它们的最小值。 个参数和redis高并发处理请求密切相关,根据实际运行情况调整。 
bind 只接受来自某IP的请求
需要注意的是从3.2版本开始默认只能本机登陆,并且加了一个 protected-mode 参数,这个参数默认为yes,需要改成no才能远程登陆,否则即使绑定了远程ip也无法连接
 
tcp-keepalive 60 主动检测客户端连接是否正常,官方建议是60s 
loglevel notice 定义日志级别 
logfile "" 定义日志文件位置 
save 900 1 存储数据到硬盘策略,这条定义的是900s内如有1个key值发生变化,就执行save存数据快照到硬盘操作。 
dbfilename dump.rdb 指定数据快照文件名 
dir ./ 指定数据快照文件目录 
调整好参数后,我们用redis-server /etc/redis.conf 命令启动即可。

java程序访问redis

Redis支持的客户端操作语言非常丰富,达到40多种。就Java来说,也有很多访问驱动实现,我们最常用的还是Jedis。 
Jedis源码地址:https://github.com/xetorthio/jedis活跃度很高,能够跟上Redis服务端发布的最新功能,而且使用简单,基本和Redis命令行语法相似。 下面我们就在spring工程下简单使用下Jedis:
1 在pom.xml中配置Jedis和单元测试jar包。
 <dependency>
  	<groupId>redis.clients</groupId>
  	<artifactId>jedis</artifactId>
  	<version>2.7.2</version>
  </dependency>
  
  <dependency>
  	<groupId>org.springframework</groupId>
  	<artifactId>spring-test</artifactId>
  	<version>4.2.0.RELEASE</version>
  	<scope>test</scope>
  </dependency>
  
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
2 配置spring的xml文件,配置连接参数和需要用到的bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
	<property name="maxTotal" value="4096"/>
	<property name="maxIdle" value="200"/>
	<property name="maxWaitMillis" value="3000"/>
	<property name="testOnBorrow" value="true" />
	<property name="testOnReturn" value="true" />
</bean>

<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
	<constructor-arg index="0" ref="poolConfig"></constructor-arg>
	<constructor-arg index="1" value="192.168.1.131"></constructor-arg>
	<constructor-arg index="2" value="6379" type="int"></constructor-arg>
</bean>

</beans>

3 编写测试代码
package com.hu;

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import redis.clients.jedis.*;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-test.xml")
public class RedisTest {
	@Autowired
	private JedisPool jedisPool;
	
	@Test
	public void basicOpTest(){
		Jedis jedis = jedisPool.getResource();
		jedis.set("person.001.name", "frank");
		jedis.set("person.001.city", "Beijing");
		
		String name = jedis.get("person.001.name");
		String city = jedis.get("person.001.city");
		
		assertEquals("frank", name);
		assertEquals("Beijing", city);
		
		jedis.del("person.001.name");
		Boolean result = jedis.exists("person.001.name");
		assertEquals(false, result);
		
		result = jedis.exists("person.001.city");
		assertEquals(true, result);
		
		jedis.close();
	}
}

在eclipse下测试通过。
原文地址:http://www.imooc.com/article/3585

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值