REDIS

1.   Redis前提

a)      缓存

                 i.          什么是缓存

缓存就是在内存中存储的数据备份。

                ii.          为什么使用缓存

每次需要数据都去数据库查询,很耗时间,而从内存中读取数据比去数据库查询要快很多。

               iii.          缓存的优点

减少查询数据库次数,提高网页的访问速度。对于经常不改变的数据可以保存到缓存中。

               iv.          缓存的主流技术

  1. redis
  2. memcache
  3. 两者区别

a)      从缓存命中,Memcache要略高于Redis

b)      但是Redis的功能更加强大

b)      nosql(not only sql)数据库:泛指非关系型的数据库。

2.   Redis的介绍

1.简介

Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并且借助许多高层级的接口使其可以胜任缓存、队列系统的不同角色

2.特性

Redis多种数据类型存储:

  1. 字符串类型(String)
  2. 散列类型(hashes)
  3. 列表类型(lists)
  4. 集合类型(sets)
  5. 有序集合类型(sortedrets)

内存存储与持久化:

  1. 内存的读写速度快于硬盘‘
  2. 自身提供了持久化功能(RDB,AOF两种方式)

a)      RDB快照(snapshortting):是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是Snapshot快照(数据库中所有键值对数据)。恢复时直接将快照文件读到内存中。

b)      AOF(apend-only-file):以日志的形式来记录每个写操作,将redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

3.功能丰富

a)      可用作缓存、队列、消息订阅/发布

b)      支持键的生存时间(只有redis支持)

c)      按照一定规则删除相应的键

4.使用

a)      下载redis

Linux版本 2.8.11 :

http://download.redis.io/releases/redis-2.8.11.tar.gz

Windows(64位)版本 2.8.9 :

https://github.com/MSOpenTech/redis/blob/2.8/bin/release/redis-2.8.9.zip?raw=true

Windows(32位)版本 2.6 :

https://github.com/MSOpenTech/redis/blob/2.6/bin/release/redisbin.zip?raw=true

b)      解压安装

c)      双击redis-server.exe(服务器的),开启服务黑窗口(若用redis服务黑窗口不能关)。

d)      再双击redis-cli.exe(客户端的),测试服务器有没有开启成功,输入ping若返回pong就成功了,否则不成功。

                 i.          这边可以另一种方式装redis-server.exe就不用一直开启黑窗口

                ii.          在redis-server.exe文件夹上路径处输入cmd,在cmd输入redis-server --service-install redis.windows.conf --loglevel verbose,就安装完成了。

5.redis指令

a)      set 键 值(添加)

b)      get 键(通过键得到相应的值)

c)      keys *(得到所有的键,也可用模糊(a?  查询a后面+一位的键。a*  查询a后面+任意字符的键。))

d)      del 键(通过键删除)

e)      expire 键 秒(给键设置生存时间)

f)       persist 键(把键生存时间初始化)

g)      flushall(清空所有数据库的数据)

h)      flushdb(清空当前数据库数据)

i)       select 数字(使用第几个数据库,从0开始,默认16个)

5.   Redis的快速使用

1.redis的快速使用

a)      导入jar包(Maven依赖)

              <!-- java连接redisjar包 -->

              <dependency>

                     <groupId>redis.clients</groupId>

                     <artifactId>jedis</artifactId>

                     <version>2.6.0</version>

              </dependency>

b)      连接redis并添加string类型的数据、查询所有的key

      

       /**

        *   连接redis

        */

       public static void testRedis() {

              //1.实例化地址和端口号创建jedis对象

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

              //2.使用redis的指令

              jedis.set("1", "1");//添加string类型的数据

              Set<String> keys = jedis.keys("*");//查询所有的key

              System.out.println(keys.toString());

              jedis.close();

       }

2.使用连接池管理redis

      

       /**

        *   使用连接池管理redis

        */

       public static void testRedisPool() {

              //1.实例化JedisPoolConfig创建jedisPoolConfig对象

              JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();

              jedisPoolConfig.setMaxTotal(20);//设置最大连接数

              //2.通过jedisPoolConfig对象地址和端口号实例化创建jedisPool对象

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

              //3.通过jedisPool对象的getResource方法创建jedis对象

              Jedis jedis = jedisPool.getResource();

              //4.使用redis的指令

              Set<String> keys = jedis.keys("*");

              System.out.println(keys.toString());

              jedis.close();

              jedisPool.close();

       }

3.分布式集群

      

       /**

        *   分布式集群:

        *          1.分布式:把一个大项目分成若干个小项目。

        *          2.集群:把一个项目(小项目)同时部署到多台服务器上。

        */

       public static void testShardJedisPool() {

              //1.实例化JedisPoolConfig创建jedisPoolConfig对象

              JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();

             

              //创建List<JedisShardInfo>

              List<JedisShardInfo> shards=new ArrayList<JedisShardInfo>();

              shards.add(new JedisShardInfo("127.0.0.1", 6379));

              shards.add(new JedisShardInfo("192.168.1.116", 6379));

             

              //2.通过jedisPoolConfig和List<JedisShardInfo>实例化shardedJedisPool对象

              ShardedJedisPool shardedJedisPool=new ShardedJedisPool(jedisPoolConfig, shards);

              //3.通过shardedJedisPool对象的getResource方法创建shardedJedis对象

              ShardedJedis shardedJedis = shardedJedisPool.getResource();

              //4.通过shardedJedis使用redis指令

              for(int i=1;i<100;i++) {

                     shardedJedis.set(""+i, ""+i);

                    

              }

              shardedJedis.close();

              shardedJedisPool.close();

       }

4.   Redis和SSM整合

a)      jar包(Maven依赖)

              <!-- java连接redisjar包 -->

              <dependency>

                     <groupId>redis.clients</groupId>

                     <artifactId>jedis</artifactId>

                     <version>2.6.0</version>

              </dependency>

b)      Redis的配置文件applicationContext-redis.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:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

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

      

       <!-- Redis分布式集群spring配置 -->

      

       <!-- JedisPoolConfig配置 -->

       <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">

              <!-- 设置属性最大连接数等 -->

              <property name="maxTotal" value="20"/>

       </bean>

      

       <!-- 配置shardedJedisPool对象 -->

       <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">

              <constructor-arg index="0" ref="jedisPoolConfig"/>

              <constructor-arg index="1">

                     <!-- 配置List<JedisShardInfo> -->

                     <list>

                            <bean class="redis.clients.jedis.JedisShardInfo">

                                   <constructor-arg index="0" value="127.0.0.1"/>

                                   <constructor-arg index="1" value="6379"/>

                            </bean>

                            <bean class="redis.clients.jedis.JedisShardInfo">

                                   <constructor-arg index="0" value="192.168.1.116"/>

                                   <constructor-arg index="1" value="6379"/>

                            </bean>

                     </list>

              </constructor-arg>

       </bean>

</beans>

5. 封装一个RedisService

RedisService接口:

package com.taotao.common.service;

public interface RedisService {

      

       /**

        *   保存数据到redis

        * @param key

        * @param value

        */

       void set(String key,String value);

      

       /**

        *   根据key得到数据

        * @param key

        * @return

        */

       String get(String key);

      

       /**

        *   删除

        * @param key

        */

       void delete(String key);

      

       /**

        *   设置有效时间

        * @param key

        * @param seconds

        */

       void expire(String key,Integer seconds);

      

       /**

        *   保存数据并设置有效时间

        * @param key

        * @param value

        * @param seconds

        */

       void set(String key,String value,Integer seconds);

}

RedisServiceImp实现类:

package com.taotao.common.service;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import redis.clients.jedis.ShardedJedis;

import redis.clients.jedis.ShardedJedisPool;

/**

 *   把Redis抽取一个工具类(String)

 * @author KFS

 *

 */

@Service

public class RedisServiceImp implements RedisService{

       @Autowired

       private ShardedJedisPool shardedJedisPool;

      

       /**

        *   保存数据到redis

        * @param key

        * @param value

        */

       public void set(String key,String value) {

              ShardedJedis shardedJedis = shardedJedisPool.getResource();

              shardedJedis.set(key, value);

       }

      

       /**

        *   根据key得到数据

        * @param key

        * @return

        */

       public String get(String key) {

              ShardedJedis shardedJedis = shardedJedisPool.getResource();

              return shardedJedis.get(key);

       }

      

       /**

        *   删除

        * @param key

        */

       public void delete(String key) {

              ShardedJedis shardedJedis = shardedJedisPool.getResource();

              shardedJedis.del(key);

       }

      

       /**

        *   设置有效时间

        * @param key

        * @param seconds

        */

       public void expire(String key,Integer seconds) {

              ShardedJedis shardedJedis = shardedJedisPool.getResource();

              shardedJedis.expire(key, seconds);

       }

      

       /**

        *   保存数据并设置有效时间

        * @param key

        * @param value

        * @param seconds

        */

       public void set(String key,String value,Integer seconds) {

              ShardedJedis shardedJedis = shardedJedisPool.getResource();

              shardedJedis.setex(key, seconds, value);

       }

}

原文地址:https://www.cnblogs.com/kfsrex/p/11716602.html