首页 > 数据库 >redis基础

redis基础

时间:2023-06-23 15:06:20浏览次数:45  
标签:redis 基础 System println Redis redisTemplate out

1. 什么时redis  1

Redis是一个基于内存的key-value结构数据库。

●基于内存存储, 读写性能高

●适合存储热点数据( 热点商品、资讯、新闻)

●企业应用广泛

2. redis入门   2

2.1 redis简介  2

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker,翻译为: Redis是 一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。

官网: https://redis.io

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS ( 每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

NoSql (Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。

2.1.1 关系型数据库(RDBMS)

➢Mysql

➢Oracle

➢DB2

➢SQLServer

2.1.2 非关系型 数据库(NoSql)

➢Redis

➢Mongo db

➢MemCached

2.2 Redis应用场景    2

➢缓存

➢任务队列

➢消息队列

➢分布式锁

2.3 下载和安装    2

Redis安装包分为windows版和Linux版:

●Windows版 下载地址: https://github.com/microsoftarchive/redis/releases

●Linux版 下载地址: https://download.redis.io/releases/

https://download.redis.io/releases/

redis基础_redis

2.3.1 在Linux系统安装Redis步骤   2

1.将Redis安装包上传到Linux

redis基础_Redis_02

redis基础_redis_03

2.解压安装包,命令: tar -zxvf redis-4.0.0.tar.gz -C /usr/local

redis基础_redis_04

redis基础_Redis_05

3.安装Redis的依赖环境gcc,命令: yum install gcc-C++

redis基础_redis_06

redis基础_Redis_07

4.进入/usr/local/redis-4.0.0,进行编译,命令: make

redis基础_Redis_08

5.进入redis的src目录,进行安装,命令: make install

redis基础_spring_09

redis基础_Redis_10

2.3.2 在windows安装redis   2

这里我解压到E:\java\tools\Redis\ziliao\Redis-x64-3.2.100

redis基础_Redis_11

redis基础_redis_12

2.4 在linux中启动redis  3

启动和连接   3

redis基础_redis_13

启动服务

redis基础_spring_14

redis基础_Redis_15

连接redis

打开一个新的窗口,启动

redis基础_spring_16

redis基础_Redis_17

连接

redis基础_redis_18

查看

redis基础_redis_19

停止redis服务ctrl+c

修改配置文件使之在后台运行

redis基础_redis_20

因为文件数据很大,我们可以先查找使用  /

redis基础_Redis_21

修改保存退出

redis基础_redis_22

再次运行即可

redis基础_spring_23

客户端依旧可以连接

redis基础_redis_24

设置redis密码   4

redis基础_Redis_25

redis基础_Redis_26

再次启动服务

redis基础_redis_27

连接

redis基础_redis_28

输入密码

redis基础_Redis_29

还可以登陆的同时输入密码

redis基础_redis_30

远程连接redis

我们在winows中远程连接linux中的redis服务

redis基础_Redis_31

redis基础_redis_32

注释保存退出

redis基础_spring_33

开启服务

redis基础_spring_34

设置防火墙

redis基础_spring_35

按住shift+鼠标右键,选择在此处打开powershell窗口

redis基础_redis_36

redis基础_Redis_37

2.5 在windows系统启动服务  3

启动服务

redis基础_Redis_38

redis基础_Redis_39

启动客户端

redis基础_Redis_40

redis基础_redis_41

3. 数据类型     4

3.1 介绍   4

Redis存储的是key-value结构的数据,其中key是字符串类型,value有 5种常用的数据类型:

●字符串string

●哈希hash

●列表list

●集合set

●有序集合sorted set

3.2  五中常见的数据类型   4

redis基础_spring_42

4. 常用命令   5

为了方便起见我们使用windows的redis

4.1 字符串string操作命令    5

redis基础_spring_43

redis基础_spring_44

redis基础_Redis_45

redis基础_redis_46

4.2 哈希hash操作命令   6

redis基础_Redis_47

redis基础_Redis_48

redis基础_redis_49

redis基础_Redis_50

4.3 列表list 操作命令  7

redis基础_Redis_51

redis基础_Redis_52

redis基础_Redis_53

redis基础_spring_54

redis基础_redis_55

4.4 集合set操作命令   8

redis基础_spring_56

redis基础_spring_57

redis基础_spring_58

redis基础_Redis_59

redis基础_redis_60

redis基础_spring_61

redis基础_Redis_62

redis基础_spring_63

4.5 有序集合sorted set操作命令   8

redis基础_spring_64

redis基础_redis_65

redis基础_spring_66

redis基础_spring_67

4.6 通用命令   9

redis基础_redis_68

redis基础_redis_69

redis基础_redis_70

redis基础_spring_71

redis基础_redis_72

redis基础_Redis_73

5. 在java中操作Redis   10

5.1 介绍   10

Redis的Java客户端很多,官方推荐的有三种:

●Jedis

●Lettuce

●Redisson

Spring对Redis客户端进行了整合,提供了Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis

5.2 jedis    10

Jedis的maven坐标:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.0</version>
</dependency>

5.2.1 使用Jedis操作Redis的步骤:   10

①获取连接

②执行操作

③关闭连接

代码在jedis_demo项目测试com.itheima.test

JedisTest

package com.itheima.test;

import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.Set;

/**
 * 使用Jedis操作Redis   10
 */
public class JedisTest {

    @Test
    public void testRedis(){
        //1 获取连接
        Jedis jedis = new Jedis("localhost",6379);

        //2 执行具体的操作,设置string类型
        jedis.set("username","xiaoming");

        //3 关闭连接
        jedis.close();
    }
}

redis基础_redis_74

package com.itheima.test;

import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.Set;

/**
 * 使用Jedis操作Redis   10
 */
public class JedisTest {

    @Test
    public void testRedis(){
        //1 获取连接
        Jedis jedis = new Jedis("localhost",6379);

        //2 执行具体的操作,设置string类型
        jedis.set("username","xiaoming");

        String value = jedis.get("username");
        System.out.println(value);


        //删除
//        jedis.del("username");

        jedis.hset("myhash","addr","bj");
        String hValue = jedis.hget("myhash", "addr");
        System.out.println(hValue);

        System.out.println("==================");
        //查看所有的key
        Set<String> keys = jedis.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //3 关闭连接
        jedis.close();
    }
}

5.3 Spring Data Redis   11

Spring Data Redis中提供了一个高度封装的类: RedisTemplate, 针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

●ValueOperations: 简单K-V操作

●SetOperations: set类型数据操作

●ZSetOperations: zset类型数据操作

●HashOperations:针对map类型的数据操作

●ListOperations: 针对list类型的数据操作

redis基础_Redis_75

代码在springdataredis_demo项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.itheima</groupId>
    <artifactId>springdataredis_demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml

spring:
  application:
    name: springdataredis_demo
  #Redis相关配置
  redis:
    host: localhost
    port: 6379
    #password: 123456
    database: 0 #操作的是0号数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接

代码在 测试 com.itheima.test SpringDataRedisTest

操作String类型数据   11

//测试String类
    @Test
    public void testString(){
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("city","beijing");
    }

执行程序,去客户端查

redis基础_redis_76

不仅找不到,还乱码,这是因为RedisTemplate这个类在操作redis的时候对key进行了序列化

我们需要提供一个配置类进行反序列化

反序列化配置类

代码在 main com.itheima.config RedisConfig   11

package com.itheima.config;

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis配置类   11
 * 作用反序列化
 */

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

}

配置好后,再次运行程序

redis基础_spring_77

package com.itheima.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

//演示Spring Data Redis   11

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Resource
    private RedisTemplate redisTemplate;

    //测试String类
    @Test
    public void testString(){
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("city123","beijing");
        String value = (String) redisTemplate.opsForValue().get("city123");
        System.out.println(value);

        //设置有过期时间的String类型  12
        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);

        //如果已经存在则设置不成功
        //Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city123", "nanjing");
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
        System.out.println(aBoolean);
    }

}

操作hash类型数据   12

/**
     * 操作Hash类型数据   12
     */
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();

        //存值
        hashOperations.put("002","name","xiaoming");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","bj");

        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);

        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }

        System.out.println("=================");

        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }

redis基础_Redis_78

操作list类型的数据   12

/**
     * 操作List类型的数据   12
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();

        //存值
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");

        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }

        System.out.println("===============");

        //删除队列中的元素
        //获得列表长度 llen
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();  //类型转换将long类型转为int
        for (int i = 0; i < lSize; i++) {
            //出队列
            String element = (String) listOperations.rightPop("mylist");
            System.out.println(element);
        }
    }

redis基础_Redis_79

操作Set类型的数据  13

/**
     * 操作Set类型的数据   13
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();

        //存值
        setOperations.add("myset4","a","b","c","a");

        //取值
        Set<String> myset = setOperations.members("myset4");
        for (String o : myset) {
            System.out.println(o);
        }

        //删除成员
        setOperations.remove("myset4","a","b");

        System.out.println("=======================");
        //取值
        myset = setOperations.members("myset4");
        for (String o : myset) {
            System.out.println(o);
        }

    }

redis基础_Redis_80

操作ZSet类型的数据  13

/**
     * 操作ZSet类型的数据   13
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","c",12.0);
        zSetOperations.add("myZset","a",13.0);

        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        System.out.println("========================");
        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //删除成员
        zSetOperations.remove("myZset","a","b");

        System.out.println("============================");

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
    }

redis基础_redis_81

通用命令操作  14

/**
     * 通用操作,针对不同的数据类型都可以操作  14
     */
    @Test
    public void testCommon(){
        //获取Redis中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        System.out.println("=====================");

        //判断某个key是否存在
        Boolean itcast = redisTemplate.hasKey("itcast");
        System.out.println(itcast);

        //删除指定key
        redisTemplate.delete("myZset");

        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());

        //返回给定key剩余生存时间
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("id","zhangsan",20l,TimeUnit.SECONDS);
        Long id = redisTemplate.getExpire("id");
        System.out.println(id);

    }

redis基础_Redis_82

标签:redis,基础,System,println,Redis,redisTemplate,out
From: https://blog.51cto.com/u_15784725/6537944

相关文章

  • Java基础之基本数据类型封装类的缓存
    巨人的肩膀:https://blog.csdn.net/hnjcxy/article/details/1237872091、Java中基本数据类型byte、short、char、int、long、float、double、boolean有对应的封装类型:Byte、Short、Character、Integer、long、Float、Double,Boolean其中Byte、Short、Character、Integer、Long、Bo......
  • 自然语言处理必读经典-统计自然语言处理基础
    本书介绍    近年来,统计方法已经成为处理自然语言文本主流。本书是第一本全面介绍统计自然语言处理的基础文本。本书包含了构建自然语言处理工具所需的所有理论和算法。它提供了广泛但严格的数学和语言学基础,以及统计方法的详细讨论,允许学生和研究人员构建自己的代码和模型。这......
  • xpath解析基础
    1.xpath基础用法: 2.class定位属性 3.索引定位,定位到`苏轼`,注意是从1开始计算: 4.text()方法取文本: 5.text()方法取文本_2: 6.text()获取文本_3:获取tang标签下面所有的文本内容: 7.@属性名称,获取属性值: ......
  • ML、DL、NLP面试常考知识点、代码、算法理论基础汇总分享
        此项目是机器学习(MachineLearning)、深度学习(DeepLearning)、NLP面试中常考到的知识点和代码实现,也是作为一个算法工程师必会的理论基础知识。项目介绍    •此项目是机器学习、NLP面试中常考到的知识点和代码实现,也是作为一个算法工程师必会的理论基础知识。  ......
  • 人工智能数学基础-数据科学中的概率统计学
        数据科学是一个研究领域,涉及通过使用各种科学方法,算法和过程从大量数据中提取见解。它可以帮助您从原始数据中发现隐藏的模式,允许您从结构化或非结构化数据中提取知识。数据科学主要以统计学、机器学习、数据可视化以及领域知识为理论基础,其主要研究内容包括数据科学基础理......
  • 机器学习基础教材-《统计学习与数据分析介绍》
    本书介绍    本入门级统计教科书主要讲解发展和培养统计思维所需的基本概念和工具。它提供了描述性,归纳性和探索性的统计方法,并指导读者完成定量数据分析的过程。在实验科学和跨学科研究中,数据分析已成为任何科学研究的组成部分。诸如判断数据的可信度,分析数据,评估所获得结果的......
  • 【redis已解决】Warning: no config file specified, using the default config. In o
    1.启动redis:双击redis-server.exe。报错:Warning:noconfigfilespecified,usingthedefaultconfig.InordertospecifyaconfigfileuseF:\liuf\Redis3\redis-server.exe/path/to/redis.conf 2.解决方法一:点击这个报错表示没有指定配置文件,使用默认配置。要指......
  • 速递-因果推理原理:基础与学习算法
            推荐一本详细讲解因果推理原理的新书,本书2020年初刚刚Release出来,需要的朋友自取。对该领域理解有限,翻译不太准确,望见谅。  bshq:2020年新书速递-《因果推理原理:基础与学习算法》分享前沿概述    因果关系推理(Causality)是一个非常有趣的研究课题。最近才开......
  • 机器学习基础-统计学习-SLT
        万普尼克(Vapnik)建立的一套机器学习理论,使用统计的方法,因此有别于归纳学习等其它机器学习方法。由这套理论所引出的支持向量机对机器学习的理论界以及各个应用领域都有极大的贡献,一般情况下弗拉基米尔-万普尼克理论是香农实验室奠基资料和自身的数学背景。     目前理......
  • 2020年新书速递-《因果推理原理:基础与学习算法》分享
            推荐一本详细讲解因果推理原理的新书,本书2020年初刚刚Release出来,需要的朋友自取。对该领域理解有限,翻译不太准确,望见谅。     文末附本书下载pdf地址。 前沿概述    因果关系推理(Causality)是一个非常有趣的研究课题。最近才开始研究隐藏在其背后的数学......