Redis的简单使用及介绍

Redis的简单使用及介绍

文章目录


一、缓存

缓冲的功能,就是提高性能减少与数据库的交互

1.缓存的思想

  • 当用户第一次查询的时候取查询数据库,查询到的内容,一方面返回给页面,另一方面最缓存(存在容器中)
  • 当用户第二期查询的时候,此时缓存中就有了数据,此时就不用查询数据库就可以拿到数据了
  • 当增删改数据库信息时,把缓存清空
    核心流程
  • 用户访问,先看缓存中有没有
  • 如果有则直接拿出返回给页面
  • 如果没有则查询数据库,把查询出的内容放到缓存中

2.缓存的弊端

做到数据的实时性比较麻烦,需要在增删改的时候清空数据

二、Nosql数据库

1.什么是Nosql数据库

Nosql,叫非关系型数据库,它的全名叫Not only sql。是针对关系型数据库来说的

2.Nosql数据库的分类

Redis的简单使用及介绍

3.Nosql的好处

为了解决高并发、高可用、高可扩展,大数据储存等一系列问题而产生的的数据库解决方案

4.Nosql和关系型数据库的区别

  • 区别一
    关系型数据库是需要依赖数据库的关系的,比如说主外键,数据储存在硬盘上
    非关系型数据库依赖特殊结果,比如redis是key-value的数据格式,数据存在内存中,可持久化

  • 区别二
    关系型数据库有主外键关系
    非关系型数据库没有这个概念

  • 区别三
    关系型数据库:操作的是硬盘,效率低,安全性稍微高
    非关系型数据库(redis)操作的是内存,效率高,但是不安全,数据可能丢失

三、Redis

1.什么是redis

**Redis是使用c语言开发的一个高性能键值Nosql数据库,Redis可以通过一些键值类型来存储数据 **

2.Redis的特点

  • 高性能,持久存储,适应高并发的应用场景
  • 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型
  • Redis数据库完全在内存中,使用磁盘仅用于持久性
  • Redis可以将数据复制到任意数量的从服务器

3.Redis的有事

  • 异常快速:Redis的速度非常快,支持丰富的数据类型。读的速度是110000次/s,写的速度是81000次/s
  • 操作都是原子性:所有Redis操作都是原子的,这保证了如果两个客户端同时访问Redis服务器将获得更新后的值

4.Redis的作用

  • 缓存
  • 存临时数据

5.Redis的文件介绍

Redis的简单使用及介绍

6.Redis的启动

Redis的简单使用及介绍

Redis的简单使用及介绍

7.客户端连接

Redis的简单使用及介绍
Redis的简单使用及介绍

四、Redis的Value的取值

注意:Redis存的是key-value,但是key只能是字符串,value的取值有如下几种类型

  • 字符串(String)
  • 散列(Hash)
  • 列表(List)
  • 集合(Set)
  • 有序集合(SortedSet)
    Redis的简单使用及介绍

Redis的简单使用及介绍

1.List&Set&SortedSet区别

  • List类型:有顺序 可以重复
  • Set类型:没有顺序 不能重复
  • SortedSet类型:有顺序 不能重复

2.String类型的操作

存取单个数据
  • 存值
    set key value
  • 取值
    get key
存取多个数据
  • 存值
    mset key value key1 value1
  • 取值
    mget key key2
删除数据

del key

3.hash类型操作

存取单个属性值
  • 存值
    hset key field fieldValue
  • 取值
    hget key field
存取多个属性值
  • 存值
    hmset key field1 field1Value field2 field2Value
  • 取值
    hmget key field1 field2
删除属性值
  • 语法
    hdel key field1 field2

4.list类型操作

有顺序可重复

右压栈和左弹栈

右压栈 是指数据从头添加,数据春旭往后排,类似数据向右压
左弹栈 是指数据从左边弹出

  • 右压栈
    lpush key value1 value2 value3
  • 左弹栈
    lpop key (从左边弹出第一个)
    Redis的简单使用及介绍
左压栈和右弹栈

左压栈:表示数据从后添加
右弹栈:表示数据从后弹出

  • 左压栈
    rpush key value1 value2 value3
  • 右弹栈
    rpop key (从右边弹出一个)
    Redis的简单使用及介绍
查看数据
  • 语法
    lrange key startIdex endIndex
    注意:当endIndex=-1时,表示查询所有
    Redis的简单使用及介绍

5.Set类型操作

不可重复没有顺序

存取数据
  • 存数据
    sadd key value1 value2 value3
  • 取数据
    smembers key
    Redis的简单使用及介绍
删除数据
  • 语法
    srem key value
    Redis的简单使用及介绍

6.SortedSet类型

有序,不能重复
注意:每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。

存取数据
  • 存值
    zadd key score1 value1 score2 value2
  • 取值
    zrange key startIdex endIdex
    当endIdex等于-1时,表示查询所有
    Redis的简单使用及介绍
删除数据
  • 语法
    zrem key value
    Redis的简单使用及介绍

7.Redis的通用指令

key* 获得所有的key
key list* 获得以list开头的key

五、Redis的持久化

redis是把市局存在内存中的,如果我们的服务器关机,这个时候内存中的数据将不存在,所以要做持久化
当服务器再次启动的时候,Redis就会把本地数据加载到内存中

1.RDB的方式

这种持久化方式是磨人的,不用任何配置

  • 规则

Redis的简单使用及介绍

  • 持久化文件

Redis的简单使用及介绍

AOF的方式

每一次操作或者每一秒,都会吧记录持久化到硬盘中(费资源),是每次还是每秒取决于配置

  • 开启方式

Redis的简单使用及介绍
Redis的简单使用及介绍

六、java操作Redis

  • Jedis的方式
  • SpringDataRedis的方式

1.Jedis单独的方式

  • 导入jar

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

  • 对String的操作
    Redis的简单使用及介绍
  • 对hash的操作
    Redis的简单使用及介绍
  • 对List的操作
    Redis的简单使用及介绍
  • 对set的操作
    Redis的简单使用及介绍
  • 对sortedSet的操作
    Redis的简单使用及介绍

2.Jedis连接池的方式

      /**
       * 连接池的使用
       */
  //    @Test
      public void pool() {
          JedisPoolConfig config  = new JedisPoolConfig();
          // 最大空闲数
          config.setMaxIdle(10);
  //        最大连接数
          config.setMaxTotal(50);

          //通过配置类创建连接池
          JedisPool pool = new JedisPool(config,"localhost",6379);
          // 在连接池中取出Jedis连接
          Jedis jedis = pool.getResource();
          jedis.set("haha","窗前明月光");
          String haha = jedis.get("haha");
          System.out.println(haha);

      }

3.连接池的封装

  • 第一步:新建一个jedis.properties文件
host=localhost
port=6379
maxIdle=10
maxTotal=50
  • 第二步:编写工具类
public class JedisUtil {

    private static JedisPool jedisPool;

    static {
        InputStream in = JedisUtil.class.getClassLoader().getResourceAsStream("redis.properties");
        Properties properties = new Properties();
        try {
            properties.load(in);
            JedisPoolConfig config = new JedisPoolConfig();
            // 最大空闲数
            config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
            // 最大连接数
            config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
            jedisPool = new JedisPool(config, properties.getProperty("host"), Integer.parseInt(properties.getProperty("port")));
        } catch (IOException e) {
            throw new RuntimeException("配置文件加载失败");
        }

    }

    /**
     * 这个是获得Jedis
     *
     * @return
     */
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }

    /**
     * 释放资源
     */
    public static void release(Jedis jedis) {
        //这个表示当前jedis链接 放到我们链接池中  并不是关闭了
        jedis.close();
    }

}

七、集群的搭建

  • 复制一份配置文件
    Redis的简单使用及介绍
  • 修改复制的配置文件
    Redis的简单使用及介绍
  • 根据不同的配置文件分别启动2次

Jedis对集群的操作

    @Test
    public void fun() {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(10);
        JedisShardInfo info1 = new JedisShardInfo("localhost", 6379);
        JedisShardInfo info2 = new JedisShardInfo("localhost", 7777);
        List<JedisShardInfo> list = new ArrayList<>();
        list.add(info1);
        list.add(info2);
        ShardedJedisPool pool = new ShardedJedisPool(config, list);

        ShardedJedis jedis = pool.getResource();
        for (int i = 0; i <100; i++) {
            jedis.set("name"+i,"huige"+i);
        }
        jedis.close();
    }
}
上一篇:2021-07-22


下一篇:RHCE第1章:Web服务器(上)