Redis

一.Redis概述

1.概述:Redis是一个基于内存的key-vaule结构数据库
2.特点:
a.基于内存存储,读写性能高
b.适合存储热点数据(热点新闻,咨询)
c.企业应用广泛
3.安装:window,linux两个版本,傻瓜式安装
4.启动
服务端:redis-server.exe redis.windows.conf
客户端:redis-cli.exe
redis-cli.exe -h localhost -p 6379

二.Redis数据类型

5种常用的数据类型

  • 字符串 string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set

三.Redis常用命令

  • 字符串操作命令

    SET key value 设置指定key的值
    GET key 获取指定key的值
    SETEX key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒
    SETNX key value 只有key不存在时设置key的值

  • 哈希操作命令

    HSET key field value 将哈希表key的字段filed的值设置为value
    HGET key field 获取哈希表中指定的字段
    HDEL key field 删除哈希表中指定的字段
    HKEYS key 获取哈希表中所有的字段
    HVALS key 获取哈希表的所有的值

  • 列表操作命令

    LPUSH key value1[value2] 将一个或者多个值插入列表的头部
    LRANGE key start stop 获取列表指定范围内的元素
    RPOP key 移除并获取列表最后一个元素
    LLEM key 获取列表长度

  • 集合操作命令

    SADD key member1[member2] 向集合添加一个或多个成员
    SMEMBERS key 返回集合中的所有成员
    SCARD key 获取集合的成员数
    SINTER key1 [key2] 返回给定所有集合的交集
    SUNION key1 [key2] 返回所有给定集合的并集
    SREM key member1 [member2] 删除集合中一个或多个成员

  • 有序集合操作命令

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

  • 通用命令

    KEYS pattern 查找所有符合给定模式的key
    EXISTS key 检查给定的key是否存在
    TYPE key 返回key所存储的值的类型
    DEL key key存在时删除key

四.在java中操作Redis

Redis的java客户端
Jedis
Lettuce
Spring Data Redis是Spring的一部分,对redis进行高度封装

Spring Data Redis的使用方式:
1.导入Spring Data Redis的maven坐标
2.配置Redis数据源
3.编写配置类,创建RedisTemplate对象
4.通过RedisTemplate对象操作Redis

spring:
  redis:
    host: ${sky.redis.host}
    port: ${sky.redis.port}
    database: ${sky.redis.database}

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;
    }
}

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 springboottest {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void test() {
        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","北京");
        System.out.println(redisTemplate.opsForValue().get("city"));
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
        redisTemplate.opsForValue().setIfAbsent("lock","1");
    }

    /**
     * 操作哈希类型的数据
     */
    @Test
    public void testHash(){
        //hset hget 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 value = HashOperations.values("100");
        System.out.println(value);
        HashOperations.delete("100","name");
    }

    /**
     * 操作列表类型的数据
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPushAll("mylist","a","b","c");
        listOperations.leftPush("mylist","d");
        List mlist = listOperations.range("mylist", 0, -1);
        System.out.println(mlist);
        listOperations.rightPop("mylist");
        Long size = listOperations.size("mylist");
        System.out.println(size);
    }

    /**
     * 操作集合类型的数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
        setOperations.add("myset","a","b","c");
        setOperations.add("myset2","a","d");
        Set mset = setOperations.members("myset");
        System.out.println(mset);
        Long size = setOperations.size("myset");
        System.out.println(size);
        Set intersect = setOperations.intersect("myset","myset2");
        System.out.println(intersect);
        Set union = setOperations.union("myset","myset2");
        System.out.println(union);
    }

    /**
     * 操作有序集合类型的数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",20);
        zSetOperations.add("zset1","c",30);
        Set zset = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset);
        zSetOperations.incrementScore("zset1","b",30);
        zSetOperations.remove("zset1","a");
        Set zset2 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset2);

    }

    /**
     * 操作通用命令
     */
    @Test
    public void testcommon(){
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);
        Boolean name = redisTemplate.hasKey("name");
        Boolean age = redisTemplate.hasKey("set1");
        for (Object key : keys) {
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
        }
        redisTemplate.delete("mylist");
    }
}
相关推荐
m0_7482340835 分钟前
SQL Server 导入Excel数据
数据库
清风细雨_林木木1 小时前
Mac 清理缓存,提高内存空间
macos·缓存
Ciderw1 小时前
MySQL日志undo log、redo log和binlog详解
数据库·c++·redis·后端·mysql·面试·golang
CT随1 小时前
Redis 存在线程安全问题吗?为什么?
数据库·redis·安全
TravisBytes1 小时前
Redis如何解决热Key问题
数据库·redis·缓存
宽带你的世界1 小时前
TiDB 是一个分布式 NewSQL 数据库
数据库·分布式·tidb
隔壁老王1562 小时前
tidb实时同步到mysql
数据库·mysql·tidb
2501_903238652 小时前
深入理解 JUnit 的 @RunWith 注解与自定义 Runner
数据库·junit·sqlserver·个人开发
小光学长2 小时前
基于flask+vue框架的的医院预约挂号系统i1616(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
听封2 小时前
✨ 索引有哪些缺点以及具体有哪些索引类型
数据库·mysql