苍穹外卖--Redis

1.Redis入门

1.1Redis简介

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

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

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

企业应用广泛

Redis的Windows版属于绿色软件,直接解压即可使用,解压后目录结构如下:

1.2Redis服务启动与停止

进入存放Redis文件内,然后启动cmd,输入

复制代码
redis-server.exe redis.windows.conf

启动服务器

按ctrl+c结束服务

进入存放Redis文件内,然后启动cmd,输入

复制代码
redis-cli.exe或redis-cli.exe -h localhost -p 6379如果有密码的话输入redis-cli.exe -h localhost -p 6379 -a xxxx

就进入了控制台了,输入exit停止控制台

点击redis.windows.conf文件,进入其中找到requirepass foobared,这个就是修改密码的地方

可视化界面链接内容

2.Redis数据类型

2.1、5种常用数据类型介绍

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

字符串 String

哈希 hash

列表 list

集合 set

有序集合 sorted set/zset

2.2各种数据类型的特点

字符串(string):普通字符串,Redis中最简单的数据类型

哈希(hash):也叫散列,类似于java中的HashMap结构

列表(list):按照插入顺序排序,可以有重复元素,类似于java中的LinkedList

集合(set):无序集合,没有重复元素,类似与Java中的HashSet

有序集合(sotred set/zset):集合每个元素关联一个分数(score),根据分数升序排序,没有重复元素

3.Redis常用命令

3.1字符串操作命令

Redis字符串类型操作命令:

SET key value 设置指定key的值

GET key 获取指定key的值

SETEX key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒

SETNX key value 只有在key不存在时设置key的值

3.2哈希操作命令

Redis hash是一个string类型的field和value的映射表,hash特别时候用于存储对象,常用命令:

HSET key field value 将哈希表key中的字段field的值设为value

HGET key field 获取存储在哈希表中指定字段的值

HDEL key field 删除存储在哈希表中的指定字段

HKEYS key 获取哈希表中所有字段

HVALS key 获取哈希表中所有值

3.3列表操作命令

Redis列表是最简单的字符串列表,按照插入顺序排序,常用命令:

LPUSH key value1 value2 将一个或多个值插入到列表头部

LRANGE key start stop 获取列表指定范围内的元素

RPOP key 移除并获取类别最后一个元素

LLEN key 获取列表长度

3.4集合操作命令

Redis set是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:

SADD key member1 member2 向集合添加一个或多个成员

SMEMBERS key 返回集合的成员数

SCARD key 获取集合的成员数

SINTER key1 key2 返回给定所有集合的交集

SUNION key1 key2 返回所有给定集合的并集

SREM key member1 member2 删除集合中一个或多个成员

3.5有序集合操作命令

Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分类。常用命令:

ZADD key score1 member1 score2 member2 向有序集合添加一个或多个成员

ZRANGE key start stop WITHSCORES 通过索引区间返回有序集合中指定区间内的成员

ZINCRBY key increment member 有序集合中对指定成员的分类加上增量increment

ZREM key member member 移除有序集合中的一个或多个成员

3.6通用命令

KEYS pattern 查找所有符合给定模式(pattern)的key

EXISTS key 检查给定key是否存在

TYPE key 返回key所储存的值的类型

DEL key 该命令用于key存在是删除key

4.在Java中操作Redis

4.1Redis的java客户端

Redis的Java客户端很多,常用的几种:

Jedis

Lettuce

Spring Data Redis

Spring Data Redis是spring的一部分,对Redis底层开发包进行了高度封装。

在Spring项目中,可以使用spring Data Redis来简化操作。

4.2Spring Data Redis使用方式

操作步骤:

①导入Spring Data Redis的maven坐标

②配置Redis数据源

③编写配置类,创建RedisTemplate对象

复制代码
package com.sky.config;

import lombok.extern.slf4j.Slf4j;
import lombok.val;
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;

@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置Redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

④通过RedisTemplate对象操作Redis

复制代码
package com.sky.test;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
        ValueOperations valueOperations = redisTemplate.opsForValue();
        HashOperations hashOperations = redisTemplate.opsForHash();
        ListOperations listOperations = redisTemplate.opsForList();
        SetOperations setOperations = redisTemplate.opsForSet();
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

    }

    /**
     *操作字符串类型的数据
     */
    @Test
    public void testString(){
        //set get setex setnx
        redisTemplate.opsForValue().set("city","北京");
        String city = (String) redisTemplate.opsForValue().get("city");
        System.out.println(city);
        redisTemplate.opsForValue().set("code","123",2, TimeUnit.MINUTES);
        redisTemplate.opsForValue().setIfAbsent("lock","1");
        redisTemplate.opsForValue().setIfAbsent("lock","2");
    }

    /**
     * 操作哈希类型的数据
     */
    @Test
    public void testHash(){
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();

        hashOperations.put("100","name","tom");
        hashOperations.put("100","age","20");

        String name = (String) hashOperations.get("100","name");
        System.out.println(name);

        Set keys = hashOperations.keys("100");
        System.out.println(keys);

        List values = hashOperations.values("100");
        System.out.println(values);

        hashOperations.delete("100","age");
    }

    /**
     * 操作列表类型的数据
     */
    @Test
    public void testList(){
        //lpush lrange rpop llen
        ListOperations listOperations = redisTemplate.opsForList();

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

        List mylist = listOperations.range("mylist", 0, -1);
        System.out.println(mylist);

        listOperations.rightPop("mylist");

        Long mylist1 = listOperations.size("mylist");
        System.out.println(mylist1);
    }

    /**
     * 操作集合类型的数据
     */
    @Test
    public void testSet(){
        //sadd smembers scard sinter sunion srem
        SetOperations setOperations = redisTemplate.opsForSet();

        setOperations.add("set1","a","b","c","d");
        setOperations.add("set2","a","b","x","y");

        Set set1 = setOperations.members("set1");
        System.out.println(set1);

        Long size = setOperations.size("set1");
        System.out.println(size);

        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);

        Set union = setOperations.union("set1", "set2");
        System.out.println(union);

        setOperations.remove("set1","a","b");
    }

    /**
     * 操作有序集合类型的数据
     */
    @Test
    public void testZset(){
        //zadd zrange zincrby zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",12);
        zSetOperations.add("zset1","c",9);

        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);

        zSetOperations.incrementScore("zset1","c",10);

        zSetOperations.remove("zset1","a","b");
    }

    /**
     * 通用命令操作
     */
    @Test
    public void testCommon(){
        //keys exists type del
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);

        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.delete("set1");

        for (Object key : keys){
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
        }

        redisTemplate.delete("mylist");
    }
}
相关推荐
小马爱打代码1 小时前
SpringBoot + Redis Stream + 消费组:替代 Kafka 轻量级消息队列,低延迟高吞吐
spring boot·redis
Code_Artist1 小时前
盘点Redis的常见使用场景,拜托不要再只会Get&Set一坨数据啦!
redis·后端·面试
逻极3 小时前
Redis 从入门到精通:缓存设计与实战
数据结构·redis·缓存·哨兵集群
夜白宋3 小时前
【Redis深入】二、高性能
java·前端·redis
小马爱打代码3 小时前
基于Redis发布订阅实现轻量级多级缓存方案
数据库·redis·缓存
我是一颗柠檬17 小时前
【Java后端技术亮点】热Key探测与本地缓存二级防护:Redis热点问题的终极解决方案
java·redis·后端·缓存·中间件
cfm_291418 小时前
Redis高并发缓存架构设计与性能优化实战
redis·缓存·性能优化
画江湖Test18 小时前
Redis 块的原理
数据库·redis·缓存·性能优化
海市公约19 小时前
Redis主从复制全量同步七步时序与命令传播机制详解
数据库·redis·缓存·主从复制·高可用架构·全量同步
小马爱打代码19 小时前
Redis 和 MySQL 双写一致性:延迟双删、读写锁、MQ、Canal 怎么选?
数据库·redis·mysql