【SSM分布式架构电商项目-17】Redis入门

缓存的需求

上一遍博文:【SSM分布式架构电商项目-16】实现首页大广告和小广告,我们实现了首页的大广告和小广告。

大广告位数据无需每次查询后台系统的接口,可以在前台系统添加缓存,提高访问首页的速度。

商品类目的数据也可以缓存起来。

实现:
使用Redis实现缓存。

目前缓存的主流技术:
1、 Redis
2、 Memcached

二者谁的性能更高?
1、 单纯从缓存命中的角度来说,是Memcached要高,Redis和Memcache的差距不大
2、 但是,Redis提供的功能更加的强大

二者的区别是什么?
1、 Memcache是多线程
2、 Redis是单线程

Redis

NoSQL

这里写图片描述

主流的NoSQL产品

这里写图片描述

Redis简介

Redis官网: http://redis.io/
这里写图片描述

这里写图片描述

这里写图片描述

历史与发展

这里写图片描述

Redis的特性

这里写图片描述

Redis版本说明

这里写图片描述

Redis的安装

安装文件

这里写图片描述
这里写图片描述

安装方式一

这里写图片描述
测试:
这里写图片描述

安装方式二(安装到系统服务)

先删除原有的系统服务:
这里写图片描述
安装服务:
这里写图片描述

32位操作系统安装

只能通过双击打开redis-server.exe启动,不能安装到系统服务。

注意事项

这里写图片描述

由于文件系统非NTFS,导致Redis启动失败:

Redis-cli使用

redis-cli的使用之发送命令

这里写图片描述

redis-cli的使用之命令返回值

这里写图片描述

Redis的多数据库

这里写图片描述

FLUSHALL – 清空所有数据库的所有数据
FLUSHDB – 清空当前所在数据库的数据

配置数据库数量

这里写图片描述

Redis的基本命令

KEYS

这里写图片描述

EXISTS

这里写图片描述

DEL

这里写图片描述

TYPE

这里写图片描述

HELP

HELP 空格 tab键
这里写图片描述

Redis的字符串数据类型

字符串类型

这里写图片描述

GET、SET

这里写图片描述

INCR

这里写图片描述

INCRBY

这里写图片描述

DECR、DECRBY

这里写图片描述

APPEND

这里写图片描述

STRLEN

这里写图片描述

MSET、MGET

这里写图片描述

Redis之生存时间

设置生存时间

这里写图片描述
TTL返回值:
大于0的数字:剩余生存时间,单位为秒
-1 : 没有生存时间,永久存储
-2 : 数据已经被删除

清除生存时间

这里写图片描述

设置单位为毫秒

这里写图片描述

客户端

支持的语言

这里写图片描述

Jedis

这里写图片描述

这里写图片描述
官网:
这里写图片描述

Jedis的使用

导入itcast-redis:

这里写图片描述

导入依赖:

这里写图片描述

简单示例

这里写图片描述

package cn.itcast.redis;

import redis.clients.jedis.Jedis;

public class JedisDemo {

    public static void main(String[] args) {
        // 构造jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        // 向redis中添加数据
        jedis.set("mytest", "123");
        // 从redis中读取数据
        String value = jedis.get("mytest");

        System.out.println(value);
        // 关闭连接
        jedis.close();

    }

}
连接池使用

这里写图片描述

package cn.itcast.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolDemo {

    public static void main(String[] args) {
        // 构建连接池配置信息
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 设置最大连接数
        jedisPoolConfig.setMaxTotal(50);

        // 构建连接池
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);

        // 从连接池中获取连接
        Jedis jedis = jedisPool.getResource();

        // 读取数据
        System.out.println(jedis.get("mytest"));

        // 将连接还回到连接池中
        jedisPool.returnResource(jedis);

        // 释放连接池
        jedisPool.close();

    }

}
分片式集群

这里写图片描述

存在的问题:无法动态增加减少服务节点。

分片式集群的使用
package cn.itcast.redis;

import java.util.ArrayList;
import java.util.List;

import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

/**
 * 集群式的连接池
 * 
 */
public class ShardedJedisPoolDemo {

    public static void main(String[] args) {
        // 构建连接池配置信息
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        // 设置最大连接数
        poolConfig.setMaxTotal(50);

        // 定义集群信息
        List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
        shards.add(new JedisShardInfo("127.0.0.1", 6379));
        shards.add(new JedisShardInfo("192.168.29.112", 6379));

        // 定义集群连接池
        ShardedJedisPool shardedJedisPool = new ShardedJedisPool(poolConfig, shards);
        ShardedJedis shardedJedis = null;
        try {
            // 从连接池中获取到jedis分片对象
            shardedJedis = shardedJedisPool.getResource();
//            for (int i = 0; i < 50; i++) {
//                shardedJedis.set("key"+i, "value"+i);
//            }
            System.out.println(shardedJedis.get("key7"));
            System.out.println(shardedJedis.get("key3"));
            System.out.println("ok");
            // 从redis中获取数据
//            String value = shardedJedis.get("mytest");
//            System.out.println(value);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != shardedJedis) {
                // 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态
                shardedJedis.close();
            }
        }

        // 关闭连接池
        shardedJedisPool.close();

    }
}

猜你喜欢

转载自blog.csdn.net/cckevincyh/article/details/80254117