SpringBootでのRedisのset,map,list,value,エンティティークラスなどの基本操作の紹介

6357 ワード

今日はSpringBootでのRedisのset、map、list、valueなどの基本操作の使い方をご紹介します
前節ではSpringBootでRedisキャッシュ・データベースを構築する方法について説明しましたが、この節ではRedisの具体的な操作について説明します.
Redisの歴史、そして現在の普及度については私よりもよく知っているでしょう.key-valueのnosqlデータベースとして、Redisの機能は特に強力です.
Redisでよく使われる操作について説明します.
1.set値を格納する事例紹介:
        Set<String>set1=new HashSet<String>();
        set1.add("set1");
        set1.add("set2");
        set1.add("set3");
        redisTemplate.opsForSet().add("set1",set1);
        Set<String> resultSet =redisTemplate.opsForSet().members("set1");
        System.out.println("resultSet:"+resultSet);

実行結果:
resultSet:[[set3, set2, set1]]

2.map値を格納するケースの紹介:
  Map<String,String> map=new HashMap<String,String>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        map.put("key4","value4");
        map.put("key5","value5");
        redisTemplate.opsForHash().putAll("map1",map);
        Map<String,String> resultMap= redisTemplate.opsForHash().entries("map1");
        List<String>reslutMapList=redisTemplate.opsForHash().values("map1");
        Set<String>resultMapSet=redisTemplate.opsForHash().keys("map1");
        String value=(String)redisTemplate.opsForHash().get("map1","key1");
        System.out.println("value:"+value);
        System.out.println("resultMapSet:"+resultMapSet);
        System.out.println("resultMap:"+resultMap);
        System.out.println("resulreslutMapListtMap:"+reslutMapList);

実行結果:
value:value1
resultMapSet:[key1, key2, key5, key3, key4]
resultMap:{key3=value3, key2=value2, key1=value1, key5=value5, key4=value4}
resulreslutMapListtMap:[value1, value2, value5, value3, value4]

3.リスト値を格納するケースの説明:
 List<String> list1=new ArrayList<String>();
        list1.add("a1");
        list1.add("a2");
        list1.add("a3");

        List<String> list2=new ArrayList<String>();
        list2.add("b1");
        list2.add("b2");
        list2.add("b3");
        redisTemplate.opsForList().leftPush("listkey1",list1);
        redisTemplate.opsForList().rightPush("listkey2",list2);
        List<String> resultList1=(List<String>)redisTemplate.opsForList().leftPop("listkey1");
        List<String> resultList2=(List<String>)redisTemplate.opsForList().rightPop("listkey2");
        System.out.println("resultList1:"+resultList1);
        System.out.println("resultList2:"+resultList2);

実行結果:
resultList1:[a1, a2, a3]
resultList2:[b1, b2, b3]

ここでは、leftPushでもrightPushでもleftPopまたはrightPoPのいずれかで取得できる値ですが、取得の遍歴方向が異なります.データ構造を学んだことがある人は、ループチェーンテーブルが前後に遍歴できることを知っています.ここのシーンと同じです.まだ分からないことがあれば、この部分のソースコードを見てもいいですが、実は遍歴方向が違うので、効率も違います.だからleftPushはleftPoPで遍歴し、rightPushはrightPoPで遍歴したほうがいいです.
4.key-value値を格納するケースの説明:
        System.out.println("      。。。。。。。。。");
        redisTemplate.opsForValue().set("key1","value1");
        redisTemplate.opsForValue().set("key2","value2");
        redisTemplate.opsForValue().set("key3","value3");
        redisTemplate.opsForValue().set("key4","value4");
        System.out.println("        。。。。。。。");
        String result1=redisTemplate.opsForValue().get("key1").toString();
        String result2=redisTemplate.opsForValue().get("key2").toString();
        String result3=redisTemplate.opsForValue().get("key3").toString();
        System.out.println("     :result:"+result1+"  "+result2+"   "+result3);


実行結果:
      。。。。。。。。。
        。。。。。。。
     :result:value1  value2   value3

4.エンティティークラスを保管するケースの紹介:
        List<Blacklist> blackList=blacklistDao.findAll();
        redisTemplate.opsForValue().set("blacklist",blackList);
        List<Blacklist> resultBlackList= redisTemplate.opsForValue().get("blacklist");
        for(Blacklist blacklist:resultBlackList){
            System.out.println("ip:"+blacklist.getIp());
        }

エンティティークラス:
package example.entity;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "blacklist")
public class Blacklist implements Serializable
{
    private static final long serialVersionUID = -1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(name = "ip", nullable = true, length = 30)
    private String ip;

    @Temporal(TemporalType.TIMESTAMP)
    private Date iptime; //     ,  :yyyy-MM-dd HH:mm:ss

    public Blacklist() {
    }

    public Blacklist(String ip, Date iptime) {
        this.ip = ip;
        this.iptime = iptime;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public Date getIptime() {
        return iptime;
    }

    public void setIptime(Date iptime) {
        this.iptime = iptime;
    }
}

実行結果:
ip:127.0.0.2
ip:127.0.0.3
ip:127.0.0.4
ip:127.0.0.5
ip:127.0.0.10
ip:127.0.0.1

ここで注意すべきは、エンティティクラスがシーケンスを実装しなければならない場合、NO者はsetの値がいくらであっても、最後に格納された結果はnullである.
これでRedisの一般的なストレージ方法について説明します.次のセクションでは、Redisがデータベースの同期を実現する方法について説明します.
つまり、クエリーと更新の分離を実現し、クエリー時にRedisキャッシュのデータをクエリーし、更新操作時にデータベース操作を実行し、Redisの関連キー値を同期的に更新します.明日は国慶節です.私はここで早めにみんなの国慶節の楽しみを祈ります.私は国庆节の后でブログの内容を更新することができて、みんなの観覧に感谢して読みます!もし皆さんがソースコードを望んでいるならばあるいはブログに対してどんな异议があるならばすべて私のQQをプラスすることができます:08017534お邪魔します!!!