日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

redis缓存数据库技术

發布時間:2023/12/20 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis缓存数据库技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

redis :


概念 :

redis是一款高性能的NOSQL系列的非關系型數據庫

關系型數據庫 : Mysql , oracle

非關系型的數據庫 : redis , hbase ,

  • 數據之間沒有關聯關系
  • 數據是存儲在內存中的
  • 可以獨立部署到不同機器上

注意:

經常查詢一些不需要發生變換的

  • 緩存思想解決這個問題 : 讓用戶的響應更快一些
    • 從緩存中獲取數據 :
      • 有數據 :
        • 直接返回
      • 沒有數據 :
        • 1.從數據庫中查詢
        • 2.將數據放入緩存中
        • 3.返回數據

使用java直接開辟一個緩存空間也是可以完成這項工作的 , 但是 , 如果是后期部署分布式項目 , 要在好幾臺機器上分別部署 , 使用java直接開辟就不行了 , 因為java緩存是存在于java虛擬機中 , 只能在當前電腦使用 ,而且內存較小 , 這個時候就要使用到非關系型數據庫了

1.1.什么是NOSQL
NoSQL(NoSQL = Not Only SQL),意即“不僅僅是SQL”,是一項全新的數據庫理念,泛指非關系型的數據庫。
隨著互聯網web2.0網站(用戶可以發布自己的內容 比如小視頻網站 )的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。

1.1.1. NOSQL和關系型數據庫比較
優點:
1)成本:nosql數據庫簡單易部署,基本都是開源軟件,不需要像使用oracle那樣花費大量成本購買使用,相比關系型數據庫價格便宜。
2)查詢速度:nosql數據庫將數據存儲于緩存之中,關系型數據庫將數據存儲在硬盤中,自然查詢速度遠不及nosql數據庫。
3)存儲數據的格式:nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,所以可以存儲基礎類型以及對象或者是集合等各種格式,而數據庫則只支持基礎類型。
4)擴展性:關系型數據庫有類似join這樣的多表查詢機制的限制導致擴展很艱難。

? 缺點:
? 1)維護的工具和資料有限,因為nosql是屬于新的技術,不能和關系型數據庫10幾年的技術同日而語。
? 2)不提供對sql的支持,如果不支持sql這樣的工業標準,將產生一定用戶的學習和使用成本。
? 3)不提供關系型數據庫對事務的處理。

1.1.2. 非關系型數據庫的優勢:
1)性能NOSQL是基于鍵值對的,可以想象成表中的主鍵和值的對應關系,而且不需要經過SQL層的解析,所以性能非常高。
2)可擴展性同樣也是因為基于鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。

1.1.3. 關系型數據庫的優勢:
1)復雜查詢可以用SQL語句方便的在一個表以及多個表之間做非常復雜的數據查詢。
2)事務支持使得對于安全性能很高的數據訪問要求得以實現。對于這兩類數據庫,對方的優勢就是自己的弱勢,反之亦然。

1.1.4. 總結
關系型數據庫與NoSQL數據庫并非對立而是互補的關系,即通常情況下使用關系型數據庫,在適合使用NoSQL的時候使用NoSQL數據庫,
讓NoSQL數據庫對關系型數據庫的不足進行彌補。
一般會將數據存儲在關系型數據庫中,在nosql數據庫中備份存儲關系型數據庫的數據

1.2.主流的NOSQL產品
? 鍵值(Key-Value)存儲數據庫
相關產品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型應用: 內容緩存,主要用于處理大量數據的高訪問負載。
數據模型: 一系列鍵值對
優勢: 快速查詢
劣勢: 存儲的數據缺少結構化
? 列存儲數據庫
相關產品:Cassandra, HBase, Riak
典型應用:分布式的文件系統
數據模型:以列簇式存儲,將同一列數據存在一起
優勢:查找速度快,可擴展性強,更容易進行分布式擴展
劣勢:功能相對局限
? 文檔型數據庫
相關產品:CouchDB、MongoDB
典型應用:Web應用(與Key-Value類似,Value是結構化的)
數據模型: 一系列鍵值對
優勢:數據結構要求不嚴格
劣勢: 查詢性能不高,而且缺乏統一的查詢語法
? 圖形(Graph)數據庫
相關數據庫:Neo4J、InfoGrid、Infinite Graph
典型應用:社交網絡
數據模型:圖結構
優勢:利用圖結構相關算法。
劣勢:需要對整個圖做計算才能得出結果,不容易做分布式的集群方案。
1.3 什么是Redis
Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫,官方提供測試數據,50個并發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s ,且Redis通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前為止Redis支持的鍵值數據類型如下:
1) 字符串類型 string
2) 哈希類型 hash
3) 列表類型 list
4) 集合類型 set
5) 有序集合類型 sortedset
1.3.1 redis的應用場景
? 緩存(數據查詢、短連接、新聞內容、商品內容等等)
? 聊天室的在線好友列表
? 任務隊列。(秒殺、搶購、12306等等)
? 應用排行榜
? 網站訪問統計
? 數據過期處理(可以精確到毫秒)
? 分布式集群架構中的session分離


下載安裝:(windows)

官網地址 : https://redis.io

中文網 : http://www.redis.net.cn/

3.解壓直接可以使用 :

  • redis.windows.conf : 配置文件
  • redis-cli.exe : redis客戶端
  • redis-server.exe : redis的服務器端

linux下安裝:

**下載地址:**http://redis.io/download,下載最新穩定版本。

wget http://download.redis.io/releases/redis-6.0.8.tar.gz tar xzf redis-6.0.8.tar.gzcd redis-6.0.8make

執行完 *make* 命令后,redis-6.0.8 的 *src* 目錄下會出現編譯后的 redis 服務程序 redis-server,還有用于測試的客戶端程序 redis-cli:

下面啟動 redis 服務:

# cd src# ./redis-server

注意這種方式啟動 redis 使用的是默認配置。也可以通過啟動參數告訴 redis 使用指定配置文件使用下面命令啟動。

# cd src# ./redis-server ../redis.conf

redis.conf 是一個默認的配置文件。我們可以根據需要使用自己的配置文件。

啟動 redis 服務進程后,就可以使用測試客戶端程序 redis-cli 和 redis 服務交互了。 比如:

# cd src# ./redis-cli redis> set foo bar OK redis> get foo "bar"

使用:

編輯redis.windows.conf文件,我看網上有的教程說編輯里邊maxheap ** ,但是3.x版本以后,修改的是 maxmemory ****, bytes是字節,請自行換算,我這里改成maxmemory 1024000000**。

其實這個地方可以不用設置,他描述上已經說了,redis會自動設置的。

設置redis的密碼:找到**# requirepass foobared** 改為 requirepass 我的密碼 ,本機測試可不設置。

保存后打開redis的解壓目錄,shift+鼠標左鍵找到菜單上:在此處打開命令行窗口 或 自行運行cmd命令到此目錄

也可在目錄下新建一個start.bat文件 , 里邊寫 redis-server.exe redis.windows.conf , 打開雙擊start.bat文件即可

命令如下:

redis-server.exe redis.windows.conf --maxmemory 200M

其中–maxmemory 200M是選填的,如果你配置文件redis.windows.conf中配置,這個就可以省去,如果沒配置,這個可以加也可以不加,你開心就好。

當出現此界面的時候,說明啟動成功,監聽端口6379,然后讓我們測試一下效果吧

重新打開一個DOS界面,效果如下:

如果你設置了redis的密碼,則需要在set之前執行auth 密碼 命令,否則會提示(error) NOAUTH Authentication required.

最后說一下將redis加到Windows服務中。首先還是要啟動redis服務器端,然后在運行redis客戶端,然后通過Windows的service-install命令,輸入

redis-server --service-install redis.windows.conf --loglevel verbose

以后就可以使用win的服務啟動,而不需要每次都要打開一個DOS界面啟動了。

1、安裝redis服務

redis-install.bat

echo install redis-server23 D:\redis\redis-server.exe --service-install D:\redis\redis.windows.conf --loglevel verbose

2、卸載redis服務

redis-uninstall.bat

echo uninstall redis-serverD:\redis\redis-server.exe --service-uninstall

3、啟動redis服務

start-redis.bat

echo start redis-serverD:\redis\redis-server.exe D:\redis\redis.windows.conf

命令操作 :

1.數據結構操作

redis的數據結構 :

  • redis存儲的是key : value格式的數據 , 其中key都是字符串 , value有5中不同的數據結構
    • 1 字符串類型 string
    • 2 哈希類型 hash : map格式
    • 3 列表類型 list : linkedlist 格式
    • 4 集合類型 set :
    • 5 有序集合類型 sortedset


(1)字符串類型 String

① 存儲 : set key value

② 獲取 : get key

③ 刪除 : del key


(2) 哈希類型 hash

① 存儲 : hset key field value

② 獲取 : hget key field

③ 刪除 : hdel key field

④ 獲取map集合中的所有的鍵值對

hgetall key : 獲取所有的 field 和值


(3)列表類型 : list (允許有重復元素)

list : 可以添加一個元素到列表的頭部 (左邊) 或者尾部 (右邊)

1.添加

① lpush key value : 從列表的左邊加入數據

② rpush key value : 從列表的右邊加入數據

2.獲取:

③ lrange key start end : 范圍獲取

3.刪除 :

④ lpop key : 刪除列表最左邊的元素 , 并將這個元素返回

⑤ rpop key : 刪除列表最右邊的元素 , 并將這個元素返回


(4)集合類型 : set (不允許有重復元素)

添加重復元素是不會成功的

1.存儲 :

① sadd key value

2.獲取 :

② smembers key : 獲取set集合中所有的元素

3.刪除 :

③ srem key value : 刪除集合中的某個元素


(5)有序集合類型 sortedset

不允許重復元素 , 每一個元素會關聯一個double類型的分數 , 來對元素進行排序

1.存儲 :

① zadd key score value

  • XX: 僅僅更新存在的成員,不添加新成員。
  • NX: 不更新存在的成員。只添加新成員。
  • CH: 修改返回值為發生變化的成員總數,原始是返回新添加成員的總數 (CH 是 changed 的意思)。更改的元素是新添加的成員,已經存在的成員更新分數。 所以在命令中指定的成員有相同的分數將不被計算在內。注:在通常情況下,ZADD返回值只計算新添加成員的數量。
  • INCR: 當ZADD指定這個選項時,成員的操作就等同ZINCRBY命令,對成員的分數進行遞增操作

2.獲取 :

② zrange key start end

zrange key start end withscores //獲取包括分數在內的所有元素

3.刪除 :

③ zrem key value


(6)通用命令 :

1.keys * : 查詢所有的鍵

2.type key : 查詢鍵的類型 (這兩個查詢后就可以使用對應的方法來對數據進行操作)

3.del key ; 刪除對應的鍵


持久化操作 :

redis是一個內存數據庫 , 當redis服務器重啟 , 或者電腦重啟的時候 , 這些數據就會丟失 ,

我們可以將redis內存中的數據持久化保存到硬盤的文件中 , 當redis服務器重新啟動的時候 , 將數據重新加載進內存

redis持久化操作 , 并不能保證數據的安全性 , 只能保證大部分數據的安全 , 會造成數據的丟失

1.RDB : (默認方式 , 性能高 , 推薦)

  • 默認方式 , 不需要進行配置 , 默認使用就是這種機制
    • 在一定的間隔時間中 , 檢測key的變化情況 , 然后去持久化數據
    • 對性能影響較小 (推薦使用)
  • 持久化會將數據存放在根目錄下的一個以 rdb為后綴 的文件中
  • 重新啟動redis服務器 , 就會加載這個文件
配置 :

在redis的根目錄下 , 找到 redis.windows.conf文件 : 找到這三行 這是基本的配置屬性

  • - after 900 sec (15 min) if at least 1 key changed - 15分鐘內至少有1個key改變 , 就會持久化save 900 1- after 300 sec (5 min) if at least 10 keys changed - 5分鐘內至少有10個key改變 , 就會持久化save 300 10- after 60 sec if at least 10000 keys changed - 一分鐘內至少有10000個key改變 , 就會持久化save 60 10000

2.AOF : (需要設置 , 性能低 , 不推薦)

  • 日志記錄的方式 , 可以記錄每一條命令的操作 , 可以每一次命令操作后 , 來持久化數據
    • 每修改保存一條數據 , 就持久化一次
    • 對性能影響較大 (不推薦使用)
  • 持久化會將數據存放在根目錄下的一個以 appendonly.aof 為后綴 的文件中
配置 :

首先在 redis.windows.conf文件中找到

這里默認值是no , 也就是說 , 默認AOF是關閉的 , 如果想要使用 , 就要把這個值改為 yes

appendonly no (關閉AOF) --> appendonly yes (開啟AOF)

同時 : 還要設置下邊的三個屬性之一

# appendfsync always : 每一次操作都進行持久化 appendfsync everysec : 每隔一秒執行一次持久化 # appendfsync no : 不進行持久化

Java操作Redis : (Jedis工具)

jedis : 一款java操作redis數據庫的工具

1.使用步驟 :

1.下載相關的jar包

<!--jedis使用的包--> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.1.0</version></dependency> <!--連接池工具--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.11.1</version></dependency>

2.使用 :

//只有簡單的三步 @Test public void test1(){//1.獲取連接 (IP地址 , 端口號)Jedis jedis = new Jedis("localhost" , 6379);//2.操作jedis.set("username" , "sichen");//3.關閉連接jedis.close(); }

**注意 : **在使用的時候要打開redis的服務器 , 不然就會鏈接錯誤


2.Jedis操作各種redis中的數據結構

(1)字符串類型 (String)

  • set
  • get

(2)哈希類型 hash : map格式

  • hset

  • hget

  • hgetall

  • jedis.hset("key", "username" , "sichen"); jedis.hset("key","password" ,"acpl159357"); System.out.println(jedis.hgetAll("key")); //輸出{password=acpl159357, username=sichen} System.out.println(jedis.hgetAll("key").values()); //輸出[acpl159357, sichen] //--------------------------------------------------- //獲取hash的所有map中的數據 Map<String, String> key = jedis.hgetAll("key"); //keySet的方法獲取所有key的Set集合[password, username] Set<String> strings = key.keySet(); System.out.println(strings); for (String s : strings) {//獲取valueString s1 = key.get(s);System.out.println(s +":"+s1); } //輸出 : //password:acpl159357 //username:sichen

(3) 列表類型 list : linkedlist格式 支持重復元素

  • lpush / rpush 添加

  • lpop / rpop 刪除

  • lrange key start end

  • Jedis jedis = new Jedis(); jedis.del("username"); jedis.lpush("username", "a", "b", "c"); jedis.rpush("username", "a", "b", "c"); System.out.println(jedis.lrange("username", 0, -1)); //輸出 : [c, b, a, a, b, c] System.out.println(jedis.lpop("username")); //輸出 : c System.out.println(jedis.rpop("username")); //輸出 : c System.out.println(jedis.lrange("username", 0, -1)); //輸出 : [b, a, a, b] jedis.close();

(4) 集合類型 set : 不允許有重復元素

  • sadd

  • smembers : 獲取所有元素 :

  • Jedis jedis = new Jedis(); //set 存儲 jedis.sadd("mySet" , "java" , "php" ,"c++"); //set 獲取 Set<String> mySet = jedis.smembers("mySet"); System.out.println(mySet); jedis.close();

(5) 有序集合類型 : 不允許有重復元素 , 并且元素有順序

  • zadd

  • zrange

  • Jedis jedis = new Jedis(); jedis.zadd("username",30,"思塵"); jedis.zadd("username" , 20 , "塵"); System.out.println(jedis.zrange("username", 0, -1)); //輸出 : [塵, 思塵] 值越小越靠前 jedis.close();
  • 可以用來做排行榜

(6) setex() 方法存儲可以指定過期時間的key 和 value

jedis.setex("username" , 60 ,"sichen");
  • 可以用來存儲注冊時的驗證碼

Jedis連接池 : (JedisPool)

jedis連接池是官方就提供的 ,

JedisPool : 直接拿來用即可

使用 :

1.創建JedisPool連接池對象

2.調用方法 getResource() 方法來獲取Jedis連接

//0.創建一個配置對象 JedisPoolConfig config = new JedisPoolConfig(); //最大連接數 config.setMaxTotal(100); //最大空閑連接 config.setMaxIdle(10); //1.創建連接池對象 , 這里邊有很多參數 , 使用默認的即可 JedisPool jedisPool = new JedisPool(config , "127.0.0.1", 6379); //2.獲取連接 Jedis jedis = jedisPool.getResource(); //3.使用 jedis.set("sichen" , "愛你"); //4.關閉 (歸還到連接池中) jedis.close();

JedisPoolConfig詳細配置

#最大活動對象數 redis.pool.maxTotal=1000 #最大能夠保持idel狀態的對象數 redis.pool.maxIdle=100 #最小能夠保持idel狀態的對象數 redis.pool.minIdle=50 #當池內沒有返回對象時,最大等待時間 redis.pool.maxWaitMillis=10000 #當調用borrow Object方法時,是否進行有效性檢查 redis.pool.testOnBorrow=true #當調用return Object方法時,是否進行有效性檢查 redis.pool.testOnReturn=true #“空閑鏈接”檢測線程,檢測的周期,毫秒數。如果為負值,表示不運行“檢測線程”。默認為-1. redis.pool.timeBetweenEvictionRunsMillis=30000 #向調用者輸出“鏈接”對象時,是否檢測它的空閑超時; redis.pool.testWhileIdle=true # 對于“空閑鏈接”檢測線程而言,每次檢測的鏈接資源的個數。默認為3. redis.pool.numTestsPerEvictionRun=50 #redis服務器的IP redis.ip=xxxxxx #redis服務器的Port redis1.port=6379

工具類 : JedisPoolUtils

JedisPoolUtils.java

package cn.sichen.util;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;/*** JedisPool工具類* 加載配置文件 , 配置連接池的參數* 提供獲取連接的方法*/ public class JedisPoolUtils {//創建JedisPool連接池對象private static JedisPool jedisPool;static {//讀取配置文件InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");//創建一個properties對象Properties properties = new Properties();try {properties.load(is);} catch (IOException e) {e.printStackTrace();}//獲取數據 , 設置到JedisPoolConfig中JedisPoolConfig config = new JedisPoolConfig();//這里獲取的是一個字符串 , 但是需要的是一個int類型的數字config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));//初始化JedisPooljedisPool = new JedisPool(config , properties.getProperty("host") , Integer.parseInt(properties.getProperty("port")));}/*** 獲取連接的方法*/public static Jedis getJedis(){return jedisPool.getResource();}/*** 獲取連接池的方法 , 用來在監聽器中關閉這個連接池*/public static JedisPool getJedisPool(){return jedisPool;}}

案例 : Ajax請求加載數據 , 并緩存

注意 : 我們一般使用redis緩存 , 一些不經常發生變化的數據 ,

  • 數據庫一旦發生改變 , 則需要更新緩存
  • 數據庫的表執行 , 增刪改的相關操作 , 需要將redis緩存數據清除 , 再重新存入

1.提供一個index.jsp頁面 , 頁面有一個省份下拉列表

2.當頁面加載完成之后 , 發送ajax請求 , 加載所有省份

  • FindProvinceServlet.java
@WebServlet("/findProvinceServlet") public class FindProvinceServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.調用service查詢即可ProvinceService provinceService = new ProvinceServiceImpl();List<Province> provinces = provinceService.findAll();//2.序列化list為jsonObjectMapper mapper = new ObjectMapper();//3.響應結果response.setContentType("application/json;charset=UTF-8");mapper.writeValue(response.getWriter(), provinces);} }
  • index.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>index</title><script src="js/jquery-3.3.1.min.js"></script><script>$(function () {//發送ajax請求 , 加載所有省份的數據$.get("findProvinceServlet",{},function (data) {//1.獲取selectvar province = $("#province");//2.遍歷json數組$(data).each(function () {//3.創建<option> ,var option = "<option name='"+this.id+"'>"+this.name+"</option>>";//4.調用select的append追加option , 每遍歷一次就增加一個optionprovince.append(option);});},);});</script> </head> <body><select id="province"><option>---請選擇省份---</option></select> </body> </html>

使用redis緩存

在service層中判斷緩存中是否有數據

package cn.sichen.service.impl; import cn.sichen.dao.ProvinceDao; import cn.sichen.dao.impl.ProvinceDaoImpl; import cn.sichen.domain.Province; import cn.sichen.service.ProvinceService; import cn.sichen.util.JedisPoolUtils; import com.fasterxml.jackson.databind.ObjectMapper; import redis.clients.jedis.Jedis; import java.util.List; public class ProvinceServiceImpl implements ProvinceService {private ProvinceDao dao = new ProvinceDaoImpl();@Overridepublic List<Province> findAll() {return dao.findAll();}/** 使用redis緩存* */@Overridepublic String findAllJson() {//1.先從redis中查詢數據Jedis jedis = JedisPoolUtils.getJedis();String province_json = jedis.get("province");//2.判斷province_json數據是否為nullif (province_json == null || province_json.length() == 0) {System.out.println("沒有數據 , 將從數據庫中查詢...");try {//緩存中沒有數據//2.1從數據庫中查詢數據List<Province> list = dao.findAll();//2.2將list序列化為jsonObjectMapper mapper = new ObjectMapper();province_json = mapper.writeValueAsString(list);//2.3將json數據存入Redis中jedis.set("province", province_json);} catch (Exception e) {e.printStackTrace();}} else {System.out.println("有數據 , 將從Redis中查詢...");}return province_json;} }

然后在servlet中直接調用service查詢即可

//1.調用service查詢即可 ProvinceService service = new ProvinceServiceImpl(); String allJson = service.findAllJson();//3.響應結果 response.setContentType("application/json;charset=UTF-8"); response.getWriter().write(allJson); //2.1從數據庫中查詢數據List<Province> list = dao.findAll();//2.2將list序列化為jsonObjectMapper mapper = new ObjectMapper();province_json = mapper.writeValueAsString(list);//2.3將json數據存入Redis中jedis.set("province", province_json);} catch (Exception e) {e.printStackTrace();}} else {System.out.println("有數據 , 將從Redis中查詢...");}return province_json; }

}

然后在servlet中直接調用service查詢即可 ```java //1.調用service查詢即可 ProvinceService service = new ProvinceServiceImpl(); String allJson = service.findAllJson();//3.響應結果 response.setContentType("application/json;charset=UTF-8"); response.getWriter().write(allJson);

總結

以上是生活随笔為你收集整理的redis缓存数据库技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。