日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
利用Redis實(shí)現(xiàn)前臺(tái)數(shù)據(jù)獲?。?0字以內(nèi) (前臺(tái)獲取redis數(shù)據(jù)庫(kù))

利用Redis實(shí)現(xiàn)前臺(tái)數(shù)據(jù)獲取

Redis是一種快速、可擴(kuò)展、開(kāi)源、高性能的數(shù)據(jù)庫(kù)解決方案,它以鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù),并支持多種數(shù)據(jù)結(jié)構(gòu),如字符串、列表、、有序和哈希表等。在Web應(yīng)用程序中,Redis可被用于緩存和session存儲(chǔ),也可被用作隊(duì)列和發(fā)布/訂閱系統(tǒng)等。

在這篇文章中,我們將討論如何利用Redis實(shí)現(xiàn)前臺(tái)數(shù)據(jù)獲取。我們將介紹如何在PHP中使用Redis擴(kuò)展程序,以及如何將其集成到一個(gè)簡(jiǎn)單的Web應(yīng)用程序中,以便從Redis中檢索和顯示數(shù)據(jù)。

我們需要確保Redis服務(wù)器已經(jīng)在本地計(jì)算機(jī)上安裝并運(yùn)行。我們可以通過(guò)redis-cli程序來(lái)測(cè)試Redis服務(wù)器是否正常運(yùn)行。在終端中運(yùn)行以下命令:

“`

$ redis-cli ping

“`

如果Redis服務(wù)器正在運(yùn)行,則應(yīng)該看到以下輸出:

“`

PONG

“`

接下來(lái),我們需要在PHP中安裝Redis擴(kuò)展程序。我們可以通過(guò)PECL安裝器來(lái)安裝Redis擴(kuò)展,如下所示:

“`

$ sudo pecl install redis

“`

完成安裝后,我們需要在PHP配置文件中啟用Redis擴(kuò)展。在Ubuntu上,該文件通常位于/etc/php/7.x/cli/php.ini或/etc/php/7.x/apache2/php.ini中。我們需要在該文件中添加以下行:

“`

extension=redis.so

“`

保存并關(guān)閉該文件,然后重啟Web服務(wù)器和PHP FPM,以確保新配置生效。

接下來(lái),我們將創(chuàng)建一個(gè)簡(jiǎn)單的PHP腳本來(lái)演示如何利用Redis實(shí)現(xiàn)前臺(tái)數(shù)據(jù)獲取。在Web服務(wù)器上創(chuàng)建一個(gè)index.php文件,然后將以下代碼添加到該文件中:

“`

// 連接到Redis服務(wù)器

$redis = new Redis();

$redis->connect(‘localhost’, 6379);

// 設(shè)置一個(gè)鍵值對(duì)

$redis->set(‘name’, ‘Redis’);

// 獲取一個(gè)鍵的值

$name = $redis->get(‘name’);

// 輸出結(jié)果

echo ‘Welcome to ‘ . $name . ‘!’;

?>

“`

在以上代碼中,我們首先連接到Redis服務(wù)器,然后將一個(gè)鍵值對(duì)存儲(chǔ)在Redis中。我們?nèi)缓髲腞edis中檢索該鍵的值,并將其顯示在前端頁(yè)面上。這樣,我們就成功地利用Redis實(shí)現(xiàn)了前臺(tái)數(shù)據(jù)獲取。

在本文中,我們介紹了如何使用Redis擴(kuò)展程序和PHP,在Web應(yīng)用程序中利用Redis實(shí)現(xiàn)前臺(tái)數(shù)據(jù)獲取。我們首先安裝了Redis服務(wù)器和Redis擴(kuò)展,并在PHP配置文件中啟用了該擴(kuò)展。然后,我們創(chuàng)建了一個(gè)簡(jiǎn)單的PHP腳本來(lái)演示如何利用Redis存儲(chǔ)和檢索數(shù)據(jù),并將其顯示在前端頁(yè)面上。Redis的高性能和可擴(kuò)展性使其成為Web應(yīng)用程序的理想選擇,特別是對(duì)于需要在前臺(tái)快速檢索和顯示數(shù)據(jù)的應(yīng)用程序。

相關(guān)問(wèn)題拓展閱讀:

  • 如何獲取redis管理的session
  • 三分鐘讀懂redis數(shù)據(jù)庫(kù)

如何獲取redis管理的session

0.什么是Redis

Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API

1.與其他用戶狀態(tài)保存方案比較

一般開(kāi)發(fā)中用戶狀態(tài)使用session或者cookie,兩種方式各種孝巧利弊。

Session:在InProc模式下容易丟失,并且引起并發(fā)問(wèn)題。如果使用SQLServer或者SQLServer模式又消耗了性能

Cookie則容易將一些用戶信息暴露,加解密同樣也消耗了性能。

Redis采用這樣的方案巧納鍵解決了幾個(gè)問(wèn)題,

1.Redis存取速度快。

2.用戶數(shù)據(jù)不容易丟失。

3.用戶多的情況下容易支持集群。

4.能夠查看在線用戶。

5.能夠?qū)崿F(xiàn)用戶一處登錄。(通過(guò)代碼實(shí)現(xiàn),后續(xù)介紹)

6.支持持久化。(當(dāng)然可能沒(méi)什么用)

2.實(shí)現(xiàn)思路

1.我們知道session其實(shí)是在cookie中保存了一個(gè)sessionid,用戶每次訪問(wèn)都將sessionid發(fā)給服務(wù)器,服務(wù)器通過(guò)ID查找用戶對(duì)應(yīng)的狀態(tài)數(shù)據(jù)。

在這里我的處理方式也是在cookie中定義一個(gè)sessionid,程序需要取得用戶狀態(tài)時(shí)將sessionid做為key在Redis中查找。

2.同時(shí)session支持用戶在一定時(shí)間不訪問(wèn)將session回收。

借用Redis中Keys支持過(guò)期時(shí)間的特性支持這個(gè)功能,但是在續(xù)期方面需要程序自行攔截請(qǐng)求調(diào)用這個(gè)方法(demo有例子)

下面開(kāi)始代碼說(shuō)明

3.Redis調(diào)用接口

首先引用ServiceStack相關(guān)DLL。

在web.config添加配置,這個(gè)配置用來(lái)設(shè)置Redis調(diào)用茄中地址每臺(tái)服務(wù)用【,】隔開(kāi)。主機(jī)寫(xiě)在之一位

1

2

3

4

5

6

初始化配置

static Managers()

{

string sessionRedis= ConfigurationManager.AppSettings;

string timeOut = ConfigurationManager.AppSettings;

if (string.IsNullOrEmpty(sessionRedis))

{

throw new Exception(“web.config 缺少配置SessionRedis,每臺(tái)Redis之間用,分割.之一個(gè)必須為主機(jī)”);

}

if (string.IsNullOrEmpty(timeOut)==false)

{

TimeOut = Convert.ToInt32(timeOut);

}

var host = sessionRedis.Split(char.Parse(“,”));

var writeHost = new string { host };

var readHosts = host.Skip(1).ToArray();

ClientManagers = new PooledRedisClientManager(writeHost, readHosts, new RedisClientManagerConfig

{

MaxWritePoolSize = writeReadCount,//逗寫(xiě)地鏈接池鏈接數(shù)

MaxReadPoolSize = writeReadCount,//逗讀地鏈接池鏈接數(shù)

AutoStart = true

});

}

為了控制方便寫(xiě)了一個(gè)委托

///

/// 寫(xiě)入

///

///

///

///

public F TryRedisWrite(Func doWrite)

{

PooledRedisClientManager prcm = new Managers().GetClientManagers();

IRedisClient client = null;

try

{

using (client = prcm.GetClient())

{

return doWrite(client);

}

}

catch (RedisException)

{

throw new Exception(“Redis寫(xiě)入異常.Host:” + client.Host + “,Port:” + client.Port);

}

finally

{

if (client != null)

{

client.Dispose();

}

}

}

一個(gè)調(diào)用的例子其他的具體看源碼

///

/// 以Key/Value的形式存儲(chǔ)對(duì)象到緩存中

///

/// 對(duì)象類別

/// 要寫(xiě)入的

public void KSet(Dictionary value)

{

Func fun = (IRedisClient client) =>

{

client.SetAll(value);

return true;

};

TryRedisWrite(fun);

}

4.實(shí)現(xiàn)Session

按上面說(shuō)的給cookie寫(xiě)一個(gè)sessionid

///

/// 用戶狀態(tài)管理

///

public class Session

{

///

/// 初始化

///

///

public Session(HttpContextBase _context)

{

var context = _context;

var cookie = context.Request.Cookies.Get(SessionName);

if (cookie == null || string.IsNullOrEmpty(cookie.Value))

{

SessionId = NewGuid();

context.Response.Cookies.Add(new HttpCookie(SessionName, SessionId));

context.Request.Cookies.Add(new HttpCookie(SessionName, SessionId));

}

else

{

SessionId = cookie.Value;

}

}

}

去存取用戶的方法

///

/// 獲取當(dāng)前用戶信息

///

///

///

public object Get() where T:class,new()

{

return new RedisClient().KGet(SessionId);

}

///

/// 用戶是否在線

///

///

public bool IsLogin()

{

return new RedisClient().KIsExist(SessionId);

}

///

/// 登錄

///

///

///

public void Login(T obj) where T : class,new()

{

new RedisClient().KSet(SessionId, obj, new TimeSpan(0, Managers.TimeOut, 0));

}

6.續(xù)期

默認(rèn)用戶沒(méi)訪問(wèn)超過(guò)30分鐘注銷(xiāo)用戶的登錄狀態(tài),所以用戶每次訪問(wèn)都要將用戶的注銷(xiāo)時(shí)間推遲30分鐘

這需要調(diào)用Redis的續(xù)期方法

///

/// 延期

///

///

///

public void KSetEntryIn(string key, TimeSpan expiresTime)

{

Func fun = (IRedisClient client) =>

{

client.ExpireEntryIn(key, expiresTime);

return false;

};

TryRedisWrite(fun);

}

封裝以后

///

/// 續(xù)期

///

public void Postpone()

{

new RedisClient().KSetEntryIn(SessionId, new TimeSpan(0, Managers.TimeOut, 0));

}

這里我利用了MVC3中的ActionFilter,攔截用戶的所有請(qǐng)求

namespace Test

{

public class SessionFilterAttribute : ActionFilterAttribute

{

///

/// 每次請(qǐng)求都續(xù)期

///

///

public override void OnActionExecuting(ActionExecutingContext filterContext)

{

new Session(filterContext.HttpContext).Postpone();

}

}

}

在Global.asax中要注冊(cè)一下

public static void RegisterGlobalFilters(GlobalFilterCollection filters)

{

filters.Add(new SessionFilterAttribute());

}

protected void Application_Start()

{

RegisterGlobalFilters(GlobalFilters.Filters);

}

5.調(diào)用方式

為了方便調(diào)用借用4.0中的新特性,把Controller添加一個(gè)擴(kuò)展屬性

public static class ExtSessions

{public static Session SessionExt(this Controller controller)

{

return new Session(controller.HttpContext);

}

}

調(diào)用方法

public class HomeController : Controller

{

public ActionResult Index()

{

this.SessionExt().IsLogin();

return View();

}

三分鐘讀懂redis數(shù)據(jù)庫(kù)

redis是一個(gè)key-value存儲(chǔ)系統(tǒng)。和Memcached類似,它支持存儲(chǔ)的value類型相對(duì)更多,包括string(字符串)、list(鏈表)、set()、zset(sorted set –有序)和hash(哈希類型)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件,并且在此基礎(chǔ)上實(shí)氏物現(xiàn)了master-slave(主從)同步。

1. 使用Redis有哪些好處?

(1) 速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中,類似于HashMap,HashMap的優(yōu)勢(shì)就是查找和操作的時(shí)間復(fù)雜度都是O(1)

(2) 支持豐富數(shù)據(jù)類型,支持string,list,set,sorted set,hash

(3) 支持事務(wù),操作都是原子性,所謂的原子性就是對(duì)數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行

(4) 豐富的特性:可用于緩存,消息,按key設(shè)置過(guò)期時(shí)間,過(guò)期后將會(huì)自動(dòng)刪除

2. redis相比memcached有哪些優(yōu)勢(shì)?

(1) memcached所有的值均是簡(jiǎn)單的字符串,redis作為其替代者,支持更為豐富的數(shù)據(jù)類型

(2) redis的速度比memcached快很多

(3) redis可以持久化其數(shù)據(jù)

3. redis常見(jiàn)性能問(wèn)題和解決方案:

(1) Master更好不要做任何持久化工作,如RDB內(nèi)存快照和AOF日志文件

(2) 如果數(shù)據(jù)比較重要,某個(gè)Slave開(kāi)啟AOF備份數(shù)據(jù),策略設(shè)置為每秒同步一次

(3) 為了主從復(fù)制的速度和連接的穩(wěn)定性,Master和Slave更好在同一個(gè)局域網(wǎng)內(nèi)

(4) 盡量避免在壓力很大的主庫(kù)上增加從庫(kù)

(5) 主從復(fù)制不要用圖狀結(jié)構(gòu),用單向鏈表結(jié)構(gòu)更為穩(wěn)定,即:Master

這樣的結(jié)構(gòu)方便解決單點(diǎn)故障問(wèn)題,實(shí)現(xiàn)Slave對(duì)Master的殲升液替換。如果Master掛了,可以立刻啟用Slave1做Master,其他不變。

4. MySQL里有2023w數(shù)據(jù),redis中只存20w的數(shù)據(jù),如何保證redis中的數(shù)據(jù)都是熱點(diǎn)數(shù)據(jù)

相關(guān)知識(shí):redis 內(nèi)存數(shù)據(jù)集大小上升到一定大小的時(shí)候,就會(huì)施行數(shù)據(jù)淘汰策略。redis 提供 6種數(shù)據(jù)淘汰策略:

voltile-lru:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server.db.expires)中挑選最近最少使用的數(shù)據(jù)淘汰

volatile-ttl:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server.db.expires)中挑選將要笑搭過(guò)期的數(shù)據(jù)淘汰

volatile-random:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server.db.expires)中任意選擇數(shù)據(jù)淘汰

allkeys-lru:從數(shù)據(jù)集(server.db.dict)中挑選最近最少使用的數(shù)據(jù)淘汰

allkeys-random:從數(shù)據(jù)集(server.db.dict)中任意選擇數(shù)據(jù)淘汰

no-enviction(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù)

相關(guān)推薦:《Python視頻教程》

5. Memcache與Redis的區(qū)別都有哪些?

1)、存儲(chǔ)方式

Memecache把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會(huì)掛掉,數(shù)據(jù)不能超過(guò)內(nèi)存大小。

Redis有部份存在硬盤(pán)上,這樣能保證數(shù)據(jù)的持久性。

2)、數(shù)據(jù)支持類型

Memcache對(duì)數(shù)據(jù)類型支持相對(duì)簡(jiǎn)單。

Redis有復(fù)雜的數(shù)據(jù)類型。

3),value大小

redis更大可以達(dá)到1GB,而memcache只有1MB

6. Redis 常見(jiàn)的性能問(wèn)題都有哪些?如何解決?

1).Master寫(xiě)內(nèi)存快照,save命令調(diào)度rdbSave函數(shù),會(huì)阻塞主線程的工作,當(dāng)快照比較大時(shí)對(duì)性能影響是非常大的,會(huì)間斷性暫停服務(wù),所以Master更好不要寫(xiě)內(nèi)存快照。

2).Master AOF持久化,如果不重寫(xiě)AOF文件,這個(gè)持久化方式對(duì)性能的影響是最小的,但是AOF文件會(huì)不斷增大,AOF文件過(guò)大會(huì)影響Master重啟的恢復(fù)速度。Master更好不要做任何持久化工作,包括內(nèi)存快照和AOF日志文件,特別是不要啟用內(nèi)存快照做持久化,如果數(shù)據(jù)比較關(guān)鍵,某個(gè)Slave開(kāi)啟AOF備份數(shù)據(jù),策略為每秒同步一次。

3).Master調(diào)用BGREWRITEAOF重寫(xiě)AOF文件,AOF在重寫(xiě)的時(shí)候會(huì)占大量的CPU和內(nèi)存資源,導(dǎo)致服務(wù)load過(guò)高,出現(xiàn)短暫服務(wù)暫?,F(xiàn)象。

4). Redis主從復(fù)制的性能問(wèn)題,為了主從復(fù)制的速度和連接的穩(wěn)定性,Slave和Master更好在同一個(gè)局域網(wǎng)內(nèi)

7. redis 最適合的場(chǎng)景

Redis最適合所有數(shù)據(jù)in-momory的場(chǎng)景,雖然Redis也提供持久化功能,但實(shí)際更多的是一個(gè)disk-backed的功能,跟傳統(tǒng)意義上的持久化有比較大的差別,那么可能大家就會(huì)有疑問(wèn),似乎Redis更像一個(gè)加強(qiáng)版的Memcached,那么何時(shí)使用Memcached,何時(shí)使用Redis呢?

如果簡(jiǎn)單地比較Redis與Memcached的區(qū)別,大多數(shù)都會(huì)得到以下觀點(diǎn):

1.Redis不僅僅支持簡(jiǎn)單的k/v類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。

2.Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

3.Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤(pán)中,重啟的時(shí)候可以再次加載進(jìn)行使用。

(1)會(huì)話緩存(Session Cache)

最常用的一種使用Redis的情景是會(huì)話緩存(session cache)。用Redis緩存會(huì)話比其他存儲(chǔ)(如Memcached)的優(yōu)勢(shì)在于:Redis提供持久化。當(dāng)維護(hù)一個(gè)不是嚴(yán)格要求一致性的緩存時(shí),如果用戶的購(gòu)物車(chē)信息全部丟失,大部分人都會(huì)不高興的,現(xiàn)在,他們還會(huì)這樣嗎?

幸運(yùn)的是,隨著 Redis 這些年的改進(jìn),很容易找到怎么恰當(dāng)?shù)氖褂肦edis來(lái)緩存會(huì)話的文檔。甚至廣為人知的商業(yè)平臺(tái)Magento也提供Redis的插件。

(2)全頁(yè)緩存(FPC)

除基本的會(huì)話token之外,Redis還提供很簡(jiǎn)便的FPC平臺(tái)?;氐揭恢滦詥?wèn)題,即使重啟了Redis實(shí)例,因?yàn)橛写疟P(pán)的持久化,用戶也不會(huì)看到頁(yè)面加載速度的下降,這是一個(gè)極大改進(jìn),類似PHP本地FPC。

再次以Magento為例,Magento提供一個(gè)插件來(lái)使用Redis作為全頁(yè)緩存后端。

此外,對(duì)WordPress的用戶來(lái)說(shuō),Pantheon有一個(gè)非常好的插件  wp-redis,這個(gè)插件能幫助你以最快速度加載你曾瀏覽過(guò)的頁(yè)面。

(3)隊(duì)列

Reids在內(nèi)存存儲(chǔ)引擎領(lǐng)域的一大優(yōu)點(diǎn)是提供 list 和 set 操作,這使得Redis能作為一個(gè)很好的消息隊(duì)列平臺(tái)來(lái)使用。Redis作為隊(duì)列使用的操作,就類似于本地程序語(yǔ)言(如Python)對(duì) list 的 push/pop 操作。

如果你快速的在Google中搜索“Redis queues”,你馬上就能找到大量的開(kāi)源項(xiàng)目,這些項(xiàng)目的目的就是利用Redis創(chuàng)建非常好的后端工具,以滿足各種隊(duì)列需求。例如,Celery有一個(gè)后臺(tái)就是使用Redis作為broker,你可以從這里去查看。

(4)排行榜/計(jì)數(shù)器

Redis在內(nèi)存中對(duì)數(shù)字進(jìn)行遞增或遞減的操作實(shí)現(xiàn)的非常好。(Set)和有序(Sorted Set)也使得我們?cè)趫?zhí)行這些操作的時(shí)候變的非常簡(jiǎn)單,Redis只是正好提供了這兩種數(shù)據(jù)結(jié)構(gòu)。所以,我們要從排序中獲取到排名最靠前的10個(gè)用戶–我們稱之為“user_scores”,我們只需要像下面一樣執(zhí)行即可:

當(dāng)然,這是假定你是根據(jù)你用戶的分?jǐn)?shù)做遞增的排序。如果你想返回用戶及用戶的分?jǐn)?shù),你需要這樣執(zhí)行:

ZRANGE user_scores 0 10 WITHSCORES

Agora Games就是一個(gè)很好的例子,用Ruby實(shí)現(xiàn)的,它的排行榜就是使用Redis來(lái)存儲(chǔ)數(shù)據(jù)的,你可以在這里看到。

(5)發(fā)布/訂閱

前臺(tái)獲取redis數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于前臺(tái)獲取redis數(shù)據(jù)庫(kù),利用Redis實(shí)現(xiàn)前臺(tái)數(shù)據(jù)獲?。?0字以內(nèi),如何獲取redis管理的session,三分鐘讀懂redis數(shù)據(jù)庫(kù)的信息別忘了在本站進(jìn)行查找喔。

成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開(kāi)通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開(kāi)發(fā)老牌服務(wù)商!微信小程序開(kāi)發(fā),APP開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站營(yíng)銷(xiāo)推廣服務(wù)眾多企業(yè)。電話:028-86922220


分享名稱:利用Redis實(shí)現(xiàn)前臺(tái)數(shù)據(jù)獲取:30字以內(nèi) (前臺(tái)獲取redis數(shù)據(jù)庫(kù))
文章出自:http://m.5511xx.com/article/djsschh.html