最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解JavaEE 使用 Redis 數(shù)據(jù)庫(kù)進(jìn)行內(nèi)容緩存和高訪(fǎng)問(wèn)負(fù)載

 更新時(shí)間:2017年08月26日 14:32:41   作者:郭朝  
本篇文章主要介紹了JavaEE 使用 Redis 數(shù)據(jù)庫(kù)進(jìn)行內(nèi)容緩存和高訪(fǎng)問(wèn)負(fù)載,具有一定的參考價(jià)值,有興趣的可以了解一下

NoSQL(Not Only SQL),泛指非關(guān)系型數(shù)據(jù)庫(kù),是為了處理高并發(fā)讀寫(xiě)、海量數(shù)據(jù)的高效率存儲(chǔ)和訪(fǎng)問(wèn)、高擴(kuò)展性和高可用性而產(chǎn)生的。

分類(lèi) 相關(guān)產(chǎn)品 典型應(yīng)用 數(shù)據(jù)模型 優(yōu)點(diǎn) 缺點(diǎn)
鍵值對(duì)(Key-Value)存儲(chǔ) Redis、Voldemort、Berkeley DB 內(nèi)容緩存、處理高訪(fǎng)問(wèn)負(fù)載 一系列鍵值對(duì) 快速查詢(xún) 存儲(chǔ)的數(shù)據(jù)缺少結(jié)構(gòu)化
列存儲(chǔ)數(shù)據(jù)庫(kù) Cassandra、HBase、Riak 分布式文件系統(tǒng) 以列簇式存儲(chǔ),將同一列數(shù)據(jù)存在一起 查詢(xún)速度快,可擴(kuò)展性強(qiáng),更容易進(jìn)行分布式擴(kuò)展 功能相對(duì)局限
文檔型數(shù)據(jù)庫(kù) MongoDB、CouchDB Web應(yīng)用 一系列鍵值對(duì) 數(shù)據(jù)結(jié)構(gòu)要求不嚴(yán)格 查詢(xún)性能不高,缺乏統(tǒng)一的查詢(xún)語(yǔ)法
圖形數(shù)據(jù)庫(kù) Neo4j、InfoGrid 社交網(wǎng)絡(luò),推薦系統(tǒng),專(zhuān)注于構(gòu)建關(guān)系圖譜 圖結(jié)構(gòu) 利用圖結(jié)構(gòu)相關(guān)算法 需要對(duì)整個(gè)圖做計(jì)算才能得出結(jié)果,不容易做分布式的集群方案

本篇將主要闡述如何使用 Redis(https://github.com/antirez/redis)數(shù)據(jù)庫(kù)進(jìn)行內(nèi)容緩存和高訪(fǎng)問(wèn)負(fù)載,redis 使用 C 語(yǔ)言開(kāi)發(fā)的一個(gè)開(kāi)源的高性能的鍵值對(duì)數(shù)據(jù)庫(kù),通過(guò)提供多種鍵值數(shù)據(jù)類(lèi)型來(lái)適應(yīng)不同場(chǎng)景下的存儲(chǔ)需求,目前 Redis 支持的鍵值數(shù)據(jù)類(lèi)型有很多種,比如字符串類(lèi)型、列表類(lèi)型、有序集合類(lèi)型、散列類(lèi)型、集合類(lèi)型。Redis 官方也給我們提供了一些測(cè)試數(shù)據(jù),有 50 個(gè)并發(fā)程序來(lái)執(zhí)行 10 萬(wàn)次請(qǐng)求,Redis 讀的速度達(dá)到了 11 萬(wàn)次/秒,寫(xiě)的速度達(dá)到了 8.1 萬(wàn)次/秒。

Redis

Redis 最廣泛的應(yīng)用場(chǎng)景就是使用它作為緩存(新聞或商品內(nèi)容、聊天式的在線(xiàn)好友列表),除此還有任務(wù)隊(duì)列(秒殺、搶購(gòu))、網(wǎng)站訪(fǎng)問(wèn)統(tǒng)計(jì)、數(shù)據(jù)過(guò)期處理(可以精確到毫秒)、應(yīng)用排行榜、分布式集群架構(gòu)中的 session 分離等。

1.Linux下安裝Redis數(shù)據(jù)庫(kù)

$ 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++的庫(kù)文件
# 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         //性能測(cè)試的一個(gè)工具
redis-check-aof         //aof文件修復(fù)的一個(gè)工具 redis-check-aof --fix appendonlly.aof
redis-check-dump         //rdb文件檢查的一個(gè)工具,rdb文件為Redis默認(rèn)數(shù)據(jù)庫(kù)文件
redis-check-rdb         //rdb文件修復(fù)的一個(gè)工具 redis-check-rdb --fix dump.rdb
redis-cli            //命令行的一個(gè)客戶(hù)端
redis-sentinel -> redis-server
redis-server           //redis服務(wù)器啟動(dòng)的命令

接下來(lái)繼續(xù)我們的命令:

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

具體配置步驟:

1)綁定你的授權(quán)ip地址:修改69行的 bind 127.0.0.1 為 bind [host](綁定到所有網(wǎng)絡(luò): 注釋掉69行的 bind 127.0.0.1)

2)關(guān)閉保護(hù)模式:將88行的 protected-mode yes 修改為 daemonize no

3)配置后臺(tái)啟動(dòng):將136行的 daemonize no 修改為 daemonize yes

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

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

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

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

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

# ./bin/redis-cli shutdown    //停止redis服務(wù)器
# ./bin/redis-cli         //打開(kāi)redis命令行客戶(hù)端

2.Redis的數(shù)據(jù)結(jié)構(gòu)

需要知道的是,Redis 的 Key 設(shè)置不要過(guò)長(zhǎng)也不要過(guò)短,要有統(tǒng)一的命名規(guī)范。先看一下 keys 的操作:

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

1.存儲(chǔ)字符串 String

二進(jìn)制是安全的,存入和獲取的數(shù)據(jù)相同;Value 最多可以容納的數(shù)據(jù)長(zhǎng)度是 521 M。存儲(chǔ) String 常用的命令:

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

2.存儲(chǔ)哈希 Hash

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

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

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

3.存儲(chǔ)字符串列表 List

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

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

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

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

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

rpoplpush 命令在消息發(fā)布系統(tǒng)中的使用場(chǎng)景:

rpoplpush命令使用場(chǎng)景

4.存儲(chǔ)字符串集合 Set

和 List 類(lèi)型不同的是,Set 集合中不允許出現(xiàn)重復(fù)的元素,無(wú)序的,Set 可以包含的最大元素?cái)?shù)量是 4294967295。存儲(chǔ) Set 常用的命令:

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

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

> scard myset         //返回Set集合成員數(shù)量
> srandmember myset      //隨機(jī)返回Set中一個(gè)成員

5.存儲(chǔ)有序字符串集合 SortedSet

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

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

> zrange mysort 0 -1      //范圍查詢(xún),-1表示最后,顯示姓名
> zrange mysort 0 -1 withscores //范圍查詢(xún),姓名分?jǐn)?shù)都會(huì)顯示
> zrevrange mysort 0 -1 withscores //范圍查詢(xún),由大到小排序顯示

> zremrangebyrank mysort 0 2  //按照排序的范圍進(jìn)行刪除,0~2位置
> zremrangebyscore mysort 70 90 //按照分?jǐn)?shù)進(jìn)行刪除,70~90

> zrangebyscore mysort 0 90   //按照分?jǐn)?shù)查0~90之間的
> zrangebyscore mysort 0 90 withscores limit 0 2 //按照分?jǐn)?shù)查0~90之間的,由大到小排序,只顯示前2個(gè)
> zcount mysort 60 100     //獲取60~100之間的個(gè)數(shù)

SortedSet 可以應(yīng)用于游戲的積分排行榜、構(gòu)建索引數(shù)據(jù)。

3.Redis的多數(shù)據(jù)庫(kù)和事務(wù)

一個(gè) Redis 實(shí)例最多可以提供16個(gè)數(shù)據(jù)庫(kù)(0-15),默認(rèn)連接第 0 號(hào)數(shù)據(jù)庫(kù),也可以通過(guò)select 選擇數(shù)據(jù)庫(kù):

> select 1           //選擇1號(hào)數(shù)據(jù)庫(kù)
> move myset 2         //移動(dòng)myset到2號(hào)數(shù)據(jù)庫(kù)

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

> multi     //開(kāi)啟事務(wù)
> exec     //提交事務(wù)
> discard    //回滾事務(wù)

4.使用Jedis操作Redis數(shù)據(jù)庫(kù)

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

需要添加 Maven 依賴(lài):

<!-- 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");           //保存數(shù)據(jù)
  String value = jedis.get("name");         //獲取數(shù)據(jù)
  System.out.println(value);
} catch (Exception e) {
  e.printStackTrace();
} finally {
  jedis.close();                   //釋放資源
}

使用 Jedis 連接池操作 Redis:

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot Mybatis批量插入Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)

    SpringBoot Mybatis批量插入Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)

    這篇文章主要介紹了SpringBoot Mybatis批量插入Oracle數(shù)據(jù)庫(kù)數(shù)據(jù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • SpringBoot集成Seata的全過(guò)程

    SpringBoot集成Seata的全過(guò)程

    本文介紹了事務(wù)的四大特性(原子性、一致性、隔離性、持久性)以及本地事務(wù)和分布式事務(wù)的概念,本地事務(wù)是指在單個(gè)數(shù)據(jù)庫(kù)級(jí)別的事務(wù)管理,而分布式事務(wù)則是跨多個(gè)數(shù)據(jù)庫(kù)或服務(wù)的事務(wù)管理,感興趣的朋友一起看看吧
    2024-11-11
  • MyBatis-Flex BaseMapper的接口基本用法小結(jié)

    MyBatis-Flex BaseMapper的接口基本用法小結(jié)

    本文主要介紹了MyBatis-Flex BaseMapper的接口基本用法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 避免多個(gè)jar通過(guò)maven打包導(dǎo)致同名配置文件覆蓋沖突問(wèn)題

    避免多個(gè)jar通過(guò)maven打包導(dǎo)致同名配置文件覆蓋沖突問(wèn)題

    這篇文章主要介紹了避免多個(gè)jar通過(guò)maven打包導(dǎo)致同名配置文件覆蓋沖突問(wèn)題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • mybatis in查詢(xún)條件過(guò)長(zhǎng)的解決方案

    mybatis in查詢(xún)條件過(guò)長(zhǎng)的解決方案

    這篇文章主要介紹了mybatis in查詢(xún)條件過(guò)長(zhǎng)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 教你如何用Java簡(jiǎn)單爬取WebMagic

    教你如何用Java簡(jiǎn)單爬取WebMagic

    今天給大家?guī)?lái)的是關(guān)于Java爬蟲(chóng)的相關(guān)知識(shí),文章圍繞著Java如何爬取WebMagic展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • JDK源碼Enum類(lèi)原理及代碼實(shí)例解析

    JDK源碼Enum類(lèi)原理及代碼實(shí)例解析

    這篇文章主要介紹了JDK源碼Enum類(lèi)原理及代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java 創(chuàng)建并應(yīng)用PPT幻燈片母版的方法示例

    Java 創(chuàng)建并應(yīng)用PPT幻燈片母版的方法示例

    幻燈片母版可供用戶(hù)設(shè)置幻燈片的樣式,本文將介紹如何用Java創(chuàng)建并應(yīng)用單個(gè)或多個(gè)幻燈片母版。感興趣可以了解一下
    2020-06-06
  • 基于ClasspathResource路徑問(wèn)題的解決

    基于ClasspathResource路徑問(wèn)題的解決

    這篇文章主要介紹了ClasspathResource路徑問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java微信server錄音下載到自己server

    java微信server錄音下載到自己server

    這篇文章主要為大家詳細(xì)介紹了java微信server錄音下載到自己server的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評(píng)論

岑溪市| 泾川县| 兴业县| 集安市| 星子县| 徐闻县| 山阴县| 台南市| 高密市| 甘南县| 岳西县| 观塘区| 深圳市| 介休市| 蓝山县| 石柱| 万州区| 九江市| 东莞市| 佛教| 临武县| 五寨县| 巫山县| 方正县| 远安县| 永平县| 伊宁市| 枞阳县| 昌图县| 同心县| 五家渠市| 临西县| 永嘉县| 浦县| 本溪市| 金寨县| 苏州市| 潞城市| 永胜县| 密山市| 博爱县|