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 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机14 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿14 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
Kagol14 小时前
macOS 和 Windows 操作系统下如何安装和启动 MySQL / Redis 数据库
redis·后端·mysql
无名之逆14 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010114 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机14 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
hzulwy15 小时前
Redis常用的数据结构及其使用场景
数据库·redis
程序猿熊跃晖15 小时前
解决 MyBatis-Plus 中 `update.setProcInsId(null)` 不生效的问题
数据库·tomcat·mybatis
ashane131416 小时前
Redis 哨兵集群(Sentinel)与 Cluster 集群对比
redis