redis缓存详情

本文详细介绍了Redis的下载与安装,包括Windows版本的使用,以及Redis的数据类型、常用指令和在Java中的应用,包括通过SpringDataRedis进行操作的步骤和示例。
摘要由CSDN通过智能技术生成

redis安装包及图形化软件:

百度链接:https://pan.baidu.com/s/1wljo7JzgrSQyqldv9d5HZA?pwd=ht1m 
提取码:ht1m

目录

1.redis的下载及安装

1.1redis的启动与停止

1.2Redis服务启动与停止

2.redis数据类型及常用指令

2.1redis数据类型

 2.2redis常用指令

3.redis在java中的使用

3.1使用步骤

4.通过RedisTemplate对象操作Redis

(1).String类型数据的操作

        (2).hash类型数据的操作

(3).List类型数据的操作

        (4).ZSet类型数据的操作

        (5).Set类型数据的操作

        (6).通用指令的操作


redis介绍:Redis是一个基于内存key-value 结构数据库。

  1. 基于内存存储,读写性能高
  2. 适合存储热点数据(热点商品、资讯、新闻)
  3. 企业应用广泛

官网:https://redis.io

中文网:https://www.redis.net.cn/

1.redis的下载及安装

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

redis的windows版属于绿色软件,直接解压即可使用

  • 1.1redis的启动与停止

服务启动命令:redis-server.exe redis.windows.conf

Redis服务默认端口号为 6379通过快捷键Ctrl + C 即可停止Redis服务

  • 1.2Redis服务启动与停止

客户端连接命令:redis-cli.exe

通过redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口。也可以通过指定如下参数连接:

-h ip地址

-p 端口号

-a 密码(如果需要)

设置Redis服务密码,修改redis.windows.conf

Redis客户端图形工具:

连接后可以看到你redis中的数据,前提是redis服务需要一直开启

2.redis数据类型及常用指令

2.1redis数据类型

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

类型说明
字符串(string)普通字符串,Redis中最简单的数据类型
哈希(hash)也叫散列,类似于Java中的HashMap结构
列表(list)按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
集合(set)无序集合,没有重复元素,类似于Java中的HashSet
有序集合(sorted set / zset)集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

 2.2redis常用指令

  • 字符串常用命令
命令        说明
SET key value

设置指定key的值

GET key

获取指定key的值

SETEX key seconds value

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

SETNX key value

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

  • 哈希常用命令

Redis hash 是一个string类型的 field value 的映射表,hash特别适合用于存储对象

命令说明
HSET key field value 将哈希表 key 中的字段 field 的值设为 value
HGET key field 获取存储在哈希表中指定字段的值
HDEL key field 

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

HKEYS key 获取哈希表中所有字段
HVALS key   获取哈希表中所有值
  • 列表常用命令 

Redis 列表是简单的字符串列表,按照插入顺序排序

命令说明
LPUSH key value1 [value2]

将一个或多个值插入到列表头部(左边)

LRANGE key start stop

获取列表指定范围内的元素

RPOP key

移除并获取列表最后一个元素(右边)

LLEN key 获取列表长度
  • 集合常用命令

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

命令说明
SADD key member1 [member2] 向集合添加一个或多个成员
SMEMBERS key 返回集合中的所有成员
SCARD key

获取集合的成员数

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

返回所有给定集合的并集

SREM key member1 [member2] 删除集合中一个或多个成员
  • 有序列表命令

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

命令说明
ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
ZINCRBY key increment member   有序集合中对指定成员的分数加上增量 increment
ZREM key member [member ...]   移除有序集合中的一个或多个成员

  • 通用指令

Redis的通用命令是不分数据类型的,都可以使用的命令

命令说明
KEYS pattern 查找所有符合给定模式( pattern)key
EXISTS key

检查给定 key 是否存在

TYPE key

返回 key 所储存的值的类型

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

3.redis在java中的使用

3.1使用步骤

  • 1.导入Spring Data Redis maven坐标
<!--SpringDataRedis起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
  • 2.配置Redis数据源 

在resources的application.yml配置文件里面编写redis的配置信息

  • 3.编写配置类,创建RedisTemplate对象

        在config文件下创建Bean对象,springboot项目启动时,会自动将RedisTemplate放入IOC容器内

import lombok.extern.slf4j.Slf4j;
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();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;

    }
}
  • 4.通过RedisTemplate对象操作Redis

可以编写一个测试类,在测试类里面实现对各个redis数据类型的操作

需要先将RedisTemplate对象从ioc容器中拿出来使用

使用RedisTemplate创建各个数据类型对象

@Test
    public void testRedisTemplate(){
        //生成的对象可对字符串操作
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //生成的对象可对哈希表操作
        HashOperations hashOperations = redisTemplate.opsForHash();
        //生成的对象可对列表操作
        ListOperations listOperations = redisTemplate.opsForList();
        //生成的对象可对集合操作
        SetOperations setOperations = redisTemplate.opsForSet();
        //生成的对象可对有序列表操作
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }

(1).String类型数据的操作

//操作redis中string类型的数据
    @Test
    public void testString(){
        //SET key value			设置指定key的值
        redisTemplate.opsForValue().set("name","张三");
        //GET key			获取指定key的值
        String name = (String) redisTemplate.opsForValue().get("name");
        System.out.println(name);
        //SETEX key seconds value	设置指定key的值,并将 key 的过期时间设为 seconds 秒
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
        //SETNX key value只有在 key 不存在时设置 key 的值
        redisTemplate.opsForValue().setIfAbsent("code","23455");

    }

        (2).hash类型数据的操作

//操作hash类型的数据
    @Test
    public void testHash(){
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("100","name","lisi");
        hashOperations.put("100","age","10");
        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","name","age");
    }

(3).List类型数据的操作

//操作List类型的数据
    @Test
    public void testList(){
        //lpush lrange rpop llen
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPushAll("001","a","b","c");
        listOperations.leftPush("001","d");
        List range = listOperations.range("001", 0, -1);
        System.out.println(range);
        listOperations.rightPop("001");
        Long size = listOperations.size("001");
        System.out.println(size);

    }

        (4).ZSet类型数据的操作

//操作ZSet类型的数据
    @Test
    public void testZset(){
        //zadd zrange zincrby zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",10.2);
        zSetOperations.add("zset1","c",10.5);

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

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

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


    }

        (5).Set类型数据的操作

//操作set类型的数据
    @Test
    public void testSet(){
        //sadd smembers scard sinter sunion srem
        SetOperations setOperations = redisTemplate.opsForSet();
        setOperations.add("set1","a","b","c","d");//向集合中添加元素
        setOperations.add("set2","c","d","e","f");

        Set set1 = setOperations.members("set1"); //返回集合中所有的成员
        System.out.println(set1);

        Long set11 = setOperations.size("set1");//获取集合的成员数
        System.out.println(set11);

        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");//删除集合中的某个元素

    }

        (6).通用指令的操作

    //redis通用指令
    @Test
    public void testRedis(){
        //keys exisit type key del
        Set keys = redisTemplate.keys("*");//查询所有的key
        System.out.println(keys);

        Boolean name = redisTemplate.hasKey("name");//查询是否存在这个key
        Boolean set1 = redisTemplate.hasKey("set1");

        for(Object key : keys){
            DataType type = redisTemplate.type(key);//便利keys 查看每个key的类型
            System.out.println(type.name());
        }
    }

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值