Redis学习笔记

Redis - Remote Dictionary Server

​ Redis官网:https://redis.io

​ Redis中文网:http://www.redis.cn

​ Redis所属公司:Pivotal(Spring所在的公司)

​ Redis源码地址:https://github.com/antirez/redis

1. NoSQL - Not Only SQL

MySQLOracleDB2:关系型数据库

结构化数据:使用关系型数据库表示和存储,表现形式就是二维行列结构;

NoSQL:存储非结构化和半结构化数据

非结构化数据:没有固定存储结构,文件、图片、音视频等

半结构化数据:可以认为是结构化数据的一种,只不过不是以二维行列形式存储,但是数据包含相关标记,比如JSON、xml;

1.1 NoSQL数据库类型

  1. 键值对数据库(Key-Value数据库)

    代表数据库:Redis、Memcached

  2. 列式数据库

    代表数据库:谷歌的BigTable、Apache的HBase

  3. 文档数据库

    这种数据库存储半结构化数据:一般存储为json格式,这种数据库更接近关系型数据库;

    代表数据库:MongoDBElasticSearch(ES)

  4. 图数据库

    并不是存储图片,而是存储数据间关系;

    适合做社交网络、关系图谱;

    代表数据库:Neo4JOrientDB

2. Redis概述

1、Redis是一个键值对类型的内存数据库;

2、Redis支持字符串、哈希、列表、集合、有序集合等数据结构;

3、Redis具有内置的数据复制、回收、事务和不同级别的磁盘上的持久性;

4、Redis是纯内存操作,具备很高的读写性能;读的速度能达到110000次/s,写的速度能达到81000次/s;

5、Redis支持主从模式的数据备份,数据可扩展性高;

6、Redis支持集群;

2.1 Redis的使用场景

  1. 缓存:缓存一些常用数据、缓存Session会话等
  2. 排行榜
  3. 简单的消息队列
  4. 好友关系:点赞、好友推荐等

3. Redis单机版安装

​ Redis官方只提供了linux的安装版本,不提供windows的安装版本,但是微软使用Redis源码编译了一个windows的版的Redis安装包;

​ Window64位下载地址:https://github.com/MicrosoftArchive/redis/releases

3.1 Windows安装Redis

  1. 解压redis安装文件

在这里插入图片描述

  1. 启动redis服务,双击redis-server.exe即可

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EvCrBTur-1603456273573)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1588648093825.png)]

  2. 命令行方式启动redis服务

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9hRR6PtM-1603456273575)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1588648513897.png)]

  3. 启动redis客户端

    双击redis-cli.exe

3.2 Centos7安装单机版Redis5.0.4

  1. 安装Development Tools

    yum groupinstall -y "Development Tools"

  2. 上传安装包redis-5.0.4.tar.gz/opt目录

  3. 解压redis-5.0.4.tar.gz/opt目录

    tar -zxf redis-5.0.4.tar.gz -C /opt

  4. 开始安装redis

    [root@localhost opt]# mv redis-5.0.4 redis
    [root@localhost opt]# cd redis
    [root@localhost redis]# make

  5. 测试安装

    [root@localhost redis]# cd src/

    [root@localhost src]# make install
    CC Makefile.dep
    Hint: It's a good idea to run 'make test' ;)
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install

  6. 修改配置文件(/opt/redis/redis.conf)

    1、bind 127.0.0.1 注释这一行

    2、protected-mode no (将保护模式修改为no)

    3、daemonize yes (设置为守护进程,把no改为yes)

  7. 启动redis server

    redis-server /opt/redis/redis.conf

  8. 启动redis-cli客户端

    redis-cli [-h 127.0.0.1 -p 6379 -a 密码]

    -h:host,连接主机,默认连接127.0.0.1

    -p:port,redis服务器端口号,默认连接端口是6379

    -a:auth,redis登录密码

  9. 停止redis服务

    redis-cli shutdown

4. Redis的多数据库特点

  • Redis默认支持16个数据库,以一个从0开始的递增数字命名

  • 可以通过redis.conf中的databases配置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jYE0nZB-1603456273583)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1588662282392.png)]

  • 客户端连接Redis服务器后会自动选择0号数据库,可以通过SELECT 数据库id更换数据库,例如选择15号数据库

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7A1FwQhZ-1603456273587)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1588662343202.png)]

  • Redis多数据库特点

    1. 不支持自定义数据库名称。
    2. 不支持为每个数据库设置访问密码。
    3. 多个数据库之间不是完全隔离的,FLUSHALL命令会清空所有数据库的数据。
    4. 多数据库不适用存储不同应用的数据。
    5. Redis集群不支持多数据库。

5. Redis常用的全局命令

  1. keys *:查看所有的键,支持通配符查询,如:keys name*

  2. exists key:测试是否存在指定的key,存在返回1,不存在返回0

  3. ttl key:查看key的剩余有效时间,-1代表永不过期,-2表示key已经过期

  4. expire key seconds:设置key的过期时间,单位是秒

  5. del key:删除某个key

  6. rename key newkey:修改key的名称

  7. flushall:清空所有数据(会跨库清空数据)

  8. info [section]:查看数据信息,info Server,info CPU、info Replication

  9. persist key:取消key的过期时间

6. Redis的数据类型

6.1 string类型

​ string类型是redis中最基本的类型,并且是二进制的安全的,可以存储序列化的对象、二进制图片、一个简单的字符串、数值等。一个字符串类型的键允许存储的数据最大容量是512MB。

特别注意msetmget在集群环境下无法使用;

6.2 hash类型

​ hash是一个string类型的field和value的映射表。特别适合存储对象,将一个对象存储在hash类型中会占用更少的内存,而且可以方便的操作对象。

6.3 list类型

​ list是一个链表结构,类似JDK的LinkedList、Queue,主要功能是push、pop、获取一个范围的所有值等等,key可以认为链表的名称。list类型的每个子元素都是string类型的双向链表,可以通过push、pop从链表的头部或者尾部添加、删除元素;

6.4 set类型

​ set是string类型的无序不可重复的集合。Set是通过hash table实现的,添加、删除和查找的复杂度都是o(1)。我们可以对set取并集、交集、差集。通过set的这些操作我们可以实现好友推荐功能。

6.5 zset类型

​ zset有序集合,类似SortedSet。

7. 使用Jedis连接Redis服务器

  1. jedis的源码地址

    https://github.com/xetorthio/jedis

  2. maven依赖

    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>3.2.0</version>
    </dependency>
    
  3. api

    JedisPoolConfig:连接池配置(连接池大小等)

    JedisPool:连接池(保存Jedis实例)

    Jedis:从连接池获取的实例,用于操作Redis

  4. 单机版Demo

StandaloneUtil

/**
 * jedisPoolConfig
 * jedisPool
 * Jedis
 */
public class StandaloneUtil {
   
    private StandaloneUtil(){
   }
    //最大连接数
    private static final int MAX_TOTAL = 5;
    //最大空闲数
    private static final int MAX_IDLE = 5;
    //最小空闲数
    private static final int MIN_IDLE = 1;
    //主机号  端口号
    private static final String HOST = "192.168.233.128";
    private static final int PORT = 6379;

    private static final JedisPoolConfig poolConfig = new JedisPoolConfig();
    private static final JedisPool jedisPool;
    static {
   
        poolConfig.setMaxTotal(MAX_TOTAL);
        poolConfig.setMaxIdle(MAX_IDLE);
        poolConfig.setMinIdle(MIN_IDLE);
        jedisPool = new JedisPool(poolConfig,HOST,PORT);
    }

	private static final ThreadLocal<Jedis> threadLocal = new ThreadLocal<>();
    //获取实例对象
    public static Jedis getInstance(){
   
        Jedis jedis = threadLocal.get();
        if(jedis==null){
   
            jedis = jedisPool.getResource();
            threadLocal.set(jedis);
        }
        return jedis;
    }

    public static void close(){
   
        Jedis jedis = threadLocal.get();
        if(jedis != null){
   
            //关闭自动回到线程池
            jedis.close();
            threadLocal.remove();
        }
    }
}

StandaloneTest

public class StandaloneTest {
   
    public static void main(String[] args) {
   
        //officalDemo();
        Jedis instance1 = StandaloneUtil2.getInstance();
        Jedis instance2 = StandaloneUtil2.getInstance();
        Jedis instance3 = StandaloneUtil2.getInstance();
        Jedis instance4 = StandaloneUtil2.getInstance();
        System.out.println(instance1);
        System.out.println(instance2);
        System.out.println(instance3);
        System.out.println(instance4);
    }
    public static void officalDemo(){
   
        //创建jedis实例 默认链接6379端口号
        Jedis jedis = new Jedis("192.168.233.128",6379);
        //使用jedis实例操作redis数据库
        jedis.set("foo","bar");
        String value = jedis.get("foo");
        System.out.println(value);
    }
    public static void demo1(){
   
        Jedis jedis = StandaloneUtil.getInstance();
        jedis.hset("user","name","zs");
        jedis.hset("user","id","1");
        Set <String> hkeys = jedis.hkeys("user");
        hkeys.forEach(System.out::println);
        StandaloneUtil.close();
    }

}

8. Jedis整合spring

  1. maven依赖

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>3.2.0</version>
    </dependency>
    
  2. 配置spring bean

    JedisPoolConfig

    JedisPool

     @Configuration
     public class StandaloneConfig {
         
     
         @Bean
         public LikeService likeService(){
         
             return new LikeService();
         }
     
         @Bean
         public JedisPoolConfig poolConfig(){
         
             JedisPoolConfig poolConfig = new JedisPoolConfig();
             poolConfig.setMinIdle(1);
             poolConfig.setMaxIdle(30);
             poolConfig.setMaxTotal(30
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值