Najpristupačniji Redis tutorijal za početnike na svetu
Kao odgovoran tehnički bloger, smatram da je neophodno da podelim proces svog upoznavanja sa Redis-om, kako bi poslužio kao referenca drugim drugarima. Ako negde pogrešim, nemojte se ustezati — dođite i dajte mi šamar (ali blago, bez oticanja, jer bi to pokvarilo izgled).

Ranije smo već obradili instalaciju Redis-a, pogledajte ovde: Instalacija Redis-a, vrlo detaljno
01. Redis strukture podataka
Redis ima 5 osnovnih struktura podataka — String, Hash, List, Set i SortedSet — koje morate savladati da biste naučili Redis. Pored njih, postoje HyperLogLog, Geo i Pub/Sub, koje možemo smatrati naprednim strukturama podataka. U ovom uvodnom članku uzećemo String kao primer.
String struktura se koristi veoma široko — na primer, podatke o prijavi korisnika možemo pretvoriti u JSON string i keširati ih, a zatim ih, kada zatrebaju, deserijalizovati.
Drugovi verovatno već znaju da je String u Javi nepromenljiv — ne može se izmeniti. Redis-ov String je dinamičan i može se izmeniti, pa su to dve različite stvari. Što se tiče Redis-ove String strukture, mislim da Lao Qian u svom Redis tutorijalu to objašnjava vrlo jasno — hajde da zajedno pročitamo.

Redis-ov String je po internoj strukturi implementacije sličan Java-inom ArrayList-u — koristi unapred alokaciju redundansnog prostora kako bi smanjio učestalu alokaciju memorije. Kao što je prikazano na gornjoj slici, trenutno stvarno alokacija prostora za string je capacity (kapacitet), koja je obično veća od stvarne dužine stringa len. Kada je dužina stringa manja od 1 MB, proširenje prostora je udvostručenje postojećeg; kada dužina pređe 1 MB, jedno proširenje dodaje samo 1 MB prostora. Maksimalna dužina je 512 MB.
02. Praktičan rad sa Redis-om
Dobro, dobro, pretpostavljam da su mnogi drugari već spremni i željni praktičnog rada. Evo, krećemo.
Uđite u redis-cli komandnolinijski klijent (kako se ulazi, već je objašnjeno u odeljku o instalaciji). Ovaj klijent je prilično pametan — kada kucate komandu, iskoči odgovarajući predlog.

Kada pritisnete razmak nakon ključne reči, predlog na tom mestu automatski nestaje.

U nastavku je kompletan skup komandi za testiranje parova ključ-vrednost — drugovi mogu da ih isprobaju ručno prema ovom formatu.
> set name cmower
OK
> get name
"cmower"
> exists name
(integer) 1
> del name
(integer) 1
> get name
(nil)Komanda set služi za čuvanje para ključ-vrednost. U ovom primeru, name je ključ, a cmower je vrednost.
Komanda get služi za dohvatanje para ključ-vrednost.
Komanda exists služi za proveru da li par ključ-vrednost postoji:
(integer) 1znači da postoji, a(integer) 0znači da ne postoji.Komanda del služi za brisanje para ključ-vrednost:
(integer) 1znači da je izvršenje uspelo, a(integer) 0znači da je izvršenje propalo.Kada se par ključ-vrednost obriše, a zatim se ponovo dohvati komandom get, rezultat je
(nil).
Možda će se neki drugar zapitati šta znači nil. To je ključna reč u programskim jezicima kao što su Objective-C, Swift, Ruby i Lua. Detaljnije objašnjenje možete naći u knjizi „Programming in Lua, drugo izdanje":
nil je tip koji ima samo jednu vrednost — nil. Njegova glavna funkcija je da razlikuje sve druge vrednosti; kao što je već rečeno, podrazumevana vrednost globalne promenljive pre prvog dodeljivanja je nil, dodeljivanje nil globalnoj promenljivoj jednako je njenom brisanju, a Lua koristi nil da označi situaciju „nevažeće vrednosti (non-value)", odnosno situaciju u kojoj ne postoji nijedna važeća vrednost.
Za detaljno objašnjenje korišćenja Redis komandi, možete pogledati sledeći link:
Ovo je prevod Redis Command Reference i Redis Documentation — pristojno, zar ne?
03. Korišćenje Redis-a u Javi
Neki drugari možda pitaju: „Erge, ja sam Java programer, kako da koristim Redis u Javi?" Odlično pitanje — evo, odmah ćemo na to.
Prvi korak, dodajte Jedis (spojenica od Java i Redis) zavisnost u projekat:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>Drugi korak, napravite klasu UserInfo (informacije o korisniku):
public class UserInfo {
private String name;
private int age;
public UserInfo(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "UserInfo{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
// getter / setter
}Treći korak, dodajte Gson (za serijalizaciju i deserijalizaciju informacija o korisniku) zavisnost u projekat:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
<scope>compile</scope>
</dependency>Četvrti korak, napravite test klasu RedisTest:
public class RedisTest {
private static final String REDIS_KEY = "user";
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 6379);
Gson gson = new Gson();
UserInfo userInfo = new UserInfo("Chenmo Wang Er", 18);
jedis.set(REDIS_KEY, gson.toJson(userInfo));
UserInfo getUserInfoFromRedis = gson.fromJson(jedis.get(REDIS_KEY),UserInfo.class);
System.out.println("get:" + getUserInfoFromRedis);
System.out.println("exists:" + jedis.exists(REDIS_KEY));
System.out.println("del:" + jedis.del(REDIS_KEY));
System.out.println("get:" + jedis.get(REDIS_KEY));
}
}Konstanta REDIS_KEY je ključ pod kojim se čuvaju informacije o korisniku u Redis-u.
Uz pomoć Jedis-a, povezivanje Jave sa Redis servisom postaje vrlo jednostavno — potrebna je samo jedna linija koda:
Jedis jedis = new Jedis("localhost", 6379);Parametri su redom ime hosta i broj porta.
Za čuvanje para ključ-vrednost koristi se metod set(), za dohvatanje get(), za proveru postojanja exists(), a za brisanje del().
- Gson je open-source biblioteka koju pruža Google; može serijalizovati Java objekte u JSON stringove, a takođe i deserijalizovati (raspakovati) JSON stringove u odgovarajuće Java objekte.
Korišćenje je takođe vrlo jednostavno: metod toJson() pretvara objekat u JSON string, a fromJson() deserijalizuje JSON string u objekat.
Dobro, hajde da pogledamo izlaz programa:
get:UserInfo{name='Chenmo Wang Er', age=18}
exists:true
del:1
get:nullSasvim u skladu sa našim očekivanjima — savršeno!

04. Zahvalnost
Dakle, dragi drugari, to je celokupan sadržaj ovog članka. Zar vam nakon čitanja ne pada napamet da se odmah latite Redis-a? Hajde, delujte! Ako naiđete na probleme tokom učenja, slobodno mi se javite za razgovor — iako sam i ja početnik, imam entuzijazam.
Inače, ako želite da pišete članke na uvodnom nivou, ovaj članak je najbolji primer.
