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系统上,才能发挥其威力。

Redis的安装部署R

下面我们就在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依赖包,见提示)。

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

5. ./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文件使用缺省配置的警告。启动画面如下:

我们看到,服务已启动,监听的端口号是6379

6. ./src/redis-cli 运行提供的客户端程序,体验下简单操作命令。

redis所有支持命令在 http://redis.io/commands 上可以查到。

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

8. make install 将redis命令安装到bin目录下,成为系统命令。

Redis配置参数

前面我们启动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 命令启动即可。

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>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>

2. 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>

3. 编写测试代码:

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

读完本篇,你应该了解如下内容:

1.Redis是基于内存的数据存储系统,数据以<key,value>形式存储。value支持多种数据类型,包括String、Hash、List、Set、Sorted Set等。

2.Redis采用C语言开发,安装运行在linux等POSIX系统上,windows系统上有第三方移植,可做开发测试。

3.Java常用的Redis客户端编程驱动是Jedis。

本文摘自微信号:Java架构师

20分钟快速了解Redis的更多相关文章

  1. React-redux及异步获取数据20分钟快速入门

    一, 写在前面 1. 前面我写过一个vuex10分钟入门 传送门 2. React-redux网上有好多文档,又臭又长,明明很简单的问题,硬是让新人更晕了~, 我写这个文章的目的是让新人在20分钟之内 ...

  2. 10分钟快速入门Redis

    Redis安装 来源:https://github.com/jaywcjlove/handbook 官方编译安装 $ wget http://download.redis.io/releases/re ...

  3. Redis数据类型简介(十分钟快速学习Redis)

    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...

  4. 不懂Git,别说自己是程序猿–20分钟git快速上手(转)

    在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是的,只要20分钟, 让你快速用上git. 我们 ...

  5. Hawk: 20分钟无编程抓取大众点评17万数据

    1. 主角出场:Hawk介绍 Hawk是沙漠之鹰开发的一款数据抓取和清洗工具,目前已经在Github开源.详细介绍可参考:http://www.cnblogs.com/buptzym/p/545419 ...

  6. [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器

    [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器   Redis相信玩开源,大数据的朋友们并不陌生,大家最熟悉的使用者就是新浪微博,微博的整体数据缓存都是 ...

  7. Vue.js——60分钟快速入门(转)

    vue:Vue.js——60分钟快速入门 <!doctype html> <html lang="en"> <head> <meta ch ...

  8. 20分钟打造你的Bootstrap站点

    来源:http://www.w3cplus.com/css/twitter-bootstrap-tutorial.html 特别声明:此篇文章由白牙根据Leon Revill的英文文章原名<Tw ...

  9. 20分钟成功编写bootstrap响应式页面 就这么简单

    最近发现一个叫 Bootstrap 的好东西,Bootstrap 是现在最流行的响应式 CSS 框架,它以移动设备优先,能够快速适应不同设备.使用它编写响应式页面快捷.方便,而且屏蔽了浏览器差异.使用 ...

随机推荐

  1. javascript组成概述认识

    这里的JavaScript组成概述是说的在浏览器端渲染的JavaScript而不是nodejs js组成概述 js的完整实现是由ECMAscript.DOM.BOM三个部分组成的: -ECMAscri ...

  2. DES加密解密与AES加密解密

    随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了之后渐渐就陌生了.所以在这里写一些日后可能会用到的加密与解密. 一.AES加密算法和DES加 ...

  3. java实现多叉树查找

    package tree; import java.util.List; import java.util.ArrayList; import java.io.Serializable; public ...

  4. Bootstrap学习-排版

    1.标题 <h1>~<h6>,所有标题的行高都是1.1(也就是font-size的1.1倍). 2.副标题 <small>,行高都是1,灰色(#999) <h ...

  5. 476. Number Complement

    题目 Given a positive integer, output its complement number. The complement strategy is to flip the bi ...

  6. Servlet 学习简介

    一.Servlet简介 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的 ...

  7. 《C++之那些年踩过的坑(二)》

    C++之那些年踩过的坑(二) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. 今天讲一个小点,虽然小,但如果没有 ...

  8. TypeScript设计模式之解释器

    看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...

  9. wxpython分割窗研究(解决sashPosition=0无效的BUG)

    用wxpython开发一个简单的exe其实很简单的,但是在开发的过程中会遇到若干的坑.疑问.甚至bug,让人摸不清头脑!恰恰关于这方面的文档是少之又少,看来看去大家还是在官方的文档上加以引用说明,但是 ...

  10. mysql---数据控制语言(用户及其权限管理)

    用户管理 用户数据所在位置: mysql中的所有用户,都存储在系统数据库(mysql)中的user 表中--不管哪个数据库的用户,都存储在这里.