文档管理中心
我的
您当前正在浏览新版开发者文档中心,目录分类和层级有所调整。点击左侧当前文档分类名称前的“☰”图标,可切换文档分类。 了解新版目录

Session间缓存共享

从6.0.0(20)开始,支持Session间缓存共享。

Session之间数据是隔离的,当业务场景需要实现跨Session访问缓存数据时,可通过以下两种标准方式达成目标:

  • 引用相同的HTTP响应缓存实例,不同Session能直接访问同一缓存池中的数据;

  • 配置相同的缓存存储路径,使各个Session基于同一存储位置读写缓存,以此实现缓存数据的跨Session共享与交互。

约束与限制

Session间缓存共享能力支持Phone、2in1、Tablet、Wearable、TV设备。

引用相同HTTP响应缓存实例

创建一个ResponseCache实例,将其配置到不同Session中,可以在Session间共享缓存数据。

  1. 导入模块。

    收起
    自动换行
    深色代码主题
    复制
    1. import { rcp } from '@kit.RemoteCommunicationKit';
  2. 创建ResponseCache实例。其中,pathToFolder即缓存记录文件路径,'/path/dir'请根据实际情况替换为想要存储HTTP缓存的沙箱路径。

    收起
    自动换行
    深色代码主题
    复制
    1. // 创建ResponseCache实例
    2. const responseCache = new rcp.ResponseCache({
    3. persistent: {
    4. kind: 'file-system',
    5. pathToFolder: '/data/storage/el2/base/entry/temp/SomeInstance' // 请根据自身业务选择合适的路径
    6. }
    7. });
  3. 创建SessionA和SessionB。配置responseCache实例到SessionA和SessionB中。

    收起
    自动换行
    深色代码主题
    复制
    1. const sessionA: rcp.Session = rcp.createSession({
    2. requestConfiguration: {
    3. cache: responseCache,
    4. }
    5. });
    6. const sessionB: rcp.Session = rcp.createSession({
    7. requestConfiguration: {
    8. cache: responseCache,
    9. }
    10. });
  4. 由SessionA发起第一次请求。'https://www.example.com'请根据实际情况替换为支持HTTP缓存协议的URL。本次请求将会从网络服务器获取数据,此时可查看缓存状态信息,此时缓存条数应当为1。

    收起
    自动换行
    深色代码主题
    复制
    1. // 请求的网址是示例网址,请根据实际需求更改
    2. const responseA = await sessionA.get('https://www.example.com');
    3. console.info(`Request succeeded, message is ${JSON.stringify(responseA)}`);
    4. let cacheState = await responseCache.getState();
    5. console.info(`The current number of cache entries is: ${cacheState.count}`);
  5. 由SessionB发起第二次请求。'https://www.example.com'请根据实际情况替换为支持HTTP缓存协议的URL。本次请求将会直接从缓存中获取响应,此时可查看缓存状态信息,此时缓存命中数应当为1。

    收起
    自动换行
    深色代码主题
    复制
    1. // 请求的网址是示例网址,请根据实际需求更改
    2. const responseB = await sessionB.get('https://www.example.com');
    3. console.info(`Request succeeded, message is ${JSON.stringify(responseB)}`);
    4. cacheState = await responseCache.getState();
    5. console.info(`The current cache hit count is: ${cacheState.hitCount}`);

配置相同缓存存储路径

创建不同的ResponseCache实例,但对应缓存存储路径相同,将ResponseCache实例配置到不同Session中,可以在Session间共享缓存数据。

  1. 导入模块。

    收起
    自动换行
    深色代码主题
    复制
    1. import { rcp } from '@kit.RemoteCommunicationKit';
  2. 创建ResponseCacheA和ResponseCacheB实例,两者对应缓存存储路径相同。其中,pathToFolder即HTTP缓存响应记录文件路径,'/path/dir'请根据实际情况替换为想要存储HTTP缓存的沙箱路径。

    收起
    自动换行
    深色代码主题
    复制
    1. // 创建ResponseCache实例
    2. const responseCacheA = new rcp.ResponseCache({
    3. persistent: {
    4. kind: 'file-system',
    5. pathToFolder: '/data/storage/el2/base/entry/temp/SomeCache' // 请根据自身业务选择合适的路径
    6. },
    7. });
    8. const responseCacheB = new rcp.ResponseCache({
    9. persistent: {
    10. kind: 'file-system',
    11. pathToFolder: '/data/storage/el2/base/entry/temp/SomeCache' // 请根据自身业务选择合适的路径
    12. },
    13. });
  3. 创建SessionA和SessionB。配置responseCacheA实例到SessionA,配置responseCacheB实例到SessionB中。

    收起
    自动换行
    深色代码主题
    复制
    1. const sessionA: rcp.Session = rcp.createSession({
    2. requestConfiguration: {
    3. cache: responseCacheA,
    4. }
    5. });
    6. const sessionB: rcp.Session = rcp.createSession({
    7. requestConfiguration: {
    8. cache: responseCacheB,
    9. }
    10. });
  4. 由SessionA发起第一次请求。'https://www.example.com'请根据实际情况替换为支持HTTP缓存协议的URL。本次请求将会从网络服务器获取数据,此时可查看responseCacheA的缓存状态信息,此时缓存条数应当为1。

    收起
    自动换行
    深色代码主题
    复制
    1. // 请求的网址是示例网址,请根据实际需求更改
    2. const responseA = await sessionA.get('https://www.example.com');
    3. console.info(`Request succeeded, message is ${JSON.stringify(responseA)}`);
    4. let cacheState = await responseCacheA.getState();
    5. console.info(`The current number of cache entries is: ${cacheState.count}`);
  5. 由SessionB发起第二次请求。'https://www.example.com'请根据实际情况替换为支持HTTP缓存协议的URL。本次请求将会直接从缓存中获取响应,此时可查看responseCacheB的缓存状态信息,此时缓存条数和缓存命中数均应当为1。

    收起
    自动换行
    深色代码主题
    复制
    1. // 请求的网址是示例网址,请根据实际需求更改
    2. const responseB = await sessionB.get('https://www.example.com');
    3. console.info(`Request succeeded, message is ${JSON.stringify(responseB)}`);
    4. cacheState = await responseCacheB.getState();
    5. console.info(`The current number of cache entries is: ${cacheState.count}`);
    6. console.info(`The current cache hit count is: ${cacheState.hitCount}`);