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");
    }
}
相关推荐
携欢13 分钟前
PortSwigger靶场之SQL injection with filter bypass via XML encoding通关秘籍
xml·数据库·sql
GBASE14 分钟前
GBASE南大通用技术分享:GBase 8s数据库Q转义功能解析(上)
数据库
闲人编程40 分钟前
PyQt6 进阶篇:构建现代化、功能强大的桌面应用
数据库·python·oracle·gui·脚本·pyqt6·软件
speop1 小时前
【datawhale组队学习】RAG技术 -TASK05 向量数据库实践(第三章3、4节)
数据库·学习
EnigmaCoder1 小时前
【Linux】用户与用户组管理
linux·运维·服务器·数据库
lssjzmn1 小时前
针对不同使用场景,Redis的Value应该如何序列化,优缺点如何,进来看
spring boot·redis
鱼骨不是鱼翅1 小时前
redis---set详解
redis
工业甲酰苯胺1 小时前
Redis支持事务吗?了解Redis的持久化机制吗?
数据库·redis·bootstrap
NineData2 小时前
NineData 最新发布 SQL Server 双向实时同步功能
数据库·后端·架构
手握风云-2 小时前
MySQL数据库精研之旅第十一期:打造高效联合查询的实战宝典(二)
数据库·mysql