Redis客户端

Redis客户端

1    Redis客户端

 

 

1.1   自带命令行客户端

 

l  命令格式:

./redis-cli -h 127.0.0.1 -p 6379

l  修改redis配置文件(解决IP绑定问题)

 

# bind 127.0.0.1   绑定的IP才能访问redis服务器,注释掉该配置

protected-mode yes  是否开启保护模式,由yes该为no

 

l  参数说明:

       -hredis服务器的ip地址

       -predis实例的端口号

l  默认方式

如果不指定主机和端口也可以

./redis-cli

*默认主机地址是127.0.0.1

* 默认端口是6379

 

1.2   图形界面客户端(了解)

前提:需要安装图形界面管理器

 

 

 

 

1.2.1连接超时解决

远程连接redis服务,需要关闭或者修改防火墙配置。

 

修改防火墙设置:

l  第一步:编辑iptables

vim /etc/sysconfig/iptables

在命令模式下,选定要复制的那一行的末尾,然后点击键盘yyp,就完成复制,然后修改

 

 

 

l  第二步:重启防火墙

service iptables restart

iptables:清除防火墙规则:                                   [确定]

iptables:将链设置为政策 ACCEPTfilter                   [确定]

iptables:正在卸载模块:                                       [确定]

iptables:应用防火墙规则:                                   [确定]

 

 

1.2.2多数据库支持

l  默认一共是16个数据库,每个数据库之间是相互隔离(但是可以使用flushall一次清空所有的库)。数据库的数量是在redis.conf中配置的。

 

 

 

 

l  切换数据库使用命令:select数据库编号(0-15

例如:select 1

 

1.3   程序客户端之Java客户端Jedis

1.3.1Jedis介绍

l  Redis不仅使用命令客户端来操作,而且可以使用程序客户端操作。

l  现在基本上主流的语言都有客户端支持,比如JavaCC#C++phpNode.jsGo等。

l  在官方网站里列一些Java的客户端,有JedisRedissonJredisJDBC-Redis、等其中官方推荐使用JedisRedisson

l  企业中用的最多的就是Jedis,下面我们就重点学习下Jedis

l  Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis

 

1.3.2添加jar

<dependency>

                          <groupId>redis.clients</groupId>

                          <artifactId>jedis</artifactId>

                          <version>2.9.0</version>

                  </dependency>

 

1.3.3单实例连接

注意事项:需要去设置redis服务器的防火墙策略(临时关闭、永久关闭、端口暴露)

         @Test

         publicvoid testJedis() {

                  //创建一个Jedis的连接

                  Jedis jedis = new Jedis("127.0.0.1", 6379);

                  //执行redis命令

                  jedis.set("key1", "hello world");

                  //redis中取值

                  String result = jedis.get("key1");

                  //打印结果

                  System.out.println(result);

                  //关闭连接

                  jedis.close();

                 

         }

 

1.3.4连接池连接

         @Test

         publicvoid testJedisPool() {

                  //创建一连接池对象

                  JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);

                  //从连接池中获得连接

                  Jedis jedis = jedisPool.getResource();

                  String result = jedis.get("key1") ;

                  System.out.println(result);

                  //关闭连接

                  jedis.close();

                 

                  //关闭连接池

                  jedisPool.close();

         }

 

1.3.5Spring整合JedisPool(自学)

添加springjar

l  配置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.xsd

                  http://www.springframework.org/schema/mvc

                  http://www.springframework.org/schema/mvc/spring-mvc.xsd

                  http://www.springframework.org/schema/context

                  http://www.springframework.org/schema/context/spring-context.xsd

                  http://www.springframework.org/schema/aop

                  http://www.springframework.org/schema/aop/spring-aop.xsd

                  http://www.springframework.org/schema/tx

                  http://www.springframework.org/schema/tx/spring-tx.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.242.130" />

                  <constructor-arg name="port" value="6379" />

         </bean>

</beans>

 

l  测试代码

@Test

         publicvoid 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客户端

1.1   自带命令行客户端

 

l  命令格式:

./redis-cli -h 127.0.0.1 -p 6379

l  修改redis配置文件(解决IP绑定问题)

 

# bind 127.0.0.1   绑定的IP才能访问redis服务器,注释掉该配置

protected-mode yes  是否开启保护模式,由yes该为no

 

l  参数说明:

       -hredis服务器的ip地址

       -predis实例的端口号

l  默认方式

如果不指定主机和端口也可以

./redis-cli

*默认主机地址是127.0.0.1

* 默认端口是6379

 

1.2   图形界面客户端(了解)

前提:需要安装图形界面管理器

 

 

1.2.1连接超时解决

远程连接redis服务,需要关闭或者修改防火墙配置。

 

修改防火墙设置:

l  第一步:编辑iptables

vim /etc/sysconfig/iptables

在命令模式下,选定要复制的那一行的末尾,然后点击键盘yyp,就完成复制,然后修改

 

l  第二步:重启防火墙

service iptables restart

iptables:清除防火墙规则:                                 [确定]

iptables:将链设置为政策 ACCEPTfilter                    [确定]

iptables:正在卸载模块:                                   [确定]

iptables:应用防火墙规则:                                 [确定]

 

 

1.2.2多数据库支持

l  默认一共是16个数据库,每个数据库之间是相互隔离(但是可以使用flushall一次清空所有的库)。数据库的数量是在redis.conf中配置的。

 

 

l  切换数据库使用命令:select数据库编号(0-15

例如:select 1

 

1.3   程序客户端之Java客户端Jedis

1.3.1Jedis介绍

l  Redis不仅使用命令客户端来操作,而且可以使用程序客户端操作。

l  现在基本上主流的语言都有客户端支持,比如JavaCC#C++phpNode.jsGo等。

l  在官方网站里列一些Java的客户端,有JedisRedissonJredisJDBC-Redis、等其中官方推荐使用JedisRedisson

l  企业中用的最多的就是Jedis,下面我们就重点学习下Jedis

l  Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis

 

1.3.2添加jar

<dependency>

                          <groupId>redis.clients</groupId>

                          <artifactId>jedis</artifactId>

                          <version>2.9.0</version>

                  </dependency>

 

1.3.3单实例连接

注意事项:需要去设置redis服务器的防火墙策略(临时关闭、永久关闭、端口暴露)

         @Test

         publicvoid testJedis() {

                  //创建一个Jedis的连接

                  Jedis jedis = new Jedis("127.0.0.1", 6379);

                  //执行redis命令

                  jedis.set("key1", "hello world");

                  //redis中取值

                  String result = jedis.get("key1");

                  //打印结果

                  System.out.println(result);

                  //关闭连接

                  jedis.close();

                 

         }

 

1.3.4连接池连接

         @Test

         publicvoid testJedisPool() {

                  //创建一连接池对象

                  JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);

                  //从连接池中获得连接

                  Jedis jedis = jedisPool.getResource();

                  String result = jedis.get("key1") ;

                  System.out.println(result);

                  //关闭连接

                  jedis.close();

                 

                  //关闭连接池

                  jedisPool.close();

         }

 

1.3.5Spring整合JedisPool(自学)

添加springjar

l  配置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.xsd

                  http://www.springframework.org/schema/mvc

                  http://www.springframework.org/schema/mvc/spring-mvc.xsd

                  http://www.springframework.org/schema/context

                  http://www.springframework.org/schema/context/spring-context.xsd

                  http://www.springframework.org/schema/aop

                  http://www.springframework.org/schema/aop/spring-aop.xsd

                  http://www.springframework.org/schema/tx

                  http://www.springframework.org/schema/tx/spring-tx.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.242.130" />

                  <constructor-arg name="port" value="6379" />

         </bean>

</beans>

 

l  测试代码

@Test

         publicvoid 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();

                          }

                  }

         }