91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解JavaEE 使用 Redis 數據庫進行內容緩存和高訪問負載

發布時間:2020-10-13 19:49:38 來源:腳本之家 閱讀:169 作者:郭朝 欄目:編程語言

NoSQL(Not Only SQL),泛指非關系型數據庫,是為了處理高并發讀寫、海量數據的高效率存儲和訪問、高擴展性和高可用性而產生的。

分類 相關產品 典型應用 數據模型 優點 缺點
鍵值對(Key-Value)存儲 Redis、Voldemort、Berkeley DB 內容緩存、處理高訪問負載 一系列鍵值對 快速查詢 存儲的數據缺少結構化
列存儲數據庫 Cassandra、HBase、Riak 分布式文件系統 以列簇式存儲,將同一列數據存在一起 查詢速度快,可擴展性強,更容易進行分布式擴展 功能相對局限
文檔型數據庫 MongoDB、CouchDB Web應用 一系列鍵值對 數據結構要求不嚴格 查詢性能不高,缺乏統一的查詢語法
圖形數據庫 Neo4j、InfoGrid 社交網絡,推薦系統,專注于構建關系圖譜 圖結構 利用圖結構相關算法 需要對整個圖做計算才能得出結果,不容易做分布式的集群方案

本篇將主要闡述如何使用 Redis(https://github.com/antirez/redis)數據庫進行內容緩存和高訪問負載,redis 使用 C 語言開發的一個開源的高性能的鍵值對數據庫,通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前 Redis 支持的鍵值數據類型有很多種,比如字符串類型、列表類型、有序集合類型、散列類型、集合類型。Redis 官方也給我們提供了一些測試數據,有 50 個并發程序來執行 10 萬次請求,Redis 讀的速度達到了 11 萬次/秒,寫的速度達到了 8.1 萬次/秒。

詳解JavaEE 使用 Redis 數據庫進行內容緩存和高訪問負載

Redis 最廣泛的應用場景就是使用它作為緩存(新聞或商品內容、聊天式的在線好友列表),除此還有任務隊列(秒殺、搶購)、網站訪問統計、數據過期處理(可以精確到毫秒)、應用排行榜、分布式集群架構中的 session 分離等。

1.Linux下安裝Redis數據庫

$ scp ~/Downloads/redis-4.0.1.tar.gz root@192.168.2.10:/usr/local //上傳安裝包
$ ssh root@192.168.2.10             //SSH連接

# yum -y install gcc gcc-c++ autoconf automake  //gcc、gcc-c++的庫文件
# cd /usr/local
# tar -zxvf redis-4.0.1.tar.gz          //解壓縮
# cd redis-4.0.1                 //切換到該目錄下
# make                      //編譯,將.c文件編譯為.o文件
# make PREFIX=/usr/local/redis install      //指定路徑安裝
# cd /usr/local
# ls                       //如果存在redis文件夾,則安裝成功

其中 /usr/local/redis/bin/ 下包含:

redis-benchmark         //性能測試的一個工具
redis-check-aof         //aof文件修復的一個工具 redis-check-aof --fix appendonlly.aof
redis-check-dump         //rdb文件檢查的一個工具,rdb文件為Redis默認數據庫文件
redis-check-rdb         //rdb文件修復的一個工具 redis-check-rdb --fix dump.rdb
redis-cli            //命令行的一個客戶端
redis-sentinel -> redis-server
redis-server           //redis服務器啟動的命令

接下來繼續我們的命令:

# cd redis-4.0.1
# cp redis.conf /usr/local/redis
# cd /usr/local/redis
# vim redis.conf         //編輯Redis的配置文件

具體配置步驟:

1)綁定你的授權ip地址:修改69行的 bind 127.0.0.1 為 bind [host](綁定到所有網絡: 注釋掉69行的 bind 127.0.0.1)

2)關閉保護模式:將88行的 protected-mode yes 修改為 daemonize no

3)配置后臺啟動:將136行的 daemonize no 修改為 daemonize yes

4)配置 Redis 持久化: RDB方式(默認支持,不需要配置)和AOF方式(將509行的appendonly no 修改為 appendonly yes,538-540為同步策略的設置,開啟 appendfsync always,注釋 appendfsync everysec,always為沒修改一次就同步,everysec為每一秒同步,no為不同步,為了安全此處選擇 always)。

編輯完成后退出 vim,之后還需要開放 Redis 的 6379 端口:

# vim /etc/sysconfig/iptables   //打開Linux防火墻的設置
//增加代碼 -A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT

//退出 vim,執行防火墻重啟命令
# service iptables restart
# ./bin/redis-server ./redis.conf //啟動redis服務器,可以通過 ps -ef | grep -i redis 查看啟動是否成功

還有一些其他 Redis 命令如下:

# ./bin/redis-cli shutdown    //停止redis服務器
# ./bin/redis-cli         //打開redis命令行客戶端

2.Redis的數據結構

需要知道的是,Redis 的 Key 設置不要過長也不要過短,要有統一的命名規范。先看一下 keys 的操作:

$ ssh root@192.168.2.10     //SSH連接
# /usr/local/redis/bin/redis-cli
> keys *             //顯示所有的key
> keys my?            //顯示以my開頭的所有key
> del my1 my2 my3        //刪除my1、my2、my3
> exists my1           //檢查是否存在,存在返回1,不存在返回0
> get my1            //獲取key的value值
> rename my1 my2         //重命名my1為my2
> expire my1 1000        //設置key過期時間,單位秒
> ttl my1            //剩余超時時間,沒有設置則返回-1
> type my1            //獲取key對應value的類型

1.存儲字符串 String

二進制是安全的,存入和獲取的數據相同;Value 最多可以容納的數據長度是 521 M。存儲 String 常用的命令:

> set name zhangsan       //賦值 set [key][value]
> get name            //取值 get [key]
> getset name lisi        //取值并賦值
> del name            //刪除 del [key]
> incr num            //數值遞增1,如果沒有就默認創建0并遞增1 incr [key]
> decr num            //數值遞減1,如果沒有就默認創建0并遞減1
> incrby num2 5         //數值遞增指定值,如果沒有就默認創建0 incrby [key][指定值]
> decrby num2 5         //數值遞減指定值,如果沒有就默認創建0 decrby [key][指定值]
> append num3 5         //插入指定內容,如果有則追加內容,如果沒有則新創建 append [key][插入值]

2.存儲哈希 Hash

存儲 Hash 可以看成是 String Key 和 String Value 的 Map 容器,適合存儲 值-對象 的信息,例如用戶名、密碼、年齡等等,每一個 Hash 可以存儲 4294967295 個鍵值對。存儲 Hash 常用的命令:

> hset myhash username tom    //賦值單個屬性 hset [key][Hash鍵值對]
> hmset myhash username tom2 rose age 20 //賦值多個屬性 hmset [key][Hash鍵值對1] rose [Hash鍵值對2]
> hget myhash username      //獲取單個屬性 hget [key][key2]
> hmget myhash username age   //獲取多個屬性 hget [key][key2][key3]
> hgetall myhash         //獲取全部值

> hdel myhash username age    //刪除多個屬性
> del myhash           //刪除整個集合
> hincrby myhash age 5      //增加屬性值
> hexists myhash username    //判斷某個屬性中的key是否存在,存在返回1,不存在返回0
> hlen myhash          //獲取屬性個數 hlen [key1]
> hkeys myhash          //獲取所有屬性名稱 hkeys [key1]

3.存儲字符串列表 List

在 Redis 中,List(ArrayList 使用數組方式,LinkedList 使用雙向鏈表方式)順序是按照插入順序排序的一個字符串鏈表,和數據結構中的普通鏈表是一樣的,可以在它的頭部和尾部添加新的元素,在插入的時候,如果該 key 不存在,那么 Redis 就會為這個鍵創建一個新的鏈表,相反,如果鏈表中所有元素都被移除了,那么該鍵也會被從數據庫中刪除。存儲 List 常用的命令:

> lpush mylist a b c     //從雙向鏈表的頭部開始添加,如果mylist不存在則創建 lpush [key][value1][value2]..
> lpushx mylist d       //從雙向鏈表的頭部開始添加,如果mylist不存在則不插入
> rpush mylist 1 2 3     //從雙向鏈表的尾部開始添加
> lrange mylist 0 5      //查看鏈表 lrange [key][開始位置][結束位置]

> lpop mylist         //彈出雙向鏈表的頭部元素,彈出后,雙向鏈表中就沒有這個元素了
> rpop mylist         //彈出雙向鏈表的尾部元素
> rpoplpush mylist1 mylist2  //將mylist1里面頭部元素彈出插入mylist2頭部
> llen mylist         //獲取元素個數 llen [key]

> lrem mylist 1 2       //從頭到尾刪除1個2 lrem [key][刪除的個數][刪除的元素]
> lrem mylist -1 2      //從尾到頭刪除1個2
> lrem mylist 0 2       //從尾到頭刪除所有2

> lset mylist 3 k       //第三個value值設置為k
> linsert mylist before b 11 //第一個b之前插入11
> linsert mylist after b 22  //第一個b之后插入22

rpoplpush 命令在消息發布系統中的使用場景:

詳解JavaEE 使用 Redis 數據庫進行內容緩存和高訪問負載

4.存儲字符串集合 Set

和 List 類型不同的是,Set 集合中不允許出現重復的元素,無序的,Set 可以包含的最大元素數量是 4294967295。存儲 Set 常用的命令:

> sadd myset a b c      //向Set中添加了三個值 sadd [key][Set集合值]
> srem myset a b       //刪除指定元素
> smembers myset       //查看Set中元素 smembers [key]
> sismember myset c      //判斷Set中是否存在c,存在返回1,不存在返回0

> sdiff myset myset2     //返回兩個Set集合的差集運算
> sdiffstore my my1 my2    //將兩個Set集合的差集存儲到另一個集合(my)中
> sinter myset myset2     //返回兩個Set集合的交集運算
> sunion myset myset2     //返回兩個Set集合的并集運算

> scard myset         //返回Set集合成員數量
> srandmember myset      //隨機返回Set中一個成員

5.存儲有序字符串集合 SortedSet

SortedSet 中的成員在集合中的位置是有序的。存儲 SortedSet 常用的命令:

> zadd mysort 65 aa 85 bb 95 cc //有序添加元素 zadd [key][姓名 分數][姓名 分數]...
> zscore mysort aa       //獲得分數
> zcard mysort         //返回集合成員數量
> zrem mysort tom cc      //刪除元素

> zrange mysort 0 -1      //范圍查詢,-1表示最后,顯示姓名
> zrange mysort 0 -1 withscores //范圍查詢,姓名分數都會顯示
> zrevrange mysort 0 -1 withscores //范圍查詢,由大到小排序顯示

> zremrangebyrank mysort 0 2  //按照排序的范圍進行刪除,0~2位置
> zremrangebyscore mysort 70 90 //按照分數進行刪除,70~90

> zrangebyscore mysort 0 90   //按照分數查0~90之間的
> zrangebyscore mysort 0 90 withscores limit 0 2 //按照分數查0~90之間的,由大到小排序,只顯示前2個
> zcount mysort 60 100     //獲取60~100之間的個數

SortedSet 可以應用于游戲的積分排行榜、構建索引數據。

3.Redis的多數據庫和事務

一個 Redis 實例最多可以提供16個數據庫(0-15),默認連接第 0 號數據庫,也可以通過select 選擇數據庫:

> select 1           //選擇1號數據庫
> move myset 2         //移動myset到2號數據庫

支持事務(所有命令都將串行化執行)的操作:

> multi     //開啟事務
> exec     //提交事務
> discard    //回滾事務

4.使用Jedis操作Redis數據庫

Jedis(https://github.com/xetorthio/jedis)是 Redis 官方首選的 Java 客戶端開發包,

需要添加 Maven 依賴:

<!-- jedis -->
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.9.0</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>

普通方式操作 Redis:

Jedis jedis = null;
try {
  jedis = new Jedis("123.57.73.52",6379);
  jedis.set("name", "zhangsan");           //保存數據
  String value = jedis.get("name");         //獲取數據
  System.out.println(value);
} catch (Exception e) {
  e.printStackTrace();
} finally {
  jedis.close();                   //釋放資源
}

使用 Jedis 連接池操作 Redis:

//獲得連接池的配置對象
JedisPoolConfig config = new JedisPoolConfig();
//設置最大連接數, 默認8個
config.setMaxTotal(8);
//設置最大空閑連接數, 默認8個
config.setMaxIdle(8);
//獲得連接池
JedisPool jedisPool = new JedisPool(config, "123.57.73.52",6379);

//獲得核心對象
Jedis jedis = null;
try {
  jedis = jedisPool.getResource();
  jedis.set("name2", "lisi");            //保存數據
  String value = jedis.get("name2");        //獲取數據
  System.out.println(value);
} catch (Exception e) {
  e.printStackTrace();
} finally {
  jedis.close();                  //釋放資源
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克拉玛依市| 湄潭县| 禹城市| 固原市| 隆安县| 台北市| 伊宁县| 西昌市| 饶平县| 泰安市| 太保市| 三原县| 厦门市| 商洛市| 玉林市| 景泰县| 博湖县| 磴口县| 五指山市| 安乡县| 黔西| 沙田区| 红桥区| 湘潭市| 秭归县| 洱源县| 山阳县| 罗城| 酒泉市| 镇巴县| 临沭县| 丹东市| 衢州市| 肃宁县| SHOW| 隆德县| 白银市| 赫章县| 庆安县| 民勤县| 棋牌|