検索
ホームページデータベースRedisSpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

Spring は、すべての Redis ネイティブ API をサポートする Redis を操作するために RedisTemplate をカプセル化します。 RedisTemplateには5つのデータ構造の操作メソッドが定義されています。

  • opsForValue(): 操作文字列。

  • opsForList(): 操作リスト。

  • opsForHash(): ハッシュを操作します。

  • opsForSet(): 操作セット。

  • opsForZSet(): 順序付きセットを操作します。

例を通してこれらの方法を理解して適用してみましょう。複数回実行する場合、データのクリアに失敗するとデータ操作が繰り返される可能性があるため、上記のメソッドを実行した後は必ずデータをクリアしてください。

(1) Maven を使用して依存関係ファイルを追加します

pom.xml 構成情報ファイルに、Redis 依存関係を追加します:

My SpringBoot version:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

Redis 依存関係の追加:

<!-- Redis启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

(2) Redis の設定

application.yml 設定ファイルで Redis 情報を設定します:

#Spring配置
spring:
  #缓存管理器
  cache:
    type: redis
  #Redis配置
  redis:
    database: 0 #Redis数据库索引(默认为0)
    host: 127.0.0.1 #Redis服务器地址
    port: 6379 #Redis服务器连接端口
    password:  #Redis服务器连接密码(默认为空)
    jedis:
      pool:
        max-active: 8 #连接池最大连接数(使用负值表示没有限制)
        max-wait: -1s #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 8  #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接
    lettuce:
      shutdown-timeout: 100ms #关闭超时时间,默认值100ms

(3) Redis 構成クラス (config レイヤー)

com.pjb.config パッケージを作成し、RedisConfig クラス (Redis 構成クラス) を作成し、CachingConfigurerSupport クラスを継承します。

package com.pjb.config;
 
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
 
import java.lang.reflect.Method;
 
/**
 * Redis配置类
 * @author pan_junbiao
 **/
@Configuration
public class RedisConfig extends CachingConfigurerSupport
{
    /**
     * 缓存对象集合中,缓存是以key-value形式保存的,
     * 当不指定缓存的key时,SpringBoot会使用keyGenerator生成Key。
     */
    @Bean
    public KeyGenerator keyGenerator()
    {
        return new KeyGenerator()
        {
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuilder sb = new StringBuilder();
                //类名+方法名
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object obj : params) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }
 
    /**
     * 缓存管理器
     */
    @SuppressWarnings("rawtypes")
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory connectionFactory)
    {
        RedisCacheManager cacheManager = RedisCacheManager.create(connectionFactory);
        //设置缓存过期时间
 
        return cacheManager;
    }
 
    /**
     * 实例化RedisTemplate对象
     */
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory)
    {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

1. String (String)

String (String) は、Redis の最も基本的なデータ型です。各キー (Key) は、文字列内の対応する値 (Value) に対応します。つまり、Key-Value キーと値のペアが存在します。 String はバイナリ セーフであり、あらゆるデータ (画像やシリアル化されたオブジェクトなど) を保存できます。最大値では512MBのデータを保存できます。通常、いくつかの複雑なカウント関数をキャッシュするために使用されます。 RedisTemplate は、文字列を操作するための次のメソッドを提供します。

1.1 void set(K key, V value); V get(Object key)

具体的な使用方法については、次のコードを参照してください:

/**
 * Redis操作字符串(String)
 * @author pan_junbiao
 **/
@SpringBootTest
public class StringTest
{
    @Autowired
    private RedisTemplate redisTemplate;
    
    @Test
    public void string1()
    {
        redisTemplate.opsForValue().set("userName","pan_junbiao的博客");
        redisTemplate.opsForValue().set("blogUrl","https://blog.csdn.net/pan_junbiao");
        redisTemplate.opsForValue().set("blogRemark","您好,欢迎访问 pan_junbiao的博客");
        System.out.println("用户名称:" + redisTemplate.opsForValue().get("userName"));
        System.out.println("博客地址:" + redisTemplate.opsForValue().get("blogUrl"));
        System.out.println("博客信息:" + redisTemplate.opsForValue().get("blogRemark"));
    }
}

実行結果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

1.2 void set(K キー、V 値、ロングタイムアウト、TimeUnit 単位)

次のコード設定は 3 秒間無効です。クエリは 3 秒以内に結果を返し、3 秒後に null を返します。具体的な使用方法については、次のコードを参照してください:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void string2()
{
    //设置的是3s失效,3s之内查询有结果,3s之后返回null
    redisTemplate.opsForValue().set("blogRemark","您好,欢迎访问 pan_junbiao的博客",3, TimeUnit.SECONDS);
    try
    {
        Object s1 = redisTemplate.opsForValue().get("blogRemark");
        System.out.println("博客信息:" + s1);
        Thread.currentThread().sleep(2000);
 
        Object s2 = redisTemplate.opsForValue().get("blogRemark");
        System.out.println("博客信息:" + s2);
        Thread.currentThread().sleep(5000);
 
        Object s3 = redisTemplate.opsForValue().get("blogRemark");
        System.out.println("博客信息:" + s3);
    }
    catch (InterruptedException ie)
    {
        ie.printStackTrace();
    }
}

実行結果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

##1.3 V getAndSet(K key, V value)

キーの文字列を設定し、その古い値を返します。具体的な使用法については、次のコードを参照してください:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void string3()
{
    //设置键的字符串并返回其旧值
    redisTemplate.opsForValue().set("blogRemark","pan_junbiao的博客");
    Object oldVaule = redisTemplate.opsForValue().getAndSet("blogRemark","您好,欢迎访问 pan_junbiao的博客");
    Object newVaule = redisTemplate.opsForValue().get("blogRemark");
    System.out.println("旧值:" + oldVaule);
    System.out.println("新值:" + newVaule);
}

実行結果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法##1.4 整数の追加(K キー、V 値)

キーがすでに存在し、文字列型である場合、このコマンドは新しい値を元の文字列の末尾に追加します。キーが存在しない場合は、キーが作成されて空の文字列に設定されます。これは、この特殊な場合の追加操作は設定操作と似ていることを意味します。具体的な使用法については、次のコードを参照してください:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void string4()
{
    //设置value的序列化规则,否则会报错
    redisTemplate.setValueSerializer(new StringRedisSerializer());
 
    redisTemplate.opsForValue().append("blogRemark","您好,欢迎访问 ");
    System.out.println(redisTemplate.opsForValue().get("blogRemark"));
    redisTemplate.opsForValue().append("blogRemark","pan_junbiao的博客");
    System.out.println(redisTemplate.opsForValue().get("blogRemark"));
}

#実行結果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法##注:

は必須です。ここにあります デシリアライズ構成に注意してください。そうでないと、エラーが報告されます。

1.5 Long size(K key)

キーに対応する値の長さを返します。次のコードを参照してください:
@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void string5()
{
    redisTemplate.opsForValue().set("userName","pan_junbiao的博客");
    System.out.println("Value值:" + redisTemplate.opsForValue().get("userName"));
    System.out.println("Value值的长度:" + redisTemplate.opsForValue().size("userName"));
}

実行結果:

2. リスト (リスト)

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法Redis リストは、挿入順に並べ替えられた文字列の単純なリストです。要素はリストの先頭 (左) または末尾 (右) に追加できます。

リスト データの結果を使用して、単純なメッセージ キュー関数を実行できます。 Irange コマンドを使用して、Redis に基づいた高パフォーマンスのページネーションを実装することもできます。

2.1 Long leftPushAll(K key, V...values); Long rightPushAll(K key, V...values)

leftPushAll メソッド: リストに配列を挿入することを示します。

rightPushAll メソッド: 要素をリストの右端にバッチで追加することを意味します。具体的な使用方法については、次のコードを参照してください:

/**
 * Redis操作列表(List)
 * @author pan_junbiao
 **/
@SpringBootTest
public class ListTest
{
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Test
    public void list1()
    {
        String[] user1 = new String[]{"1","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"};
        String[] user2 = new String[]{"2","pan_junbiao的博客","https://blog.csdn.net/pan_junbiao"};
        String[] user3 = new String[]{"3","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"};
 
        redisTemplate.opsForList().rightPushAll("user1",user1);
        redisTemplate.opsForList().rightPushAll("user2",user2);
        redisTemplate.opsForList().rightPushAll("user3",user3);
 
        System.out.println(redisTemplate.opsForList().range("user1",0,-1));
        System.out.println(redisTemplate.opsForList().range("user2",0,-1));
        System.out.println(redisTemplate.opsForList().range("user3",0,-1));
    }
}

実行結果:

#2.2 Long leftPush(K キー, V 値); Long rightPush (K キー、V 値)

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法leftPush メソッド: 指定されたすべての値をキー リストの先頭に挿入します。プッシュ操作を実行する前に、キーが存在しない場合は、空のリストが作成され、左側に挿入されます。

rightPush メソッド: 指定されたすべての値をキー リストの最後に挿入します。プッシュ操作を実行する前に、キーが存在しない場合は、空のリストを作成し、要素を右側に挿入します。具体的な使用方法については、次のコードを参照してください:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void list2()
{
    redisTemplate.opsForList().rightPush("userInfo",1);
    redisTemplate.opsForList().rightPush("userInfo","pan_junbiao的博客");
    redisTemplate.opsForList().rightPush("userInfo","https://blog.csdn.net/pan_junbiao");
    redisTemplate.opsForList().rightPush("userInfo","您好,欢迎访问 pan_junbiao的博客");
 
    System.out.println("用户编号:" + redisTemplate.opsForList().index("userInfo",0));
    System.out.println("用户名称:" + redisTemplate.opsForList().index("userInfo",1));
    System.out.println("博客地址:" + redisTemplate.opsForList().index("userInfo",2));
    System.out.println("博客信息:" + redisTemplate.opsForList().index("userInfo",3));
}

実行結果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

2.3 Long size(K key)

返回存储在键中的列表的长度。如果键不存在,则将其解释为空列表,并返回0。如果key存在的值不是列表,则返回错误。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void list3()
{
    String[] user = new String[]{"1","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"};
    redisTemplate.opsForList().leftPushAll("user",user);
    System.out.println("列表的长度:" + redisTemplate.opsForList().size("user"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

2.4 void set(K key, long index, V value)

在列表中 index 的位置设置 value。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void list4()
{
    String[] user = new String[]{"1","pan_junbiao的博客","https://blog.csdn.net/pan_junbiao"};
    redisTemplate.opsForList().rightPushAll("user",user);
    System.out.println(redisTemplate.opsForList().range("user",0,-1));
 
    redisTemplate.opsForList().set("user",2,"您好,欢迎访问 pan_junbiao的博客");
    System.out.println(redisTemplate.opsForList().range("user",0,-1));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

2.5 V index(K key, long index)

根据下标获取列表中的值(下标从0开始)。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void list2()
{
    redisTemplate.opsForList().rightPush("userInfo",1);
    redisTemplate.opsForList().rightPush("userInfo","pan_junbiao的博客");
    redisTemplate.opsForList().rightPush("userInfo","https://blog.csdn.net/pan_junbiao");
    redisTemplate.opsForList().rightPush("userInfo","您好,欢迎访问 pan_junbiao的博客");
 
    System.out.println("用户编号:" + redisTemplate.opsForList().index("userInfo",0));
    System.out.println("用户名称:" + redisTemplate.opsForList().index("userInfo",1));
    System.out.println("博客地址:" + redisTemplate.opsForList().index("userInfo",2));
    System.out.println("博客信息:" + redisTemplate.opsForList().index("userInfo",3));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

2.6 Long remove(K key, long count, Object value)

从键中存储的列表中删除第一个计数事件等于给定“count”值的元素。其中,参数count的含义如下:

  • count=0:删除等于value的所有元素。

  • count>0:删除等于从头到尾移动的值的元素。

  • count

以下代码用于删除列表中第一次出现的值:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void list5()
{
    String[] user = new String[]{"1","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"};
    redisTemplate.opsForList().rightPushAll("user",user);
    System.out.println(redisTemplate.opsForList().range("user",0,-1));
 
    //将删除列表中第一次出现的pan_junbiao的博客
    redisTemplate.opsForList().remove("user",1,"pan_junbiao的博客");
    System.out.println(redisTemplate.opsForList().range("user",0,-1));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

2.7 V leftPop(K key);V rightPop(K key)

leftPop方法:弹出最左边的元素,弹出之后该值在列表中将不复存在。

rightPop方法:弹出最右边的元素,弹出之后该值在列表中将不复存在。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void list6()
{
    String[] user = new String[]{"1","pan_junbiao的博客","您好,欢迎访问 pan_junbiao的博客"};
    redisTemplate.opsForList().rightPushAll("user",user);
    System.out.println(redisTemplate.opsForList().range("user",0,-1));
    //弹出最右边的元素,弹出之后该值在列表中将不复存在
    System.out.println(redisTemplate.opsForList().rightPop("user"));
    System.out.println(redisTemplate.opsForList().range("user",0,-1));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

3、哈希(Hash)

Redis 中的 hash(哈希)是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。value 中存放的是结构化的对象。利用这样数据结果,可以方便地操作其中的某个字段。比如在“单点登录”时,可以用这种数据结构存储用户信息。以 CookieId 作为 key,设置30分钟为缓存过期时间,能很好地模拟出类似 Session 的效果。

3.1 void putAll(H key, Map extends HK, ? extends HV> m);Map entries(H key)

putAll方法:用 m 中提供的多个散列字段设置到 key 对应的散列表中。

entries方法:根据密钥获取整个散列存储。具体用法见以下代码:

/**
 * Redis操作哈希(Hash)
 * @author pan_junbiao
 **/
@SpringBootTest
public class HashTest
{
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Test
    public void hash2()
    {
        Map<String,Object> userMap = new HashMap<>();
        userMap.put("userName","pan_junbiao的博客");
        userMap.put("blogRemark","您好,欢迎访问 pan_junbiao的博客");
        redisTemplate.opsForHash().putAll("userHash",userMap);
        System.out.println(redisTemplate.opsForHash().entries("userHash"));
    }
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

3.2 void put(H key, HK hashKey, HV value);HV get(H key, Object hashKey)

put方法:设置 hashKey 的值。

get方法:从键中的散列获取给定 hashKey 的值。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void hash3()
{
    redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客");
    redisTemplate.opsForHash().put("userHash","blogUrl","https://blog.csdn.net/pan_junbiao");
    redisTemplate.opsForHash().put("userHash","blogRemark","您好,欢迎访问 pan_junbiao的博客");
    System.out.println("用户名称:" + redisTemplate.opsForHash().get("userHash","userName"));
    System.out.println("博客地址:" + redisTemplate.opsForHash().get("userHash","blogUrl"));
    System.out.println("博客信息:" + redisTemplate.opsForHash().get("userHash","blogRemark"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

3.3 List values(H key);Set keys(H key)

values方法:根据密钥获取整个散列存储的值。

keys方法:根据密钥获取整个散列存储的键。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void hash4()
{
    redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客");
    redisTemplate.opsForHash().put("userHash","blogRemark","您好,欢迎访问 pan_junbiao的博客");
    System.out.println("散列存储的值:" + redisTemplate.opsForHash().values("userHash"));
    System.out.println("散列存储的键:" + redisTemplate.opsForHash().keys("userHash"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

3.4 Boolean hasKey(H key, Object hashKey);Long size(H key)

hasKey方法:确定 hashKey 是否存在。

size方法:获取 key 所对应的散列表的大小个数。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void hash5()
{
    redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客");
    redisTemplate.opsForHash().put("userHash","blogUrl","https://blog.csdn.net/pan_junbiao");
    redisTemplate.opsForHash().put("userHash","blogRemark","您好,欢迎访问 pan_junbiao的博客");
    System.out.println(redisTemplate.opsForHash().hasKey("userHash","userName"));
    System.out.println(redisTemplate.opsForHash().hasKey("userHash","age"));
    System.out.println(redisTemplate.opsForHash().size("userHash"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

3.5 Long delete(H key, Object... hashKeys)

删除给定的 hashKeys。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void hash6()
{
    redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客");
    redisTemplate.opsForHash().put("userHash","blogRemark","您好,欢迎访问 pan_junbiao的博客");
    System.out.println(redisTemplate.opsForHash().delete("userHash","blogRemark"));
    System.out.println(redisTemplate.opsForHash().entries("userHash"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

4、集合(Set)

set 是存放不重复值的集合。利用 set 可以做全局去重复的功能。还可以进行交集、并集、差集等操作,也可用来实现计算共同喜好、全部的喜好、自己独有的喜好等功能。

Redis 的 set 是 string 类型的无序集合,通过散列表实现。

4.1 Long add(K key, V... values);Set members(K key)

add方法:在无序集合中添加元素,返回添加个数;如果存在重复的则不进行添加。

members方法:返回集合中的所有成员。具体用法见以下代码:

/**
 * Redis操作集合(Set)
 * @author pan_junbiao
 **/
@SpringBootTest
public class SetTest
{
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Test
    public void set1()
    {
        String[] citys = new String[]{"北京","上海","广州","深圳"};
        System.out.println(redisTemplate.opsForSet().add("citySet",citys));
        System.out.println(redisTemplate.opsForSet().add("citySet","香港","澳门","台湾"));
        //返回集合中的所有元素
        System.out.println(redisTemplate.opsForSet().members("citySet"));
    }
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

4.2 Long remove(K key, Object... values)

移除集合中一个或多个成员。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void set2()
{
    String[] citys = new String[]{"北京","上海","广州","深圳"};
    System.out.println(redisTemplate.opsForSet().add("citySet",citys));
    System.out.println(redisTemplate.opsForSet().remove("citySet",citys));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

4.3 V pop(K key)

移除并返回集合中的一个随机元素。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void set3()
{
    String[] citys = new String[]{"北京","上海","广州","深圳"};
    System.out.println(redisTemplate.opsForSet().add("citySet",citys));
    System.out.println(redisTemplate.opsForSet().pop("citySet"));
    System.out.println(redisTemplate.opsForSet().members("citySet"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

4.4 Boolean move(K key, V value, K destKey)

将 member 元素移动。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void set4()
{
    String[] citys = new String[]{"北京","上海","广州","深圳"};
    System.out.println(redisTemplate.opsForSet().add("citySet",citys));
    System.out.println(redisTemplate.opsForSet().move("citySet","深圳","citySet2"));
    System.out.println(redisTemplate.opsForSet().members("citySet"));
    System.out.println(redisTemplate.opsForSet().members("citySet2"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

4.5 Cursor scan(K key, ScanOptions options)

用于遍历 Set。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void set5()
{
    String[] citys = new String[]{"北京","上海","广州","深圳"};
    System.out.println(redisTemplate.opsForSet().add("citySet",citys));
    Cursor<Object> cursor = redisTemplate.opsForSet().scan("citySet", ScanOptions.NONE);
    while(cursor.hasNext())
    {
        System.out.println(cursor.next());
    }
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

4.6 交集、并集、差集

  • Set intersect(K key1, K key2)方法、Long intersectAndStore(K key1, K key2, K destKey)方法:交集。

  • Set union(K key1, K key2)方法、Long unionAndStore(K key1, K key2, K destKey)方法:并集。

  • Set difference(K key1, K key2)方法、Long differenceAndStore(K key1, K key2, K destKey)方法:差集。

具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void set6()
{
    String[] city1 = new String[]{"北京", "上海", "广州", "深圳", "昆明"};
    String[] city2 = new String[]{"北京", "深圳", "昆明", "成都"};
    System.out.println(redisTemplate.opsForSet().add("citySet1", city1));
    System.out.println(redisTemplate.opsForSet().add("citySet2", city2));
 
    //返回集合中的所有元素
    System.out.println("城市集合1:" + redisTemplate.opsForSet().members("citySet1"));
    System.out.println("城市集合2:" + redisTemplate.opsForSet().members("citySet2"));
 
    //求交集、并集、差集(方式一)
    System.out.println("求交集、并集、差集(方式一):");
    System.out.println("交集:" + redisTemplate.opsForSet().intersect("citySet1","citySet2"));
    System.out.println("并集:" + redisTemplate.opsForSet().union("citySet1","citySet2"));
    System.out.println("差集:" + redisTemplate.opsForSet().difference("citySet1","citySet2"));
 
    //求交集、并集、差集(方式二)
    redisTemplate.opsForSet().intersectAndStore("citySet1","citySet2", "intersectCity");
    redisTemplate.opsForSet().unionAndStore("citySet1","citySet2", "unionCity");
    redisTemplate.opsForSet().differenceAndStore("citySet1","citySet2", "differenceCity");
    System.out.println("求交集、并集、差集(方式二):");
    System.out.println("交集:" + redisTemplate.opsForSet().members("intersectCity"));
    System.out.println("并集:" + redisTemplate.opsForSet().members("unionCity"));
    System.out.println("差集:" + redisTemplate.opsForSet().members("differenceCity"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

5、有序集合(Sorted Set)

zset(Sorted Set 有序集合)也是 string 类型元素的集合,且不允许重复的成员。每个元素都会关联一个 double 类型的分数。可以通过分数将该集合中的成员从小到大进行排序。

虽然 zset 的成员是唯一的,但是权重参数分数(score)可以重复。集合中的元素能够按 score 进行排列。它可以用来做排行榜应用、取TOP/N、延时任务、范围查找等。

5.1 Long add(K key, Set> tuples)

增加一个有序集合。具体用法见以下代码:

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
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.DefaultTypedTuple;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
 
import java.util.HashSet;
import java.util.Set;
/**
 * Redis操作有序集合(Sorted Set)
 * @author pan_junbiao
 **/
@SpringBootTest
public class SortedSetTest
{
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Test
    public void Zset1() 
    {
        ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
        ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
        ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
 
        Set<ZSetOperations.TypedTuple<String>> typles = new HashSet<ZSetOperations.TypedTuple<String>>();
        typles.add(objectTypedTuple1);
        typles.add(objectTypedTuple2);
        typles.add(objectTypedTuple3);
 
        System.out.println(redisTemplate.opsForZSet().add("typles",typles));
        System.out.println(redisTemplate.opsForZSet().range("typles",0,-1));
    }
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

5.2 Boolean add(K key, V value, double score)

新增一个有序集合,存在的话为false,不存在的话为true。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void Zset2()
{
    System.out.println(redisTemplate.opsForZSet().add("zset2", "pan_junbiao的博客_01", 9.6));
    System.out.println(redisTemplate.opsForZSet().add("zset2", "pan_junbiao的博客_01", 9.6));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

5.3 Long remove(K key, Object... values)

从有序集合中移除一个或者多个元素。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void Zset3()
{
    System.out.println(redisTemplate.opsForZSet().add("zset3", "pan_junbiao的博客_01", 1.0));
    System.out.println(redisTemplate.opsForZSet().add("zset3", "pan_junbiao的博客_02", 1.0));
    System.out.println(redisTemplate.opsForZSet().range("zset3", 0, -1));
    System.out.println(redisTemplate.opsForZSet().remove("zset3", "pan_junbiao的博客_02"));
    System.out.println(redisTemplate.opsForZSet().range("zset3", 0, -1));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

5.4 Long rank(K key, Object value)

返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void Zset4()
{
    System.out.println(redisTemplate.opsForZSet().add("zset4", "pan_junbiao的博客_01",9.6));
    System.out.println(redisTemplate.opsForZSet().add("zset4", "pan_junbiao的博客_02",1.5));
    System.out.println(redisTemplate.opsForZSet().add("zset4", "pan_junbiao的博客_03",7.4));
    System.out.println(redisTemplate.opsForZSet().range("zset4", 0, -1));
    System.out.println(redisTemplate.opsForZSet().rank("zset4", "pan_junbiao的博客_02"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

注意:结果中的0表示第一(最小)。

5.5 Set range(K key, long start, long end);Set rangeByScore(K key, double score1, double score2)

range方法:通过索引区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列。

rangeByScore方法:通过分数区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列。

具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void Zset5()
{
    ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
    ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
    ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
 
    Set<ZSetOperations.TypedTuple<String>> typles = new HashSet<ZSetOperations.TypedTuple<String>>();
    typles.add(objectTypedTuple1);
    typles.add(objectTypedTuple2);
    typles.add(objectTypedTuple3);
 
    System.out.println(redisTemplate.opsForZSet().add("zset5",typles));
    System.out.println(redisTemplate.opsForZSet().range("zset5",0,-1));
    System.out.println(redisTemplate.opsForZSet().rangeByScore("zset5", 0, 8));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

5.6 Long count(K key, double score1, double score2);Long size(K key)

count方法:通过分数返回有序集合指定区间内的成员个数。

size方法:获取有序集合的成员数。

具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void Zset6()
{
    ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
    ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
    ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
 
    Set<ZSetOperations.TypedTuple<String>> typles = new HashSet<ZSetOperations.TypedTuple<String>>();
    typles.add(objectTypedTuple1);
    typles.add(objectTypedTuple2);
    typles.add(objectTypedTuple3);
 
    redisTemplate.opsForZSet().add("zset6", typles);
    System.out.println("分数在0至8区间内的成员个数:" + redisTemplate.opsForZSet().count("zset6", 0, 8));
    System.out.println("有序集合的成员数:" + redisTemplate.opsForZSet().size("zset6"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

5.7 Double score(K key, Object o)

获取指定成员的score值。具体用法见以下代码:

@Test
public void Zset7()
{
    redisTemplate.opsForZSet().add("zset7", "pan_junbiao的博客_01", 9.6);
    redisTemplate.opsForZSet().add("zset7", "pan_junbiao的博客_02", 1.5);
    redisTemplate.opsForZSet().add("zset7", "pan_junbiao的博客_03", 7.4);
 
    System.out.println("pan_junbiao的博客_01的分数:" + redisTemplate.opsForZSet().score("zset7", "pan_junbiao的博客_01"));
    System.out.println("pan_junbiao的博客_02的分数:" + redisTemplate.opsForZSet().score("zset7", "pan_junbiao的博客_02"));
    System.out.println("pan_junbiao的博客_03的分数:" + redisTemplate.opsForZSet().score("zset7", "pan_junbiao的博客_03"));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

5.8 Long removeRange(K key, long start, long end)

移除指定索引位置的成员,有序集合成员按照分数值递增(从小到大)顺序排列。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void Zset8()
{
    ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
    ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
    ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
 
    Set<ZSetOperations.TypedTuple<String>> tuples = new HashSet<ZSetOperations.TypedTuple<String>>();
    tuples.add(objectTypedTuple1);
    tuples.add(objectTypedTuple2);
    tuples.add(objectTypedTuple3);
 
    System.out.println(redisTemplate.opsForZSet().add("zset8", tuples));
    System.out.println(redisTemplate.opsForZSet().range("zset8", 0, -1));
    System.out.println(redisTemplate.opsForZSet().removeRange("zset8", 1, 5));
    System.out.println(redisTemplate.opsForZSet().range("zset8", 0, -1));
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

5.9 Cursor> scan(K key, ScanOptions options)

遍历 zset。具体用法见以下代码:

@Autowired
private RedisTemplate redisTemplate;
 
@Test
public void Zset9()
{
    ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
    ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
    ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
 
    Set<ZSetOperations.TypedTuple<String>> tuples = new HashSet<ZSetOperations.TypedTuple<String>>();
    tuples.add(objectTypedTuple1);
    tuples.add(objectTypedTuple2);
    tuples.add(objectTypedTuple3);
 
    System.out.println(redisTemplate.opsForZSet().add("zset9", tuples));
    Cursor<ZSetOperations.TypedTuple<Object>> cursor = redisTemplate.opsForZSet().scan("zset9", ScanOptions.NONE);
    while (cursor.hasNext())
    {
        ZSetOperations.TypedTuple<Object> item = cursor.next();
        System.out.println(item.getValue() + " 的分数值:" + item.getScore());
    }
}

执行结果:

SpringBoot が RedisTemplate を使用して Redis データ型を操作する方法

以上がSpringBoot が RedisTemplate を使用して Redis データ型を操作する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Redisのサーバー側操作:提供するものRedisのサーバー側操作:提供するものApr 29, 2025 am 12:21 AM

redis'sserver-sideoperations offferidions and forexuctingcomplexoperationsontheserver.1)機能を調整することで、javascript、orredis'sscriptinglanguage、infulancingscalabilityandmantenmention

Redis:データベースまたはサーバー?役割を分かりやすいRedis:データベースまたはサーバー?役割を分かりやすいApr 28, 2025 am 12:06 AM

redisisbothadatabaseandaserver.1)asadatabase、itusesin memorystorage forfastaccess、理想的なforreal-timeapplicationsandcaching.2)asaserver、itupportspub/submessagingandaging andluascriptingforreal-communicationandserver-sideoperation。

Redis:NOSQLアプローチの利点Redis:NOSQLアプローチの利点Apr 27, 2025 am 12:09 AM

Redisは、高性能と柔軟性を提供するNOSQLデータベースです。 1)大規模データと高い並行性の処理に適したキー価値ペアを介してデータを保存します。 2)メモリストレージとシングルスレッドモデルは、速い読み取りと書き込みと原子性を確保します。 3)RDBおよびAOFメカニズムを使用してデータを持続し、高可用性とスケールアウトをサポートします。

Redis:そのアーキテクチャと目的を理解するRedis:そのアーキテクチャと目的を理解するApr 26, 2025 am 12:11 AM

Redisは、主にデータベース、キャッシュ、メッセージブローカーとして使用されるメモリデータ構造ストレージシステムです。そのコア機能には、シングルスレッドモデル、I/O多重化、持続メカニズム、複製、クラスタリング機能が含まれます。 Redisは、キャッシュ、セッションストレージ、メッセージキューのための実際のアプリケーションで一般的に使用されます。適切なデータ構造を選択し、パイプラインとトランザクションを使用し、監視とチューニングを使用することにより、パフォーマンスを大幅に改善できます。

Redis vs. SQLデータベース:重要な違​​いRedis vs. SQLデータベース:重要な違​​いApr 25, 2025 am 12:02 AM

RedisデータベースとSQLデータベースの主な違いは、Redisが高性能および柔軟性要件に適したインメモリデータベースであることです。 SQLデータベースは、複雑なクエリとデータの一貫性要件に適したリレーショナルデータベースです。具体的には、1)Redisは高速データアクセスとキャッシュサービスを提供し、キャッシュおよびリアルタイムのデータ処理に適した複数のデータ型をサポートします。 2)SQLデータベースは、テーブル構造を介してデータを管理し、複雑なクエリとトランザクション処理をサポートし、データの一貫性を必要とするeコマースや金融システムなどのシナリオに適しています。

Redis:データストアとサービスとしてどのように機能するかRedis:データストアとサービスとしてどのように機能するかApr 24, 2025 am 12:08 AM

redisactsassassadatastoreandaservice.1)asadatastore、itusesin memorystorage for fastorations、supporting variousdatastructureSlike-key-valuepairsandsortedsets.2)asaservice、iteasruascruascriptingrupting criptingforceptingpurplecomplecomplecprexoperations

Redis vs.その他のデータベース:比較分析Redis vs.その他のデータベース:比較分析Apr 23, 2025 am 12:16 AM

他のデータベースと比較して、Redisには次の独自の利点があります。1)非常に速い速度、および読み取り操作は通常、マイクロ秒レベルにあります。 2)豊富なデータ構造と操作をサポートします。 3)キャッシュ、カウンター、公開サブスクリプションなどの柔軟な使用シナリオ。 Redisまたはその他のデータベースを選択する場合、特定のニーズとシナリオに依存します。 Redisは、高性能および低遅延のアプリケーションでうまく機能します。

Redisの役割:データストレージと管理機能の調査Redisの役割:データストレージと管理機能の調査Apr 22, 2025 am 12:10 AM

Redisは、データストレージと管理において重要な役割を果たしており、複数のデータ構造と持続性メカニズムを通じて最新のアプリケーションの中核となっています。 1)Redisは、文字列、リスト、コレクション、注文されたコレクション、ハッシュテーブルなどのデータ構造をサポートし、キャッシュや複雑なビジネスロジックに適しています。 2)RDBとAOFの2つの持続方法を通じて、Redisは信頼できるストレージとデータの迅速な回復を保証します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。