redis 基础

Redis通用命令



KEYS pattern  
  
KEYS *  
  
TYPE k1  

-- Redis是一个开源的,基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。  
-- 它支持多种类型的数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。  
-- 其中key 一般是字符串,value 可以是字符串、散列、列表、集合、有序集合等数据结构。  
-- Redis还支持各种不同的功能,如事务、Pub/Sub、Lua脚本、键过期等。  
-- Redis的通用命令包括:DEL、EXISTS、EXPIRE、EXPIREAT、KEYS、MOVE、PERSIST、PEXPIRE、PEXPIREAT、PTTL、RANDOMKEY、RENAME、RENAMENX、TTL、TYPE等。  
-- 示例:  
  
-- 删除键  
DEL k1  
-- 检查键是否存在  
EXISTS k1  
-- 设置键的过期时间  
EXPIRE k1 10  
-- 设置键的过期时间(时间戳)  
EXPIREAT k1 1293840000  
-- 查找所有符合给定模式 pattern 的 keyKEYS *  
-- 将当前数据库的 key 移动到给定的数据库 db 当中  
MOVE k1 1  
-- 移除 key 的过期时间  
PERSIST k1  

Redis字符串命令


-- 概述:value是字符串,根据格式分为string(普通字符串)和int(整数),float(浮点数)。  
-- Redis字符串命令包括:  
-- SET:添加或修改一个字符串键值对。  
SET k1 v1  
-- GET:获取一个字符串键的值。  
GET k1  
-- MSET: 添加或修改多个字符串键值对。  
MSET k2 v2 k3 v3  
-- MGET: 获取多个字符串键的值。  
MGET k2 k3  
-- INCR: 将键的值加1。(整数) | INCRBY: 将键的值加上指定的整数。(整数) | INCRBYFLOAT: 将键的值加上指定的浮点数。(浮点数)  
SET k4 1  
INCR k4  
GET k4  
-- DECR: 将键的值减1。(整数)  
-- SETNX: 设置键的值,仅当键不存在时。  
SETNX k5 v5  
-- SETEX: 设置键的值,并设置过期时间。  
SETEX k6 10 v6  

Redis的Key层级结构


-- 概述:Redis的key是字符串,可以包含多个层级,层级之间使用冒号分隔。  
-- 格式:[层级1]:[层级2]:[层级3]:...:[层级n] | 项目:业务类型:编号  
-- 示例:格式:姓名:类型:编号  
SET Kasumi:Student:001 '{"id": "001", "name": "Kasumi", "age": 18}'  
SET Kasumi:Teacher:001 '{"id": "001", "name": "Kasumi", "age": 28}'  
SET Nota:Teacher:001 '{"id": "001", "name": "Nota", "age": 28}'  
-- 把值序列化成json字符串,有利于java、python等语言的解析。

Redis散列命令(hash)


-- 概述:value是散列,散列是一个键值对集合,适合存储对象。可以把对象的字段独立存储,方便修改和查询。  
-- Redis散列命令包括:  
-- HSET key field value:设置散列键的字段值。  
HSET Kasumi:Student:003 name alice  
HSET Kasumi:Student:003 age 18  
-- HGET key field:获取散列键的字段值。  
HGET Kasumi:Student:003 name  
-- HMSET key field value [field value ...]:设置散列键的多个字段值。| HMGET key field [field ...]:获取散列键的多个字段值。  
-- HGETALL key:获取散列键的所有字段值。  
HGETALL Kasumi:Student:003  
-- HDEL key field [field ...]:删除散列键的字段值。  
HDEL Kasumi:Student:003 age  
--HKYES key:获取散列键的所有字段名。  
HKEYS Kasumi:Student:003  
-- HVALS key:获取散列键的所有字段值。  
HVALS Kasumi:Student:003  

Redis列表命令(list)


-- 概述:value是列表,列表是一个有序的字符串集合,可以添加、删除、修改、查询。与java的linkedlist类似。看作双向链表。支持正反向遍历。  
-- Redis列表命令包括:  
-- LPUSH key value [value ...]:在列表头部添加一个或多个值。| RPUSH key value [value ...]:在列表尾部添加一个或多个值。  
LPUSH Kasumi:Student:003:Course math  
LPUSH Kasumi:Student:003:Course english chinese  
-- LPOP key:从列表头部删除一个值。| RPOP key:从列表尾部删除一个值。|| BLPOP key [key ...] timeout:从列表头部删除一个值,如果列表为空则阻塞等待。  
LPOP Kasumi:Student:003:Course  
-- LRANGE key start stop:获取列表的指定范围的值。0表示第一个元素,-1表示最后一个元素。  
LRANGE Kasumi:Student:003:Course 0 -1  
-- LINDEX key index:获取列表的指定索引的值。  
LINDEX Kasumi:Student:003:Course 0  

Redis集合命令(set)


-- 概述:value是集合,集合是一个无序的字符串集合,可以添加、删除、修改、查询。与java的hashset类似。无序,不重复,支持交集、并集、差集。  
-- Redis集合命令包括:  
-- SADD key member [member ...]:向集合添加一个或多个成员。| SREM key member [member ...]:从集合删除一个或多个成员。  
SADD Kasumi:Student:004:Sport football basketball  
-- SCARD key:获取集合的成员数量。  
SCARD Kasumi:Student:004:Sport  
-- SMEMBERS key:获取集合的所有成员。  
SMEMBERS Kasumi:Student:004:Sport  
-- SISMEMBER key member:判断成员是否在集合中。  
SISMEMBER Kasumi:Student:004:Sport football  
  
SADD Kasumi:Student:004:Sport2 pingpong basketball  
-- SINTER key [key ...]:获取多个集合的交集。  
SINTER Kasumi:Student:004:Sport Kasumi:Student:004:Sport2  
-- SUNION key [key ...]:获取多个集合的并集。  
SUNION Kasumi:Student:004:Sport Kasumi:Student:004:Sport2  
-- SDIFF key [key ...]:获取多个集合的差集。  
SDIFF Kasumi:Student:004:Sport Kasumi:Student:004:Sport2  
  
#### Redis有序集合命令(sorted set  
-- 概述:value是有序集合,有序集合是一个有序的字符串集合,可以添加、删除、修改、查询。与java的treeset类似。有序,不重复,支持按照分数排序。常用做排行榜。  
-- Redis有序集合命令包括:  
-- ZADD key score member [score member ...]:向有序集合添加一个或多个成员。-- ZREM key member [member ...]:从有序集合删除一个或多个成员。  
ZADD Kasumi:Student:005:Score 100 math 90 english 80 chinese  
-- ZCARD key:获取有序集合的成员数量。  
ZCARD Kasumi:Student:005:Score  
-- ZRANGE key start stop [WITHSCORES]:获取有序集合的指定范围的成员。| ZREVRANGE key start stop [WITHSCORES]:获取有序集合的指定范围的成员,逆序。  
ZREVRANGE Kasumi:Student:005:Score 0 -1 WITHSCORES  
-- ZSCORE key member:获取有序集合的成员的分数。  
ZSCORE Kasumi:Student:005:Score math  
-- ZRANK key member:获取有序集合的成员的排名。  
ZRANK Kasumi:Student:005:Score chinese  

Other


-- ## Redis事务命令  
-- 概述:Redis事务是一组命令的集合,可以一次性执行多个命令。事务中的命令要么全部执行,要么全部不执行。  
-- Redis事务命令包括:  
-- MULTI:开启事务。| EXEC:执行事务。| DISCARD:取消事务。  
-- MULTI  
-- SET k7 v7  
-- SET k8 v8  
-- EXEC  
  
-- ## Redis发布订阅命令  
-- 概述:Redis发布订阅是一种消息通信模式,包括发布者、订阅者、频道。发布者发布消息到频道,订阅者订阅频道,当发布者发布消息到频道时,订阅者会接收到消息。  
-- Redis发布订阅命令包括:  
-- SUBSCRIBE channel [channel ...]:订阅一个或多个频道。| UNSUBSCRIBE [channel [channel ...]]:取消订阅一个或多个频道。| PUBLISH channel message:发布消息到频道。  
SUBSCRIBE Kasumi:Channel  
  
-- ## Redis脚本命令  
-- 概述:Redis脚本是一段Lua脚本,可以一次性执行多个命令。脚本中的命令要么全部执行,要么全部不执行。  
-- Redis脚本命令包括:  
-- EVAL script numkeys key [key ...] arg [arg ...]:执行Lua脚本。| EVALSHA sha1 numkeys key [key ...] arg [arg ...]:执行Lua脚本。  
-- SCRIPT LOAD script:加载Lua脚本。| SCRIPT FLUSH:清空Lua脚本。  
-- EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second

redis Java Client 编程

Jedis

官方推荐的Java连接开发工具。类似与JDBC-SQLDB

<dependencies>  
    <!--jedis-->  
    <dependency>  
        <groupId>redis.clients</groupId>  
        <artifactId>jedis</artifactId>  
        <version>5.0.0</version>  
    </dependency>    
    <!--junit测试-->  
    <dependency>  
        <groupId>org.junit.jupiter</groupId>  
        <artifactId>junit-jupiter</artifactId>  
        <version>5.7.0</version>  
        <scope>test</scope>  
    </dependency>  
</dependencies>
junit单元测试
package com.kasumi.test;  
  
import org.junit.jupiter.api.AfterEach;  
import redis.clients.jedis.Jedis;  
import org.junit.jupiter.api.BeforeEach; //用于在每个测试方法之前执行一些初始化操作  
  
public class JedisTest {  
    private Jedis jedis;  
  
    @BeforeEach  
    public void init() {  
        jedis = new Jedis("localhost", 6379); // 连接本地的 Redis 服务  
    }  
  
    // @Test  
    public void test() {  
        jedis.set("name", "kasumi");  
        System.out.println("GET:"+jedis.get("name"));  
    }  
  
    //释放资源  
    @AfterEach  
    public void destroy() {  
        if (jedis != null) {  
            jedis.close();  
        }  
    }  
  
    public static void main(String[] args) {  
        JedisTest jedisTest = new JedisTest();  
        jedisTest.init();  
        jedisTest.test();  
        jedisTest.destroy();  
    }  
  
}
Jedis连接池

import redis.clients.jedis.Jedis;  
import redis.clients.jedis.JedisPool;  
import redis.clients.jedis.JedisPoolConfig;  
  
public class JeConectFac { //连接池  
    private static final JedisPool jedispool;  
    static {  
        JedisPoolConfig poolConfig = new JedisPoolConfig(); //连接池配置  
        poolConfig.setMaxTotal(9); //最大连接数  
        poolConfig.setMaxIdle(9); //最大空闲连接数  
        poolConfig.setMinIdle(1); //最小空闲连接数  
        poolConfig.setBlockWhenExhausted(true); //连接耗尽时是否阻塞,false报异常,true阻塞直到超时,默认true  
        poolConfig.setMaxWaitMillis(5000); //连接耗尽时等待超时时间,单位毫秒  
  
  
        jedispool = new JedisPool(poolConfig, "localhost", 6379, 10000); //连接池对象  
    }  
  
    public static Jedis getJedis() {  
        return jedispool.getResource(); //获取连接  
    }  
}

对应测试文件:jedis = JeConectFac.getJedis();


SpringDataRedis

Spring Data Redis 是一个基于 Spring 的模块,它提供了对 Redis 的数据访问支持。Spring Data Redis 提供了丰富的 Redis 操作模板,它是一个高级的 Redis 客户端,使用它可以非常方便地操作 Redis。 Spring Data Redis 的主要特性包括:

  • 连接支持:提供了对多种 Redis 客户端库的支持,包括 Jedis、Lettuce 和 Redisson。
  • 数据操作:提供了丰富的数据操作 API,包括对 key-value、list、set、zset、hash 等数据结构的操作。
  • 序列化:提供了多种序列化策略,包括 String、JDK、JSON、XML 等。
  • Repository 支持:通过简单的注解,可以实现对 Redis 数据的 CRUD 操作。
  • Pub/Sub:支持 Redis 的发布订阅模式。
  • 集群:支持 Redis 集群和哨兵模式。

引入依赖 -> 配置 -> 注入实例

.properties配置如下:

spring.application.name=SpringBoot  
  
# redis  
spring.data.redis.host=localhost  
spring.data.redis.port=6379  
  
# pool  
spring.data.redis.lettuce.pool.max-active=8  
spring.data.redis.lettuce.pool.max-idle=8  
spring.data.redis.lettuce.pool.max-wait=-1  
spring.data.redis.lettuce.pool.min-idle=0

测试文件:


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.core.RedisTemplate;  
  
@SpringBootTest  
class ApplicationTests {  
  
    @Autowired  
    private RedisTemplate <String, String> redisTemplate;  
    //为redisTemplate字段注入一个RedisTemplate<String, String>类型的实例。这个实例由Spring框架创建并管理,不需要手动创建。所谓"依赖注入"/"控制反转"的设计模式。
  
    @Test  
    void testString() {  
        redisTemplate.opsForValue().set("Spring", "summer");  
        String value = redisTemplate.opsForValue().get("Spring");  
        System.out.println("GET: "+value);  
    }  

	@Test  
	void testList() {  
	    redisTemplate.opsForList().leftPush("list", "Spring");  
	    redisTemplate.opsForList().leftPush("list", "Summer");  
	    redisTemplate.opsForList().leftPush("list", "Autumn");  
	    String value = redisTemplate.opsForList().leftPop("list");  
	    System.out.println("POP: "+value);  
	}  
	  
	@Test  
	void testHash() {  
	    redisTemplate.opsForHash().put("hash", "Spring", "1");  
	    redisTemplate.opsForHash().put("hash", "Summer", "2");  
	    String value = (String) redisTemplate.opsForHash().get("hash", "Spring");  
	    System.out.println("GET: "+value);  
	    System.out.println("GET: "+redisTemplate.opsForHash().entries("hash"));  
	}
  
}

分类:

更新时序:

笺評 (issue)