本文介紹NoSQL技術:Redis的安裝及其使用。操作系統:Ubuntu24.04
Redis介紹
Redis是一個鍵值(key-value)存儲系統,即鍵值對非關系型數據庫,和Memcached類似,目前正在被越來越多的互聯網公司采用。Redis作為一個高性能的鍵值數據庫,不僅在很大程度上彌補了memcached這類鍵值存儲的不足,而且在部分場合下可以對關系數據庫起到很好的補充作用。Redis提供了Python、Ruby、Erlang、PHP客戶端,使用很方便。
Redis支持存儲的值(value)類型包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove以及取交集、并集和差集等豐富的操作,而且這些操作都是原子性的。在此基礎上,Redis支持各種不同方式的排序。與memcached一樣,為了保證效率,Redis中的數據都是緩存在內存中的,它會周期性地把更新的數據寫入磁盤,或者把修改操作寫入追加的記錄文件;此外,Redis還實現了主從(master-slave)同步。
Redis安裝
方法一是自己下載安裝包
下載地址 https://redis.io/downloads/? ,找到下載鏈接。Redis有很多產品,如Redis Enterprise Software、Redis OSS & Stack、Redis Insight等,而我們要選擇的是Redis downloads。然后再選擇合適的版本。發現現在可用的redis是7.4版和7.8.4版
方法二是直接使用直接用apt命令進行安裝
首先更新APT軟件包列表:
sudo apt update
然后使用apt命令安裝Redis服務端:
sudo apt install redis-server
啟動Redis服務并設置開機啟動:
sudo systemctl start redis-server
sudo systemctl enable redis-server
試了一下,啟動redis用 sudo service redis start 也可以
驗證Redis是否成功安裝并運行:
redis-cli ping
如果一切正常,它將返回PONG。
至此,Redis已經安裝完成,現在可以執行如下命令開啟Redis服務器:
redis-server
這里顯示使用apt安裝的redis版本是7.0.15
Redis基本命令(shell模式)
我們借助redis客戶端來完成redis的相關管理工作。
輸入如下命令啟動Redis客戶端:
redis-cli
客戶端連上服務器之后,會顯示“127.0.0.1:6379>”的命令提示符信息,表示服務器的IP地址為127.0.0.1,端口為6379。
現在可以執行簡單的操作,比如,設置鍵為”hello”,值為”world”,并且取出鍵為”hello”時對應的值。執行下列代碼:
set hello world
get hello
Redis操作(shell模式)
我們借助redis客戶端來完成redis的相關管理工作。Redis是一個鍵值對(key-value)數據庫,value主要支持5種數據類型
- 字符串 string
- 哈希 hash
- 列表list
- 集合 set
- 有序集合sorted set
假設有三個表,即Student、Course和SC,三個表的字段(列)和數據如圖6-3所示。
Student表:
Redis數據庫是以<key,value>的形式存儲數據,把三個表的數據存入Redis數據庫時,key和value的確定方法如下:
key=表名:主鍵值:列名
value=列值
例如,把每個表的第一行記錄保存到Redis數據中,需要執行的命令如下:
set Student:95001:Sname liyong
set Course:1:Cname database
set SC:95001:1:Grade 92
新增鍵值對:
set Course:8:Cname algorithm
set Course:8:Ccredit 4
修改鍵值對:
get Course:8:Cname
set Course:8:Cname Bigdata
get Course:8:Cname
刪除鍵值對:
get Course:8:Cname
del Course:8:Cname
del Course:8:Cname
Redis Java API編程
配置環境
我們繼續在”bigdata1”項目中編寫操作Redis的Java代碼。
參考:
https://m.runoob.com/redis/redis-java.html
https://www.cnblogs.com/sss4/p/16359420.html
先去下面這個網站看看有哪些可用的版本,以及配置文件應該怎么寫
https://mvnrepository.com/
輸入”redis”后,找到很多包
根據教材,使用的應該是”Jedis”項目,打開該項目
里面有Maven的配置語句,等會兒我們要用
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
??? <groupId>redis.clients</groupId>
??? <artifactId>jedis</artifactId>
??? <version>5.1.2</version>
</dependency>
在IDEA中,打開pom.xml(在左邊的樹形菜單中),這個文件是Maven的核心配置文件,將代碼復制進去,刷新
測試連接
首先新建一個Redis軟件包,由于redis默認只允許從本地連接,還需要在Linux虛擬機上操作
修改/etc/redis/redis.conf
sudo vim /etc/redis/redis.conf
將bind 127.0.0.1 ::1修改為bind 0.0.0.0 ::1 protect-mode為no
新建一個類,測試
package redis;import redis.clients.jedis.Jedis;public class TestRedis {public static void main(String[] args) {//連接Redis 服務Jedis jedis = new Jedis("192.168.179.143", 6379);// 如果 Redis 服務設置了密碼,需要下面這行,沒有就不需要// jedis.auth("123456");System.out.println("連接成功");//查看服務是否運行System.out.println("服務正在運行: "+jedis.ping());}
}
操作5種數據類型
繼續編寫一個類,測試redis支持的5種數據類型:String、Hash、List、Set、Zset。代碼如下:
package redis;import redis.clients.jedis.Jedis;import java.util.List;
import java.util.Set;public class TestRedis2 {// 1.創建Jedis客戶端// 連接Redis 服務private Jedis jedis = new Jedis("192.168.179.143", 6379);// 如果 Redis 服務設置了密碼,需要下面這行,沒有就不需要// jedis.auth("123456");public void testString() {// 2.使用Jedis客戶端操作Stringjedis.setex("name", 6, "張根");String name = jedis.get("name");System.out.println(name);}public void testHash() {// 2.使用Jedis客戶端操作hashjedis.hset("user", "name", "張根");jedis.hset("user", "age", "18");String name = jedis.hget("user", "name");String age = jedis.hget("user", "age");System.out.println(name);System.out.println(age);}public void testList() {// 2.使用Jedis客戶端操作listjedis.lpush("userList", "張弢", "張啟樵", "張三豐", "張無忌");List<String> userList = jedis.lrange("userList", 0, -1);for (String user : userList) {System.out.println(user);}}public void testSet() {// 2.使用Jedis客戶端操作集合setjedis.sadd("sname", "Martin");jedis.sadd("sname", "Jack");jedis.sadd("sname", "Tom");Set<String> userList = jedis.smembers("sname");for (String user : userList) {System.out.println(user);}}public void testZset() {// 2.使用Jedis客戶端操作有序集合Zsetjedis.zadd("programingLanguages", 1, "C");jedis.zadd("programingLanguages", 2, "C++");jedis.zadd("programingLanguages", 3, "Java");jedis.zadd("programingLanguages", 0, "Python");List<String> programingLanguages = jedis.zrange("programingLanguages", 0, -1);for (String language : programingLanguages) {System.out.println(language);}}public void colseRedis() {;// 3.關閉客戶端jedis.close();System.out.println("關閉jedis成功");}public static void main(String[] args) {TestRedis2 tr2 = new TestRedis2();tr2.testString();tr2.testList();tr2.testHash();tr2.testSet();tr2.testZset();tr2.colseRedis();}
}