redis系列(一)- 安装与启动

redis系列文章:
redis系列(一)- 安装与启动
redis系列(二)- 语法与命令

一、Redis介绍

Redis是NoSql的一种,在弄清楚Redis是个什么玩意之前,先了解下NoSql是什么。

1、什么是NoSql

NoSql,全名:Not Only Sql,是一种非关系型数据库,它不能替代关系弄数据库,只是关系型数据库的一个补充,是可以解决高并发、高可用、高扩展、大数据存储等一系列问题而产生的数据库解决方案。

NoSql有以下4种分类:键值(Key-Value)存储数据库、列存储数据库、文档型数据库、图形(Graph)数据库。而Redis属于第一种:键值(Key-Value)存储数据库。

2、什么是Redis

Redis是使用c语言开发的一个高性能键值数据库,即通过一些键值类型来存储数据。Redis支持的键值类型有:String字符类型、map散列类型、list列表类型、set集合类型、sortedset有序集合类型。

redis的应用场景如下:缓存(数据查询、短连接、新闻内容、商品内容等等)、分布式集群架构中的session分离、聊天室的在线好友列表、任务队列。(秒杀、抢购、12306等等)、应用排行榜、网站访问统计、数据过期处理(可以精确到毫秒)。其中,作为缓存的应用场景是最多的。

二、redis安装

一般redis安装于linux服务器,故本例介绍的是Linux下的安装,如果你的电脑是window或mac,请自行百度安装方法。

本例使用的Linux系统是CentOS6.7,诸如Ubuntu等Linux操作系统的操作命令或许存在个别差异,请自行学习了解。

1、下载

可以到redis的官网找到各个Redis版本的下载地址,如:http://download.redis.io/releases/redis-3.0.0.tar.gz

2、安装

使用Xshell等服务器终端连接软件连接上Linux后,进行以下操作:

1)下载压缩Redis

下载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命令查看当前目录下所有文件

2)编译安装Redis

进入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,就需要到Redis的bin目录下执行启动命令,先看看bin目录结构:

1、前端启动与停止

1)前端启动的命令:

[root@localhost bin]# ./redis-server

可以看到Redis的启动端口为6379(默认),进程id是5979,同时,前端启动Redis后,终端将进入Redis控制台,没办法继续别的Linux命令,即这个终端窗口就"废了",只能输入Redis自己的命令。

2)前端启动的关闭命令:

强制关闭:Ctrl+c
正常关闭:[root@localhost bin]# ./redis-cli shutdown

下面对这两个命令进行对比:

  • 强制关闭只需在Redis控制台直接执行即可(redis可能会丢失部分数据)。
  • 正常关闭需要另开一个终端窗口才可执行(redis不会丢失数据,推荐使用)。

需要注意一点,一旦前端启动的关闭命令执行,则redis控制台关闭,redis服务也会停掉。

2、后端启动与停止

后端启动是我们开发中绝对会用到的方式,但在使用后端启动命令之后,需要做如下几步配置:

1)后端启动的配置:

第一步,需要把redis源码目录下的redis.conf文件复制到redis安装目录的bin目录下。

第二步,修改redis.conf文件,将daemonize的值改为yes后保存。

[root@localhost bin]# vim redis.conf 

Linux的vim编辑器指令请自行学习,这里就说vim中几个最常用的指令:

i:进入编辑模式。

esc:退出编辑模式,进入浏览模式(进入vim编辑器,默认就是浏览模式)。

:wq:保存修改并退出vim编辑器。

经过上面几步配置后,以后就无需再配置,下面就可以通过命令让redis后台启动了。

2)后端启动的命令:

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

3)后端启动的关闭命令:

强制关闭:[root@localhost bin]# kill -9 进程id
正常关闭:[root@localhost bin]# ./redis-cli shutdown

因为后端启动redis,没办法像前端启动redis那样直接ctrl+c强制关闭redis,如果需要强制关闭,那只能通过杀死进程的方式停止redis。而正常关闭redis的命令与前端关闭一样,这里就不多说废话。

项目中,建议使用正常关闭。因为redis作为缓存来使用的话,将数据存储到内存中,如果使用正常关闭,则会将内存数据持久化到本地之后,再关闭。如果强制关闭,则不会进行持久化操作,可能会造成部分数据丢失。

四、Redis客户端

1、redis自带客户端

在前面介绍redis安装目录下bin目录的结构时,就已经标记出了redis的客户端,它就是redis-cli。这个客户端有两个常用的功能:

  • 用来正常关闭redis服务。
  • 让终端进入redis控制台(后台运行redis的场景下用到)。

1)启动

启动客户端命令:

[root@localhost bin]# ./redis-cli -h 127.0.0.1 -p 6379
  • -h:指定访问的redis服务器的ip地址
  • -p:指定访问的redis服务器的port端口

如果使用的ip地址与端口都是默认的,则上述命令可以这么写:

[root@localhost bin]# ./redis-cli

使用默认配置:默认的ip【127.0.0.1】,默认的port【6379】

2)关闭

ctrl+c
127.0.0.1:6379> quit

要关闭该客户端,使用上述两个命令中任意一个均可,都不会影响redis数据的保存。

2、图形界面客户端

有一个redis的图形界面客户端软件,名为redis-destop-manager。这是该软件的下载页面,支持Windows、Mac OS X、Linux,请根据自己的电脑系统选择下载,这里以windows为例,简单说下这软件的使用,安装很简单,一路下一步即可,安装后打开该应用。

1)打开redis服务器连接配置

2)添加redis服务器连接并测试是否成功连接

3)查看redis服务器中所有的数据库

4)查看个别数据库中的键值对数据

3、代码控制客户端

redis不仅可以使用命令来操作,目前基本上主流的语言都有客户端支持,比如:java、C、C#、C++、php、Node.js、Go等。

在官方网站里有一些Java的客户端,如:Jedis、Redisson、Jredis、JDBC-Redis等,其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis。
Jedis托管在github上,点击打开。

1)简单的redis使用

第一步:导入以下2个jar包

  • jedis-2.7.0.jar
  • commons-pool2-2.3.jar

第二步:创建Jedis连接使用Redis服务器

@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();
}

第三步:改用Jedis连接池获取Jedis

@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();
}

2)Spring整合jedisPool

第一步:

  • 添加spring的jar包
  • 配置spring配置文件applicationContext.xml

    <?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();
        }
    }
}

五、其他

1、redis数据库数量配置

redis默认创建16个数据库,如果需要修改数量库的创建数量,可以修改redis.conf配置文件中databases的值为改变。

2、redis数据库选择

redis默认使用下标为0的数据库,如若需要切换数据库,可以在redis控制台中,使用"select 下标号"选择数据库。

127.0.0.1:6379> select 15

3、问题

如果你用Xshell之类的终端软件无法连接服务器,请查看Linux系统是否开放22端口,可通过修改iptable拦截规则开放22端口,若是使用阿里云服务器,则需要修改安全组规则,具体步骤网上一堆,请自己搜索学习修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,956评论 2 27
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,263评论 0 36
  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,110评论 24 626
  • 本人大二狗一枚,今天突发的回忆了一下自己的大一生活…发现…嗯…并没有什么值得我去回忆的啊。自己都感到失望了。 想想...
    陈芝麻烂谷子阅读 445评论 0 1
  • 22岁 想象着30岁 那时 成家立业 愿活在一座小城 不要多大的抱负 父母身体健康 有贤妻伴我左右 有好友酒谈人生...
    迷丶阅读 124评论 0 1