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. 前端基本知识(三):JS的闭包理解

    JS闭包的理解 一.变量的作用域 二.如何从外部读取局部变量 三.什么是闭包 四.深入理解闭包 五.闭包的用途 六.使用闭包注意情况 七.JavaScript的垃圾回收机制 八.一些思考题 一.变量作 ...

  2. Java显式锁学习总结之六:Condition源码分析

    概述 先来回顾一下java中的等待/通知机制 我们有时会遇到这样的场景:线程A执行到某个点的时候,因为某个条件condition不满足,需要线程A暂停:等到线程B修改了条件condition,使con ...

  3. List实现行转列的通用方案

    最近在做报表统计方面的需求,涉及到行转列报表.根据以往经验使用SQL可以比较容易完成,这次决定挑战一下直接通过代码方式完成行转列.期间遇到几个问题和用到的新知识这里整理记录一下. 阅读目录 问题介绍 ...

  4. Unity3d场景漫游---iTween实现

    接触U3D以来,我做过的场景漫游实现方式一般有以下几种: Unity3d中的Animation组件,通过设置摄像机的关键点实现场景漫游 第一人称或第三人称控制器 编写摄像机控制脚本 iTween iT ...

  5. Linux使用小笔记<进程操作篇>

    问题一: 查看哪个进程占用了哪个端口.以及杀掉进程 1.查看占用端口: sudo lsof -i :80 lsof 命令 是 list open files的意思 比如: lsof filename ...

  6. 调试时a标签禁止跳转方法

    a.setAttribute("onclick",'');

  7. 九度OJ题目1137:浮点数加法 (JAVA)使用BigDecimal四个案例都通过了,但是超时了。

    题目描述: 求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj 对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0 输入: ...

  8. Python模块发布

    项目根目录添加setup.py模块: from distutils.core import setup setup( name="模块名字", version="1.0. ...

  9. 10分钟精通SharePoint - SharePoint安装

    简介 接触SharePoint就避免不了要接触SharePoint安装,无论你是对SharePoint进行开发还是管理(终端用户除外).SharePoint的安装涉及到两部分:预装.安装和配置,这主要 ...

  10. 微信小程序-开发入门

    微信小程序已经火了一段时间了,之前一直也在关注,就这半年的发展来看,相对原生APP大部分公司还是不愿意将主营业务放到微信平台上,以免受制于腾讯,不过就小程序的应用场景(用完即走和二维码分发等)还是很值 ...