Redis复习笔记

文章目录

  • Redis
    • 什么是Redis?
    • 为什么要使用Redis?
    • Redis如何使用?
          • 安装:
    • Redis配置文件
        • 开始使用
        • 常用命令key管理
        • key命名规范
        • 五种Redis最常用数据类型
            • String命令===Java的String字符串
            • String应用场景
            • Hash类型==Java的Map
            • 应用场景
          • Redis整合SpringBoot
            • set类似java的HashTable集合(无序)
            • 应用长场景
            • zset类似java的HashTable集合(有序)
            • 应用长场景

Redis

什么是Redis?

  1. 遵守Bsd协议:可以随意修改代码重新发布,自定义强,开源免费
  2. 是一个高性能的Nosql(Key-Value)数据库,非关系型数据库
  3. 数据放在内存中读取速度极快,但耗内存,支持数据的持久化:定时快照,基于aof两种持久化机制;一般配合使用

为什么要使用Redis?

  1. 传统的关系型数据库,对高并发读写的需求不能满足,性能比较低,Redis非关系型数据库数据存放在内存中所以速度极快,极大的减轻了关系型数据库的负担
  2. Redis产生解决了大规模数据,多重属数据类型产生的复杂性问题
  3. 可以简单解决诸多复杂场景应用,如:设置数据过期时间;网站访问点击量;缓存;热点数据;排行榜;消息系统,,等等

Redis如何使用?

安装:

Redis中文网:http://www.redis.cn/download.html

  1. 安装gcc环境:yum install -y gcc gcc-c++
    Redis复习笔记_第1张图片

  2. 解压到opt目录:tar -zxvf redis-5.0.7.tar.gz -C /opt
    Redis复习笔记_第2张图片

  3. 进入redis解压目录进行编译:make
    Redis复习笔记_第3张图片Redis复习笔记_第4张图片

  4. 在该目录下执行安装:make PREFIX=/usr/local/redis install
    Redis复习笔记_第5张图片

  5. 启动:进入redis安装目录执行./bin/redis-server启动服务端
    Redis复习笔记_第6张图片

  6. 新建命令窗口启动客户端:./bin/redis-cli
    Redis复习笔记_第7张图片
    到此安装完成,可通过ctrl+c退出两个客户端

Redis配置文件

  1. 首先进行redis.conf配置文件进行备份:cp redis.conf /usr/local/redis
    Redis复习笔记_第8张图片
  2. 配置文件介绍
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#注释掉这一行,不然只能在本机访问redis
#bind 127.0.0.1   


protected-mode yes

#Redis默认端口号
port 6379


tcp-backlog 511

#客户端闲置多长时间关闭,0的话代表不开启此功能
timeout 0


tcp-keepalive 300

#redis默认不是守护进程启动,开启守护进程把参数变为yes
daemonize no



supervised no


#守护进程启动时redis会把pid写入这个文件中
pidfile /var/run/redis_6379.pid

#记录日志级别共四个级别:debug,verbose,notice,warning
loglevel notice
#日志记录方式
logfile ""

#设置数据库数数量,默认提供16个
databases 16

#指定多长时间内,有多少次更新操作就会同步到数据文件(持久化)
save 900 1
save 300 10
save 60 10000


stop-writes-on-bgsave-error yes

#压缩持久化文件
rdbcompression yes


rdbchecksum yes

# 数据持久化到硬盘的文件名称
dbfilename dump.rdb

#持久化文件放到当前文件目录下
dir ./

#设置数据库密码默认没有
requirepass foobared

开始使用

首先要想用可视化连接需要设置redis的密码:修改配置文件
Redis复习笔记_第9张图片

常用命令key管理

keys *#返回满足的所有键,可以模糊匹配如:keys asb*
exists key #是否存在指定的key,存在返回1,不存在返回0
expire key secode #设置某个key的过期时间,单位秒
del key #删除某个key
ttl key #查看剩余时间,当key不存在时返回-2,存在但没有设置剩余生存时间,返回-1,否则,以秒为单位,返回key的剩余生存时间
persist key #取消过期时间
PEXPIRE key millisecodes: #修改key的过期时间为毫秒
select #选择数据库 0-15(默认16个数据库),多个数据库是为了数据的安全和备份
move key dbundex #将当前数据中的key转移到其他数据库
randomkey #随即返回一个key
rename key key2 #重命名key
echo #打印命令
dbsize #查看数据库中key的数量
info #查看数据库信息
config get #实时存储收到的请求,返回相关的配置
flushdb #清空当前的数据库
flushdball #清空所有的数据库

key命名规范

  1. key不要太长,不然小号内存,降低查询效率
  2. key不要太短,太短可读性差
  3. 在一个项目中key最好使用统一的命名规范如
  4. key区分大小写

五种Redis最常用数据类型

String命令===Java的String字符串

简介

  1. String是Redis最基本的数据类型,一个键最大能存储512MB
  2. String数据结构最简单的key-value类型,value不仅是字符串,也可以是数字,是包含很多种类型的特殊类型
  3. String类型是二进制安全的,可以包含任意数据,如:序列化的对象存储,一张图片进行二进制存储,一个简单的字符串数值等等

命令

set key  value   #指定一个key赋值,多次设置相同的key会覆盖之前的值
setnx key1 value #如果key不存在设置该值并返回1,若存在不进行任何操作返回0
setex key 10 tiantian 设置key的过期时间为10秒。10秒后删除该key
settrange string range value #替换字符串 


get key #根据key去除value,不存在返回nil
getrange key start end #用于获取存储在指定key中字符串指定的子字符串,包括start和end
getbit key offset #获取key所存储的字符串值,获取指定偏移量的位
getset key name #指定key的值并返回之前的旧值,当key为空时返回nil
strlen key #返回key所存储的字符串值的长度


del key #删除指定key,如果存在返回值数字类型
incr num #自增,将value存储的值自增加一
decr num #自减
String应用场景
  1. string通常用于保存单个字符串或json字符串数据
  2. 因为string时二进制安全的,所以完全可以把一个图片的内容作为字符串来存储
  3. 计数器(微博粉丝,点击量,短信验证码,投票等等)
Hash类型==Java的Map

简介

  1. 适合存储对象,比string占用更少内存空间

命令

hset key field value #设置键值
hmset key field1 value1 field2 value2 #可以一次设置多个值

hget key field #获取存储到hash中的值根据field获取value
hmget key field field2 #一次获取多个值
hgetall  key #获取所有字段和值

hkeys key #获取所有哈希表中的字段
hlen key #获取哈希表中字段的数量

hdel key field1 ... #删除指定field的值

hsernx key field value #只有在字段field不存在时,设置字段值
hincrby key field increment #为指定整型值增加increment
hexists key field #查看是否存在
应用场景
  1. 存储一个用户信息数据,他是最接近关系型数据库的类型,操作对象比string更加方便
  2. 存储的其实是一个heshmap
Redis整合SpringBoot

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>boot-JedisartifactId>
    <version>1.0-SNAPSHOTversion>

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.2.2.RELEASEversion>
    parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
        dependency>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
        dependency>
        <dependency>
            <groupId>redis.clientsgroupId>
            <artifactId>jedisartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
        dependency>
    dependencies>

project>

全局配置文件,一般不用了解就好

server:
  port: 8080
spring:
  redis:
    port: 6379
    password: root  #改成自己的
    host: 181.72.39.145 #改成自己的
    jedis:
      pool:
        max-idle: 6 #最大空闲数
        max-active: 10 #最大连接数
        min-idle: 2 #最小空闲数
    timeout: 5000 #连接超时

配置类

package site.tian.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
@Slf4j
public class JedisConfig {

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private int port;

    @Value("${spring.redis.password}")
    private String password;

    @Value("${spring.redis.timeout}")
    private int timeout;

    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxActive;

    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;

    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;

    @Bean
    public JedisPool jedisPool() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setMaxTotal(maxActive);

        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
        log.info("JedisPool连接成功"+host+"\t"+port);
        return jedisPool;
    }
}

推荐使用lettuce

 <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redisartifactId>
        dependency>
        <dependency>
            
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-pool2artifactId>
        dependency>
set类似java的HashTable集合(无序)
应用长场景

常用于两个集合间数据交集、并集、差集运算

  1. 利用集合操作,可以取不同兴趣圈子的交集,以非常方便的实现共同关注,二度好友等功能
  2. 利用唯一性们可以统计访问网站的所有独立ip,存取活跃用户
zset类似java的HashTable集合(有序)

有序不重复,

应用长场景

销量排行积分排名,主要是可以排序

你可能感兴趣的:(笔记,redis,java,mysql)