20分钟快速了解Redis

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架构师

 

转载于:https://www.cnblogs.com/jelynn/p/5192236.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程通信例子

from&#xff1a;https://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.beginoutputreadline(vvs.80).aspx?cs-save-lang1&cs-langcsharp#code-snippet-4备注可同步或异步读取 StandardOutput 流。Read、ReadLine 和 ReadToEnd 等方法对进程的输出流执行…

IDEA15 下运行Scala遇到问题以及解决办法

为了让Scala运行起来还是很麻烦&#xff0c;为了大家方便&#xff0c;还是记录下来&#xff1a; 1、首先我下载的是IDEA的社区版本&#xff0c;版本号为15. 2、下载安装scala插件&#xff1a; 2.1 进入设置菜单。 2.2 点击安装JetBrains plugin 2.3 输入scala查询插件&#xff…

使用try-with-resources替代try finally释放资源

2019独角兽企业重金招聘Python工程师标准>>> 1、旧社会 Java里&#xff0c;对于文件操作IO流、数据库连接等开销非常昂贵的资源&#xff0c;用完之后必须及时通过close方法将其关闭&#xff0c;否则资源会一直处于打开状态&#xff0c;直至程序停止&#xff0c;增加…

平板电脑离寿终正寝还有多远?

近期有评论称&#xff0c;因为大尺寸智能手机越来越普及&#xff0c;小尺寸平板正遭受着越来越严重的冲击&#xff0c;在这样的背景下&#xff0c;平板厂商也纷纷转攻超大尺寸平板市场&#xff0c;以此避开大尺寸智能手机的竞争&#xff0c;只是。这样的策略转变是否能扭转平板…

Swift 与 JSON 数据

转载自&#xff1a; http://www.cnblogs.com/theswiftworld/p/4660177.html 我们大家平时在开发 App 的时候&#xff0c;相信接触最多的就是 JSON 数据了。只要你的 App 有读取网络数据的功能&#xff0c;你就免不了要与 JSON 打交道。比如你做一个新闻 App&#xff0c;你要读取…

TeamViewer - 最好用强大的免费跨平台远程桌面控制软件 (支持电脑和手机)

from&#xff1a;很早以前 LYcHEE 就提到过&#xff0c;家中的潮人爷爷奶奶每天摆弄着电脑&#xff0c;看看新闻发发邮件&#xff0c;安享晚年生活。只是意料之中的&#xff0c;电脑上莫名出现各种问题&#xff1f;不翼而飞的图标&#xff1f;照片又忘记怎么导出了&#xff1f;…

【设计模式】7、桥接模式

桥接模式就是对一个类的方法进行抽象化&#xff0c;吧不相关的因素提取出来&#xff0c;发展出第二个类 1 package com.shejimoshi.structural.Bridge;2 3 4 /**5 * 功能&#xff1a;桥接模式使用6 * 意图&#xff1a;将抽象部分与它的实现部分分离&#xff0c;使他们都…

TeamViewer免费版和付费版有什么不同

提到远程控制软件 TeamViewer无疑是目前业内知名度比较高的一款&#xff0c;所以说到远程控制软件可能大部分人首先想到的就是TeamViewer。在使用功能上&#xff0c;它支持远程桌面控制、文件传输、远程计算机锁定、视频会话、主控方和被控方身份互换&#xff0c;远程管理无人执…

【代码笔记】iOS-翻书效果的实现

代码&#xff1a; RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self [super initWithNibName:…

Halcon—Tuple中符号的含义

2014年08月08日 21:20:30阅读数&#xff1a;5429实例一&#xff08;3d_coordinates.hdev&#xff09;&#xff1a;for I : 1 to NumImages by 1read_image (Image, calib/calib-3d-coord-I$02d)——C:\Program Files\MVTec\HALCON-10.0\images\的calib文件夹中开头是calib-3d-c…

Halcon学习笔记(三)---数据类型

Halcon学习笔记&#xff08;三&#xff09;---数据类型halcon只能在单独行进行注释&#xff0c;不能在语句后面进行注释。1、tuple(元组&#xff0c;重数)赋值符号“&#xff1a;”tuple算子&#xff1a;&#xff08;1&#xff09;变量定义与加减乘除运算代码如下&#xff1a;*…

论文笔记之:RATM: RECURRENT ATTENTIVE TRACKING MODEL

RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要内容是 结合 RNN 和 attention model 用来做目标跟踪。 其中模型的组成主要是&#xff1a; 1. an attention model 主要用来从输入图像中提取 patch&#xff1b; 2. RNN 用来预测 attention 参数&#xff0c;即&am…

【分享】WeX5的正确打开方式(5)——绑定机制

今天继续WeX5的绑定机制。 需求分析 记账本要实现的效果就是可以展示所有账单&#xff0c;还能实时动态编辑每一笔账单&#xff0c;官方案例的效果图如下&#xff1a; 展示页&#xff1a; 编辑页 个人觉得官方案例加入了许多元素&#xff0c;不熟悉的同学每一个点都很难理解&am…

关于未捕获异常的处理(WPF)

转载自&#xff1a;http://www.cnblogs.com/chenxizhang/p/3280947.html 这一篇文章来谈谈对于WPF应用程序开发中的未捕获异常的处理。 首先&#xff0c;我们当然是要求应用程序开发人员&#xff0c;尽可能地在程序可能出现异常的地方都去捕捉异常&#xff0c;使用try…catch的…

设计模式--23、访问者模式

访问者模式是一种较为复杂的行为型设计模式&#xff0c;它包含访问者和被访问元素两个主要组成部分&#xff0c;这些被访问的元素通常具有不同的类型&#xff0c;且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素&#xff0c;而划价人…

『协议』XML-RPC 协议规格说明

为什么80%的码农都做不了架构师&#xff1f;>>> 这篇文章提供所有实现XML-RPC协议所需要的内容。 一览 XML-RPC是一个工作在因特网上的远端程序调用&#xff08;Remote Procedure Calling&#xff09;协议。 XML-RPC消息是一个HTTP-POST请求&#xff08;Request&…

Qt之QLineEdit详解(附源码)

原博客地址&#xff1a;http://blog.csdn.net/liang19890820/article/details/52044639&#xff0c;感谢原作者总结和分享。 简述 QLineEdit是一个单行文本输入框。 QLineEdit允许用户输入和编辑单行纯文本&#xff0c;提供了很多有用的编辑功能&#xff0c;包括&#xff1a;撤…

C#json数据的序列化和反序列化(将数据转换为对象或对象集合)

引用 System.Runtime.Serialization.Json 转载于:https://www.cnblogs.com/a849788087/p/5645828.html

位图(bmp)文件格式分析

from&#xff1a;https://blog.csdn.net/qingchuwudi/article/details/25785307 位图(bmp)文件格式分析 作者&#xff1a;深蓝&#xff08;由博主分享&#xff09; 一、什么是位图 计算机能以位图和矢量图格式显示图像。 1、位图(Bitmap)&#xff1a; 图像又称点阵图或光…

java 基本功 —— 内存相关

2019独角兽企业重金招聘Python工程师标准>>> 首先我们来说说内存&#xff0c;因为从内存的角度来出发来分析一些变量&#xff0c;引用或者对象的生命周期会更好理解一些。 java是一门编程语言&#xff0c;他跟C有什么不同呢&#xff1f;本质上&#xff0c;他们都是一…