Um mit Redis zu beginnen, reicht dieser aus

1. Was ist Redis

redis ist eine hochleistungsfähige NOSQL - Reihe nicht relationaler Datenbanken

Bild

1.1 Was ist NOSQL

NoSQL (NoSQL = Not Only SQL), was „mehr als nur SQL“ bedeutet, ist ein brandneues Datenbankkonzept, das sich allgemein auf nicht-relationale Datenbanken bezieht.

Mit dem Aufkommen von Web 2.0-Websites im Internet sind traditionelle relationale Datenbanken unfähig geworden, mit Web 2.0-Websites fertig zu werden, insbesondere mit ultragroßen und hochparallelen SNS-ähnlichen rein dynamischen Web 2.0-Websites, was viele unüberwindbare Probleme aufwirft Datenbank hat sich aufgrund ihrer Eigenheiten sehr schnell entwickelt. Die NoSQL-Datenbank wurde erstellt, um die Herausforderungen zu lösen, die durch umfangreiche Datensammlungen und mehrere Datentypen entstehen, insbesondere durch die Anwendung von Big Data.

1.1.1 Vergleich von NOSQL und relationalen Datenbanken

Vorteil:

1. Kosten: Die nosql-Datenbank ist einfach und leicht zu implementieren. Sie ist im Grunde eine Open-Source-Software. Sie muss nicht viel Geld ausgeben, um sie zu kaufen und zu verwenden, wie die Verwendung von Oracle. Sie ist billiger als relationale Datenbanken.

2. Abfragegeschwindigkeit: Die nosql-Datenbank speichert Daten im Cache, die relationale Datenbank speichert Daten auf der Festplatte, und die natürliche Abfragegeschwindigkeit ist weitaus geringer als die der nosql-Datenbank.

3. Format der gespeicherten Daten: Das Speicherformat von Nosql ist Schlüssel, Wert, Dokument, Bild usw., sodass verschiedene Formate wie Grundtypen und Objekte oder Sammlungen gespeichert werden können, während die Datenbank nur Grundtypen unterstützt.

4. Skalierbarkeit: Relationale Datenbanken haben die Einschränkung von Abfragemechanismen für mehrere Tabellen wie Join, was eine Erweiterung erschwert.

Mangel:

1. Die Werkzeuge und Materialien für die Wartung sind begrenzt, da nosql eine neue Technologie ist und seit mehr als 10 Jahren nicht mehr mit der Technologie relationaler Datenbanken verglichen werden kann.

2. Es bietet keine Unterstützung für SQL Wenn es Industriestandards wie SQL nicht unterstützt, entstehen den Benutzern gewisse Kosten für das Erlernen und Verwenden.

3. Bietet keine relationale Datenbanktransaktionsverarbeitung.

1.1.2 Vorteile nicht relationaler Datenbanken

  1. Leistung NOSQL basiert auf Schlüssel-Wert-Paaren, die man sich als Korrespondenz zwischen dem Primärschlüssel und dem Wert in der Tabelle vorstellen kann, und muss nicht von der SQL-Schicht geparst werden, daher ist die Leistung sehr hoch.

  2. Die Skalierbarkeit liegt auch daran, dass es keine Kopplung zwischen Daten basierend auf Schlüssel-Wert-Paaren gibt, sodass eine horizontale Skalierung sehr einfach ist.

1.1.3 Vorteile relationaler Datenbanken

1. Komplexe Abfragen Sie können SQL-Anweisungen verwenden, um sehr komplexe Datenabfragen zwischen einer Tabelle und mehreren Tabellen durchzuführen.

2. Transaktionsunterstützung ermöglicht die Realisierung von Datenzugriffsanforderungen mit hoher Sicherheitsleistung. Bei diesen beiden Arten von Datenbanken sind die Stärken des jeweils anderen ihre Schwächen und umgekehrt.

1.1.4 Zusammenfassung

Relationale Datenbanken und NoSQL-Datenbanken sind kein Gegensatz, sondern komplementär, d. h. es werden in der Regel relationale Datenbanken verwendet, und NoSQL-Datenbanken werden verwendet, wenn NoSQL geeignet ist, sodass NoSQL-Datenbanken die Mängel relationaler Datenbanken ausgleichen können. Im Allgemeinen werden die Daten in der relationalen Datenbank gespeichert und die Daten der relationalen Datenbank werden in der nosql-Datenbank gesichert.

1.2 Mainstream-NOSQL-Produkte

Key-Value-Speicherdatenbank Verwandte Produkte: Tokyo Cabinet/Tyrant, Redis, Voldemort, Berkeley DB Typische Anwendungen: Inhalts-Caching, hauptsächlich verwendet, um hohe Zugriffslasten großer Datenmengen zu bewältigen. Datenmodell: Eine Reihe von Schlüssel-Wert-Paaren Vorteile: Schnelle Abfragen Nachteile: Die gespeicherten Daten sind weniger strukturiert

Verwandte Produkte für Spaltenspeicherdatenbanken: Cassandra, HBase, Riak Typische Anwendung: Verteiltes Dateisystem Datenmodell: Gespeichert in einem Spaltencluster , koexistierend mit derselben Datenspalte Vorteile: Schnelle Suchgeschwindigkeit, starke Skalierbarkeit und einfachere Verteilung Nachteile der Erweiterung: relativ eingeschränkte Funktionen

Dokumentendatenbank verwandte Produkte: CouchDB, MongoDB Typische Anwendung: Webanwendung (ähnlich Key-Value, Wert ist strukturiert) Datenmodell: Eine Reihe von Schlüssel-Wert-Paaren Vorteile: Die Anforderungen an die Datenstruktur sind nicht streng Nachteile: Die Abfrageleistung ist nicht hoch und Mangel an einheitlicher Abfragesyntax

Graphdatenbank Relevante Datenbank: Neo4J, InfoGrid, Infinite Graph Typische Anwendung: Soziales Netzwerk Datenmodell: Graphstruktur Vorteil: Verwenden Sie Graphstruktur-bezogene Algorithmen. Nachteil: Es ist notwendig, den gesamten Graphen zu berechnen, um das Ergebnis zu erhalten, und es ist nicht einfach, eine verteilte Clusterlösung zu erstellen.

1.3 Was ist Redis

Redis ist eine Open-Source-Hochleistungs-Schlüsselwertdatenbank, die in C-Sprache entwickelt wurde. Die offiziellen Testdaten werden bereitgestellt. 50 führen gleichzeitig 100.000 Anforderungen aus, die Lesegeschwindigkeit beträgt 110.000 Mal/s und die Schreibgeschwindigkeit 81.000 Mal. /s , und Redis passt sich den Speicheranforderungen in verschiedenen Szenarien an, indem es eine Vielzahl von Schlüsselwert-Datentypen bereitstellt

Die bisher von Redis unterstützten Schlüsselwert-Datentypen lauten wie folgt:

Zeichenfolge vom Typ Zeichenfolge

Hash-Typ Hash

Listentyp Liste

Sammlungstyp festgelegt

Sortierter Sammlungstyp sortedset

1.3.1 Anwendungsszenarien von redis

Cache (Datenabfrage, Kurzverbindung, News-Content, Commodity-Content etc.)

Chatroom Online-Freundesliste

Aufgabenwarteschlange. (Seckill, Hamsterkäufe, 12306 usw.)

Anwendungs-Bestenliste

Website-Besuchsstatistik

Datenablaufverarbeitung (kann auf Millisekunden genau sein

Sitzungstrennung in einer verteilten Clusterarchitektur

2. Herunterladen und installieren

Offizielle Website: Redis

Chinesische Website: Chinesische Redis-Website

Die Dekomprimierung kann direkt verwendet werden:

        redis.windows.conf: Konfigurationsdatei

        redis-cli.exe: Client für redis

        redis-server.exe: Redis-Serverseite

3. Befehlsbetrieb

3.1 Die Datenstruktur von redis:

Redis speichert Daten im Format von Schlüssel und Wert, wobei der Schlüssel eine Zeichenfolge ist und der Wert 5 verschiedene Datenstrukturen hat

Die Datenstruktur des Wertes:

1. Zeichenfolge vom Typ Zeichenfolge

2. Hash-Typ Hash: Kartenformat

3. Listentyp Liste: Linkedlist-Format. Unterstützung für sich wiederholende Elemente

4. Collection Type Set: Doppelte Elemente sind nicht erlaubt

5. Sorted-Set-Typ sortedset: doppelte Elemente sind nicht erlaubt, und die Elemente haben eine Reihenfolge
    

3.2 Zeichenfolge vom Typ Zeichenfolge

 3.2.1 Lagerung

Schlüsselwert festlegen

192.168.1.105:0>set username zhangsan
"OK"

3.2.2 Erhalten

Schlüssel bekommen

192.168.1.105:0>get username
"zhangsan"

3. Löschen

des Schlüssels

192.168.1.105:0>del username
"1"


3.3 Hash-Typ Hash
      

3.3.1 Lagerung

hset Schlüsselfeldwert

192.168.1.105:0>hset myhash username lisi
"1"
192.168.1.105:0>hset myhash password 123
"1"

3.3.2 Erhalten

hget Schlüsselfeld: Ruft den Wert ab, der dem angegebenen Feld entspricht

192.168.1.105:0>hget myhash username
"lisi"

hgetall-Schlüssel: Alle Felder und Werte abrufen

192.168.1.105:0>hgetall myhash
 1)  "username"
 2)  "lisi"
 3)  "password"
 4)  "123"

3.3.3 Löschen

hdel-Schlüsselfeld

192.168.1.105:0>hdel myhash username
"1"

3.4 Listentypen

Liste: Sie können ein Element zum Kopf (links) oder Ende (rechts) der Liste hinzufügen

3.4.1 Hinzufügen

lpush key value: fügt das Element zur linken Tabelle der Liste hinzu

rpush key value: fügt das Element rechts von der Liste hinzu

192.168.1.105:0>lpush mylist a
"1"
192.168.1.105:0>lpush mylist b
"2"
192.168.1.105:0>rpush mylist c
"3"

3.4.2 Erhalten

lrange key start end : Bereichserfassung

192.168.1.105:0>lrange mylist 0 -1
 1)  "b"
 2)  "a"
 3)  "c"

3.4.3 Löschen

lpop key: löscht das ganz linke Element der Liste und gibt das Element zurück

192.168.1.105:0>lpop mylist
"b"

rpop-Taste: löscht das ganz rechte Element der Liste und gibt das Element zurück

192.168.1.105:0>rpop mylist
"c"

3.5 Sammlungstypen

set erlaubt keine doppelten Elemente

3.5.1 Lagerung

sadd Schlüsselwert

192.168.1.105:0>sadd myset a
"1"
192.168.1.105:0>sadd myset a
"0"

3.5.2 Erhalten

smembers-Schlüssel: Holen Sie sich alle Elemente in der Set-Sammlung

192.168.1.105:0>smembers myset
 1)  "a"


3.5.3 Löschen

srem-Schlüsselwert: Löscht ein Element in der Set-Sammlung    

192.168.1.105:0>srem myset a
"1"

3.6 Sortierte Set-Typen

sortedset: Doppelte Elemente sind nicht erlaubt, und die Elemente sind in der richtigen Reihenfolge.Jedes Element ist mit einer Punktzahl vom doppelten Typ verbunden. Redis sortiert die Mitglieder des Sets von klein nach groß durch Partituren.

3.6.1 Lagerung

zadd-Key-Score-Wert

192.168.1.105:0>zadd mysort 60 zhangsan
"1"
192.168.1.105:0>zadd mysort 50 lisi
"1"
192.168.1.105:0>zadd mysort 80 wangwu
"1"

3.6.2 Erhalten

zrange key start end [withscores]
 

192.168.1.105:0>zrange mysort 0 -1
 1)  "lisi"
 2)  "zhangsan"
 3)  "wangwu"
192.168.1.105:0>zrange mysort 0 -1 withscores
 1)  "lisi"
 2)  "50"
 3)  "zhangsan"
 4)  "60"
 5)  "wangwu"
 6)  "80"

3.6.3 Löschen

zrem-Schlüsselwert

192.168.1.105:0>zrem mysort lisi
"1"

3.7 Allgemeine Ordnung

1. Tasten * : Alle Tasten abfragen

2. type key : Holen Sie sich den Werttyp, der dem Schlüssel entspricht

3. del key: Löscht den angegebenen Schlüsselwert

4. Redis-Persistenzmechanismus

Redis ist eine In-Memory-Datenbank. Wenn der Redis-Server und der Computer neu gestartet werden, gehen die Daten verloren. Wir können die Daten im Redis-Speicher in einer Datei auf der Festplatte speichern.

4.1 RDB (Standardmodus)

Es ist keine Konfiguration erforderlich. Dieser Mechanismus wird standardmäßig verwendet. In einem bestimmten Intervall wird die Änderung des Schlüssels erkannt, und dann werden die Daten persistiert.

1. Bearbeiten Sie die redis.conf-Datei

#   after 900 sec (15 min) if at least 1 key changed
save 900 1
#   after 300 sec (5 min) if at least 10 keys changed
save 300 10
#   after 60 sec if at least 10000 keys changed
save 60 10000

2. Starten Sie den Redis-Server neu und geben Sie den Namen der Konfigurationsdatei an

cd C:\develop\redis-2.4.5-win32-win64\64bit
redis-server.exe redis.conf


4.2 AOF

Die Art der Protokollierung kann die Ausführung jedes Befehls aufzeichnen. Daten können nach jeder Befehlsoperation persistiert werden

1. Bearbeiten Sie die redis.conf-Datei

appendonly no (aof ausschalten) --> appendonly yes (aof einschalten)
                
# appendfsync always : Jede Operation beibehalten

appendfsync everysec : jede Sekunde bestehen bleiben

# appendfsync no : nicht bestehen bleiben

5. Java-Client Jedis

Jedis: Ein Java-Tool zum Betrieb der Redis-Datenbank.

5.1 Schnellstart

1. Importieren Sie Maven-Koordinaten  

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.11.1</version>
</dependency>

 2. Verwenden

/**
 * 快速入门
 */
@Test
public void test1(){
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105",6379);//如果使用空参构造,默认值 "localhost",6379端口
    //2.操作
    jedis.set("username","zhangsan");
    //3.关闭连接
    jedis.close();
}

5.2 Jedis betreibt verschiedene Datenstrukturen in redis

5.2.1 Zeichenfolge vom Typ Zeichenfolge

Shop-Set

Sie können die Methode setex() verwenden, um einen Schlüsselwert zu speichern, der eine Ablaufzeit angeben kann

bekommen bekommen

@Test
public void test2() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    //存储
    jedis.set("username", "zhangsan");
    jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
    //获取
    String username = jedis.get("username");
    System.out.println(username);
    //3.关闭连接
    jedis.close();
}

5.2.2 Hash-Typen

Hash: Kartenformat 

hset

hget

hgetAll
 

@Test
public void test3() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    // 存储hash
    jedis.hset("user", "name", "lisi");
    jedis.hset("user", "age", "23");
    jedis.hset("user", "gender", "female");

    // 获取hash
    String name = jedis.hget("user", "name");
    System.out.println(name);

    // 获取hash的所有map中的数据
    Map<String, String> user = jedis.hgetAll("user");

    // keyset
    Set<String> keySet = user.keySet();
    for (String key : keySet) {
        //获取value
        String value = user.get(key);
        System.out.println(key + ":" + value);
    }
    //3.关闭连接
    jedis.close();
}

5.2.3 Listentypen

Liste : Linkedlist-Format. Unterstützung für sich wiederholende Elemente

lpush / rppush

lpop / rpop

lrange start end : Bereichserfassung

@Test
public void test4() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    // list 存储
    jedis.lpush("mylist","a","b","c");//从左边存
    jedis.rpush("mylist","a","b","c");//从右边存

    // list 范围获取
    List<String> mylist = jedis.lrange("mylist", 0, -1);
    System.out.println(mylist);

    // list 弹出
    String element1 = jedis.lpop("mylist");//c
    System.out.println(element1);

    String element2 = jedis.rpop("mylist");//c
    System.out.println(element2);

    // list 范围获取
    List<String> mylist2 = jedis.lrange("mylist", 0, -1);
    System.out.println(mylist2);
    //3.关闭连接
    jedis.close();
}

5.2.4 Sammlungstypen

set : Doppelte Elemente nicht zulassen

traurig

smembers: Holen Sie sich alle Elemente

@Test
public void test5() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    // set 存储
    jedis.sadd("myset","java","php","c++");
    // set 获取
    Set<String> myset = jedis.smembers("myset");
    System.out.println(myset);
    //3.关闭连接
    jedis.close();
}


5.2.5 Sortierte Set-Typen

sortedset: Doppelte Elemente sind nicht erlaubt, und die Elemente sind geordnet

zadd

zrange

@Test
public void test6() {
    //1.获取连接
    Jedis jedis = new Jedis("192.168.1.105", 6379);
    //2.操作
    // sortedset 存储
    jedis.zadd("mysortedset",3,"亚瑟");
    jedis.zadd("mysortedset",30,"后裔");
    jedis.zadd("mysortedset",55,"孙悟空");

    // sortedset 获取
    List<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
    System.out.println(mysortedset);
    //3.关闭连接
    jedis.close();
}

5.3 Jedis-Verbindungspool: JedisPoo

@Test
public void test7(){
    //1.创建一个配置对象
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(50);
    config.setMaxIdle(10);

    //1.创建Jedis连接池对象
    JedisPool jedisPool = new JedisPool(config,"192.168.1.105",6379);

    //2.获取连接
    Jedis jedis = jedisPool.getResource();

    //3. 使用
    jedis.set("hehe","heihei");

    //4. 关闭 归还到连接池中
    jedis.close();
}

Verbindungspool-Toolklasse

package com.itterence.utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 连接池工具类
 */
public class JedisPoolUtils {

    private static JedisPool jedisPool;

    static {
        //读取配置文件
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        //创建Properties对象
        Properties pro = new Properties();
        //关联文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取数据,设置到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));

        //初始化JedisPool
        jedisPool = new JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));

    }

    /**
     * 获取连接方法
     */
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}

jedis.properties 

host=192.168.1.105
port=6379
maxTotal=50
maxIdle=10

Prüfung

@Test
public void test8(){
    //通过连接池工具类获取
    Jedis jedis = JedisPoolUtils.getJedis();
    jedis.set("hello","world");
    String str = jedis.get("hello");
    System.out.println(str);
    jedis.close();
}

Ich denke du magst

Origin blog.csdn.net/qq_39997939/article/details/122746896
Empfohlen
Rangfolge