redis系列文章:
redis系列(一)- 安装与启动
redis系列(二)- 语法与命令php
Redis是NoSql的一种,在弄清楚Redis是个什么玩意以前,先了解下NoSql是什么。前端
NoSql,全名:Not Only Sql,是一种非关系型数据库,它不能替代关系弄数据库,只是关系型数据库的一个补充,是能够解决高并发、高可用、高扩展、大数据存储等一系列问题而产生的数据库解决方案。java
NoSql有如下4种分类:键值(Key-Value)存储数据库、列存储数据库、文档型数据库、图形(Graph)数据库。而Redis属于第一种:键值(Key-Value)存储数据库。linux
Redis是使用c语言开发的一个高性能键值数据库,即经过一些键值类型来存储数据。Redis支持的键值类型有:String字符类型、map散列类型、list列表类型、set集合类型、sortedset有序集合类型。c++
redis的应用场景以下:缓存(数据查询、短链接、新闻内容、商品内容等等)、分布式集群架构中的session分离、聊天室的在线好友列表、任务队列。(秒杀、抢购、12306等等)、应用排行榜、网站访问统计、数据过时处理(能够精确到毫秒)。其中,做为缓存的应用场景是最多的。git
通常redis安装于linux服务器,故本例介绍的是Linux下的安装,若是你的电脑是window或mac,请自行百度安装方法。github
本例使用的Linux系统是CentOS6.7,诸如Ubuntu等Linux操做系统的操做命令或许存在个别差别,请自行学习了解。redis
能够到redis的官网找到各个Redis版本的下载地址,如:download.redis.io/releases/re…spring
使用Xshell等服务器终端链接软件链接上Linux后,进行如下操做:sql
下载redis:
wget http://download.redis.io/releases/redis-3.0.0.tar.gz复制代码
使用ll命令查看当前目录下全部文件
能够看到redis-3.0.0.tar.gz就是刚刚下载的redis压缩包,如今对其解压:
tar -zxvf redis-3.0.0.tar.gz复制代码
再使用ll命令查看当前目录下全部文件
进入redis源码:
cd redis-3.0.0复制代码
经过ll命令能够看到Redis源码目录下的全部文件,接下来就须要对源码进行编译了:
make复制代码
使用make命令编译Redis须要c语言环境,CentOS自带c语言环境,如果使用其余Linux系统中没有c语言环境,则须要安装,如yum安装: yum install gcc-c++
编译事后,就是安装了,安装Redis的命令以下:
make install PREFIX=/usr/local/redis复制代码
该命令中,前面的"make install PREFIX="是固定的,而"/usr/local/redis"是Redis的安装目录,通常就这么写,如若须要安装在其余地方,只需将此路径更换便可。
最后,查看Redis是否安装成功:
cd /usr/local/redis/复制代码
使用ll命令,能够看到bin文件夹,说明Redis已经安装成功。
Redis有两种启动,分别是:前端启动、后端启动。要启动Redis,就须要到Redis的bin目录下执行启动命令,先看看bin目录结构:
[root@localhost bin]# ./redis-server复制代码
能够看到Redis的启动端口为6379(默认),进程id是5979,同时,前端启动Redis后,终端将进入Redis控制台,没办法继续别的Linux命令,即这个终端窗口就"废了",只能输入Redis本身的命令。
强制关闭:Ctrl+c
正常关闭:[root@localhost bin]# ./redis-cli shutdown复制代码
下面对这两个命令进行对比:
须要注意一点,一旦前端启动的关闭命令执行,则redis控制台关闭,redis服务也会停掉。
后端启动是咱们开发中绝对会用到的方式,但在使用后端启动命令以后,须要作以下几步配置:
[root@localhost bin]# vim redis.conf 复制代码
Linux的vim编辑器指令请自行学习,这里就说vim中几个最经常使用的指令:
i:进入编辑模式。
esc:退出编辑模式,进入浏览模式(进入vim编辑器,默认就是浏览模式)。
:wq:保存修改并退出vim编辑器。
通过上面几步配置后,之后就无需再配置,下面就能够经过命令让redis后台启动了。
[root@localhost bin]# ./redis-server redis.conf复制代码
能够发现后端启动命令就只是比前端启动命令多了" redis.conf",意思很明确,就是让redis根据这个配置文件的配置运行罢了,同时也能够看到,在启动完redis后台,终端不会进入redis控制台,这就是将redis运行后台了,咱们能够查查看系统如今是否是有redis的进程:
[root@localhost bin]# ps -aux | grep redis复制代码
能够看到redis是运行着的,端口是6379,进程id是6087。
强制关闭:[root@localhost bin]# kill -9 进程id
正常关闭:[root@localhost bin]# ./redis-cli shutdown复制代码
由于后端启动redis,没办法像前端启动redis那样直接ctrl+c强制关闭redis,若是须要强制关闭,那只能经过杀死进程的方式中止redis。而正常关闭redis的命令与前端关闭同样,这里就很少说废话。
项目中,建议使用正常关闭。由于redis做为缓存来使用的话,将数据存储到内存中,若是使用正常关闭,则会将内存数据持久化到本地以后,再关闭。若是强制关闭,则不会进行持久化操做,可能会形成部分数据丢失。
在前面介绍redis安装目录下bin目录的结构时,就已经标记出了redis的客户端,它就是redis-cli。这个客户端有两个经常使用的功能:
启动客户端命令:
[root@localhost bin]# ./redis-cli -h 127.0.0.1 -p 6379复制代码
若是使用的ip地址与端口都是默认的,则上述命令能够这么写:
[root@localhost bin]# ./redis-cli复制代码
使用默认配置:默认的ip【127.0.0.1】,默认的port【6379】
ctrl+c
127.0.0.1:6379> quit复制代码
要关闭该客户端,使用上述两个命令中任意一个都可,都不会影响redis数据的保存。
有一个redis的图形界面客户端软件,名为redis-destop-manager。这是该软件的下载页面,支持Windows、Mac OS X、Linux,请根据本身的电脑系统选择下载,这里以windows为例,简单说下这软件的使用,安装很简单,一路下一步便可,安装后打开该应用。
redis不只可使用命令来操做,目前基本上主流的语言都有客户端支持,好比:java、C、C#、C++、php、Node.js、Go等。
在官方网站里有一些Java的客户端,如:Jedis、Redisson、Jredis、JDBC-Redis等,其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis。
Jedis托管在github上,点击打开。
@Test
public void jedisClient() {
// 建立Jedis
Jedis jedis = new Jedis("192.168.128.128", 6379);
// 经过Jedis赋值
jedis.set("s2", "222");
// 经过Jedis取值
String s2 = jedis.get("s2");
System.out.println(s2);
// 关闭Jedis
jedis.close();
}复制代码
@Test
public void jedisPool() {
// JedisPool
JedisPool jedisPool = new JedisPool("192.168.128.128", 6379);
// 经过链接池获取jedis对象
Jedis jedis = jedisPool.getResource();
String s2 = jedis.get("s2");
System.out.println(s2);
// 关闭jedis客户端
jedis.close();
// 关闭链接池
jedisPool.close();
}复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 链接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大链接数 -->
<property name="maxTotal" value="30" />
<!-- 最大空闲链接数 -->
<property name="maxIdle" value="10" />
<!-- 每次释放链接的最大数目 -->
<property name="numTestsPerEvictionRun" value="1024" />
<!-- 释放链接的扫描间隔(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<!-- 链接最小空闲时间 -->
<property name="minEvictableIdleTimeMillis" value="1800000" />
<!-- 链接空闲多久后释放, 当空闲时间>该值 且 空闲链接>最大空闲链接数 时直接释放 -->
<property name="softMinEvictableIdleTimeMillis" value="10000" />
<!-- 获取链接时的最大等待毫秒数,小于零:阻塞不肯定的时间,默认-1 -->
<property name="maxWaitMillis" value="1500" />
<!-- 在获取链接的时候检查有效性, 默认false -->
<property name="testOnBorrow" value="false" />
<!-- 在空闲时检查有效性, 默认false -->
<property name="testWhileIdle" value="true" />
<!-- 链接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
<property name="blockWhenExhausted" value="false" />
</bean>
<!-- redis单机 经过链接池 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool"
destroy-method="close">
<constructor-arg name="poolConfig" ref="jedisPoolConfig" />
<constructor-arg name="host" value="192.168.128.128" />
<constructor-arg name="port" value="6379" />
</bean>
</beans>复制代码
@Test
public void testJedisPool() {
JedisPool pool = (JedisPool) applicationContext.getBean("jedisPool");
Jedis jedis = null;
try {
jedis = pool.getResource();
jedis.set("name", "lisi");
String name = jedis.get("name");
System.out.println(name);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (jedis != null) {
// 关闭链接
jedis.close();
}
}
}复制代码
redis默认建立16个数据库,若是须要修改数量库的建立数量,能够修改redis.conf配置文件中databases的值为改变。
redis默认使用下标为0的数据库,如若须要切换数据库,能够在redis控制台中,使用"select 下标号"选择数据库。
127.0.0.1:6379> select 15复制代码
若是你用Xshell之类的终端软件没法链接服务器,请查看Linux系统是否开放22端口,可经过修改iptable拦截规则开放22端口,如果使用阿里云服务器,则须要修改安全组规则,具体步骤网上一堆,请本身搜索学习修改。