为了账号安全,请及时绑定邮箱和手机立即绑定

《Redis系列专题》之 20分钟快速了解Redis

标签:
Java Linux WebApp

作者: 常明,Java架构师
[请尊重原创,盗版必究,转载请指明出处]


图片描述

Redis可以说是目前最火爆的NoSQL数据库!

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

Redis是基于内存的数据结构存储开源系统,采用C语言编写,运行效率极高。可作为内存数据库、缓存或消息代理中间件,前两种情况实际当中使用更多些。

Redis与Memcached一样,以<key,value>二元键值对的形式存储数据,但与Memcached最大的不同在于Redis支持更多的数据类型,包括String、Hash、List、Set、Sorted Set等。

Redis目前发展很快,当前版本是3,其官方网址是:http://redis.io/ 源码地址:https://github.com/antirez/redis

由于采用ANSI C编写,Redis官方支持POSIX类型系统如linux等,Windows环境下有第三方的移植程序,但一般只做开发调试用,真正部署还是运行在linux系统上,才能发挥其威力。
q
下面我们就在CentOS 6上进行安装部署,具体步骤如下:

1.wget http://download.redis.io/releases/redis-3.0.5.tar.gz
这是当前的最新版本,可以到官网下载页面查看最新版本或安装以前的版本。

2.tar xzf redis-3.0.5.tar.gz 解压后,cd redis-3.0.5 到Redis主目录

3.make 编译,注意可能会出现机器上缺少依赖包的提示,按提示安装依赖包,直到make成功。

4.make test 运行测试,一路显示ok通过(需要安装TCL依赖包,见提示)。
q1
这时在src目录下会多出几个可执行程序,其中redis-server是服务主程序。我们运行redis-server --help看看有哪些参数:
q2

  1. ./src/redis-server & 后台启动Redis,会显示成功画面,但会有三个警告提示。redis的提示很详细,我们照着做修改即可。

echo 511 > /proc/sys/net/core/somaxconn
vim /etc/sysctl.conf 加入vm.overcommit_memory = 1
vim /etc/rc.local 加入 echo never > /sys/kernel/mm/transparent_hugepage/enabled

后两个重启生效。再次运行redis-server命令,只存在一个没有指定config文件使用缺省配置的警告。启动画面如下:
q3
我们看到,服务已启动,监听的端口号是6379

  1. ./src/redis-cli 运行提供的客户端程序,体验下简单操作命令。
    q4
    redis所有支持命令在 http://redis.io/commands 上可以查到。

  2. ./redis-cli shutdown 关闭redis服务。

  3. make install 将redis命令安装到bin目录下,成为系统命令。
    q5
    前面我们启动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的请求,安全考虑,缺省不限制。

tcp-keepalive 60 主动检测客户端连接是否正常,官方建议是60s

loglevel notice 定义日志级别
logfile "" 定义日志文件位置

save 900 1 存储数据到硬盘策略,这条定义的是900s内如有1个key值发生变化,就执行save存数据快照到硬盘操作。

dbfilename dump.rdb 指定数据快照文件名
dir ./ 指定数据快照文件目录

调整好参数后,我们用redis-server /etc/redis.conf 命令启动即可。
q6
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>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.10</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>${spring.version}</version>
  <scope>test</scope>
</dependency>
  1. spring配置xml文件配置Jedis连接服务器相关参数.
<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 index="1" value="127.0.0.1"/>  
  <constructor-arg index="2" value="6379" type="int"/> 
</bean>
  1. 编写测试代码:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-test.xml")
public class RedisTest extends AbstractJUnit4SpringContextTests {

  @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下JUnit Test运行单元测试通过!
q7


本文出自慕课网,转载请注明出处,侵权必究。
点击查看更多内容
56人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
455
获赞与收藏
3117

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消