使用FlexiGrid实现Extjs表格效果方法分享


Posted in Javascript onDecember 16, 2014

近一段时间Extjs真的是风光无限好,只要是个做CRM/HRM之类的企业现在都在琢磨怎么在项目中用它,不过兄弟我可是不敢,原因很简单:太大/太笨/源码不好调试。但是对于Extjs漂亮的表格与功能的强大,实在是让我垂涎三尺,记得以前有个老外同志写过一个类似的Extjs的Jquery插件,所以就在Jquery的插件海洋中一顿海找,呵呵,还真让我找到了。看来还是我的Jquery好,小巧简单好像一部好的汽车引擎,我想要什么就可以自已DIY,真是方便。总体方案在网络传输上不超过80KB,速度比500KB大小的Extjs不知道要小上多少哪。。。

使用FlexiGrid实现Extjs表格效果方法分享

使用FlexiGrid实现Extjs表格效果方法分享

下载地址:http://code.google.com/p/flexigrid/

不过由于FlexiGrid在互联网上的大部分资料都是用PHP或者java写的,所以兄弟简单的对它进行了改制,也做了一个山寨版的Extjs表格实现,希望对大家有帮助。

基本使用:

使用FlexiGrid实现Extjs表格效果方法分享

1 基本使用是非常简单的,只需要加入Jquery库与FlexiGrid的JS即可以对表格进行格式化与美化.

<link rel="stylesheet" type="text/css" href="css/flexigrid/flexigrid.css">

<script type="text/javascript" src="lib/jquery/jquery-1.2.6.min.js"></script>

<script type="text/javascript" src="flexigrid.pack.js"></script>

<%--<script type="text/javascript" src="lib/jquery/jquery-1.2.6-vsdoc-cn.js"></script>--%>

<script type="text/javascript">

    $("document").ready(function() {

    $('#flexme1').flexigrid();

    $('#flexme2').flexigrid();

    });

</script>

2 加入需要格式化的表格即可

<h1>

     最简单的flexigrid表格-1</h1>

 <table id="flexme1">

     <thead>

         <tr>

             <th width="100">

                 Col 1

             </th>

             <th width="100">

                 Col 2

             </th>

             <th width="100">

                 Col 3 is a long header name

             </th>

             <th width="300">

                 Col 4

             </th>

         </tr>

     </thead>

     <tbody>

         <tr>

             <td>

                 This is data 1 with overflowing content

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

     </tbody>

 </table>

 <p>

 </p>

 <h1>

     最简单的flexigrid表格-2</h1>

 <table id="flexme2">

     <thead>

         <tr>

             <th width="100">

                 Col 1

             </th>

             <th width="100">

                 Col 2

             </th>

             <th width="100">

                 Col 3 is a long header name

             </th>

             <th width="300">

                 Col 4

             </th>

         </tr>

     </thead>

     <tbody>

         <tr>

             <td>

                 This is data 1 with overflowing content

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

     </tbody>

 </table>

为了增加FlexiGrid的基本使用效果,我们可以通过参数对其进行基本的调整

自定义表头

使用FlexiGrid实现Extjs表格效果方法分享

具体代码实现:

<script type="text/javascript">

     $("document").ready(function() {

         $('#flexme1').flexigrid({

             colModel: [

             { display: 'ISO', name: 'iso', width: 40, sortable: true, align: 'center' },

             { display: 'Name', name: 'name', width: 180, sortable: true, align: 'left' },

             { display: 'Printable Name', name: 'printable_name', width: 120, sortable: true, align: 'left' },

             { display: 'ISO3', name: 'iso3', width: 130, sortable: true, align: 'left', hide: true },

             { display: 'Number Code', name: 'numcode', width: 80, sortable: true, align: 'right' }

             ]

         });

         $('#flexme2').flexigrid({

             colModel: [

             { display: 'ISO', name: 'iso', width: 40, sortable: true, align: 'center' },

             { display: 'Name', name: 'name', width: 180, sortable: true, align: 'left' },

             { display: 'Printable Name', name: 'printable_name', width: 120, sortable: true, align: 'left' },

             { display: 'ISO3', name: 'iso3', width: 130, sortable: true, align: 'left', hide: true },

             { display: 'Number Code', name: 'numcode', width: 80, sortable: true, align: 'right' }

             ],

             sortname: "iso",

             sortorder: "asc",

         });

     });

 </script>

自定义折叠,自定义排序的实现

使用FlexiGrid实现Extjs表格效果方法分享

<script type="text/javascript">

     $("document").ready(function() {

         $('#flexme1').flexigrid({

             colModel: [

             { display: 'ISO', name: 'iso', width: 40, sortable: true, align: 'center' },

             { display: 'Name', name: 'name', width: 180, sortable: true, align: 'left' },

             { display: 'Printable Name', name: 'printable_name', width: 120, sortable: true, align: 'left' },

             { display: 'ISO3', name: 'iso3', width: 130, sortable: true, align: 'left', hide: true },

             { display: 'Number Code', name: 'numcode', width: 80, sortable: true, align: 'right' }

             ], width: 700, height: 300, usepager: true, showTableToggleBtn: true, title: "点我折叠"

         });

         $('#flexme2').flexigrid({

             colModel: [

             { display: 'ISO', name: 'iso', width: 40, sortable: true, align: 'center' },

             { display: 'Name', name: 'name', width: 180, sortable: true, align: 'left' },

             { display: 'Printable Name', name: 'printable_name', width: 120, sortable: true, align: 'left' },

             { display: 'ISO3', name: 'iso3', width: 130, sortable: true, align: 'left', hide: true },

             { display: 'Number Code', name: 'numcode', width: 80, sortable: true, align: 'right' }

             ],

             searchitems: [

             { display: 'ISO', name: 'iso' },

             { display: 'Name', name: 'name', isdefault: true }

             ],

             sortname: "iso",

             sortorder: "asc",

             title: "我的测试效果",

             width: 700,

             height: 300,

             usepager: true, showTableToggleBtn: true, rp: 10

  

         });

     });

 </script>

高级使用:

使用FlexiGrid实现Extjs表格效果方法分享

1 分页用到的存储过程

Create PROCEDURE [dbo].[spAll_ReturnRows]

        (

            @SQL nVARCHAR(4000),

            @Page int,

            @RecsPerPage int,

            @ID VARCHAR(255),

            @Sort VARCHAR(255)

        )

        AS

        DECLARE @Str nVARCHAR(4000)

        SET @Str='SELECT   TOP '+

            CAST(@RecsPerPage AS VARCHAR(20))+

            ' * FROM ('+@SQL+') T WHERE T.'+

            @ID+

            ' NOT IN (SELECT   TOP '+

            CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))+

            ' '+

            @ID+

            ' FROM ('

            +@SQL+

            ') T9 ORDER BY '+

            @Sort+

            ') ORDER BY '+

            @Sort

        PRINT @Str

        EXEC sp_ExecuteSql @Str

2 异步JSON数据传输实现

 using System;

 using System.Collections.Generic;

 using System.Configuration;

 using System.Data;

 using System.Data.SqlClient;

 using System.Linq;

 using System.Text;

 using System.Web;

 using System.Web.Services;

 using Newtonsoft.Json;

 namespace GridDemo

 {

     /// <summary>

     /// $codebehindclassname$ 的摘要说明

     /// </summary>

     [WebService(Namespace = "http://tempuri.org/")]

     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

     public class GetDataSource4 : IHttpHandler

     {

         public void ProcessRequest(HttpContext context)

         {

             context.Response.ContentType = "text/plain";

             //得到当前页

             string CurrentPage = context.Request["page"];

             //得到每页显示多少

             string PageShowLimit = context.Request["rp"];

             //得到主键

             string TableID = context.Request["sortname"];

             //得到排序方法

             string OrderMethod = context.Request["sortorder"];

             //得到要过滤的字段

             string FilterField = context.Request["qtype"];

             //得到要过滤的内容

             string FilterFieldContext;

             if (context.Request.Form["letter_pressed"] == null)

             {

                 FilterFieldContext = "";

             }

             else

             {

                 FilterFieldContext = context.Request["letter_pressed"];

             }

             //得到表的总行数

             string TableRowCount = SqlHelper.ExecuteScalar(ConfigurationManager.AppSettings["SQL2"],

                                     CommandType.Text,

                                     "select count(*) from Person.Address"

                                    ).ToString();

             //得到主SQL

             SqlParameter SQL = new SqlParameter("@SQL", SqlDbType.NVarChar);

             //SQL.Value = "SELECT  * FROM Person.Address";

             if (FilterFieldContext.Length == 0 || FilterField.Length == 0)

             {

                 SQL.Value = "SELECT  AddressID,AddressLine1,AddressLine2,PostalCode,City FROM Person.Address";

             }

             else

             {

                 string[] tmp = FilterField.Split(',');

                 SQL.Value = "SELECT  AddressID,AddressLine1,AddressLine2,PostalCode,City FROM Person.Address where " + tmp[0] + " like '" + FilterFieldContext + "%'";

             }

             SqlParameter Page = new SqlParameter("@Page", SqlDbType.Int);

             Page.Value = Convert.ToInt32(CurrentPage);

             SqlParameter RecsPerPage = new SqlParameter("@RecsPerPage", SqlDbType.Int);

             RecsPerPage.Value = Convert.ToInt32(PageShowLimit);

             SqlParameter ID = new SqlParameter("@ID", SqlDbType.VarChar);

             ID.Value = TableID;

             SqlParameter Sort = new SqlParameter("@Sort", SqlDbType.VarChar);

             Sort.Value = TableID;

             //得到表

             DataTable returnTable = SqlHelper.ExecuteDataset(ConfigurationManager.AppSettings["SQL2"],

                         CommandType.StoredProcedure, "spAll_ReturnRows",

                         new SqlParameter[]

                             {

                                 SQL,Page,RecsPerPage,ID,Sort

                             }).Tables[0];

             context.Response.Write(DtToSON2(returnTable, CurrentPage, TableRowCount));

         }

         /// <summary>

         /// JSON格式转换

         /// </summary>

         /// <param name="dt">DataTable表</param>

         /// <param name="page">当前页</param>

         /// <param name="total">总计多少行</param>

         /// <returns></returns>

         public static string DtToSON2(DataTable dt, string page, string total)

         {

             StringBuilder jsonString = new StringBuilder();

             jsonString.AppendLine("{");

             jsonString.AppendFormat("page: {0},\n", page);

             jsonString.AppendFormat("total: {0},\n", total);

             jsonString.AppendLine("rows: [");

             for (int i = 0; i < dt.Rows.Count; i++)

             {

                 jsonString.Append("{");

                 jsonString.AppendFormat("id:'{0}',cell:[", dt.Rows[i][0].ToString());

                 for (int j = 0; j < dt.Columns.Count; j++)

                 {

                     if (j == dt.Columns.Count - 1)

                     {

                         jsonString.AppendFormat("'{0}'", dt.Rows[i][j].ToString());

                     }

                     else

                     {

                         jsonString.AppendFormat("'{0}',", dt.Rows[i][j].ToString());

                     }

                     if (j == dt.Columns.Count - 1)

                     {

                         jsonString.AppendFormat(",'{0}'", "<input type=\"button\" value=\"查看\" id=\"sss\" onclick=\"sss(" + dt.Rows[i][0].ToString() + ")\" />");

                     }

                 }

                 jsonString.Append("]");

                 if (i == dt.Rows.Count - 1)

                 {

                     jsonString.AppendLine("}");

                 }

                 else

                 {

                     jsonString.AppendLine("},");

                 }

             }

             jsonString.Append("]");

             jsonString.AppendLine("}");

             return jsonString.ToString();

         }

         public bool IsReusable

         {

             get

             {

                 return false;

             }

         }

     }

 }

3 页面实现

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Complex-8.aspx.cs" Inherits="GridDemo.Complex_8" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 <html xmlns="http://www.w3.org/1999/xhtml">

 <head runat="server">

     <title></title>

     <link rel="stylesheet" type="text/css" href="/css/flexigrid/flexigrid.css" />

     <script type="text/javascript" src="/lib/jquery/jquery.js"></script>

     <script type="text/javascript" src="flexigrid.js"></script>

     <link type="text/css" rel="Stylesheet" href="facebox/facebox.css" />

     <link type="text/css" rel="Stylesheet" href="body.css" />

     <script type="text/javascript" src="facebox/facebox.js"></script>

     <script type="text/javascript">

         $("document").ready(function() {

             $("#flex1").flexigrid

             ({

                 url: 'GetDataSource4.ashx',

                 dataType: 'json',

                 colModel: [

                 { display: '地址ID', name: 'AddressID', width: 40, sortable: true, align: 'center' },

                 { display: '具体地址1', name: 'AddressLine1', width: 140, sortable: true, align: 'left' },

                 { display: '具体地址2', name: 'AddressLine2', width: 80, sortable: true, align: 'left' },

                 { display: '邮编', name: 'PostalCode', width: 80, sortable: true, align: 'left' },

                 { display: '城市', name: 'City', width: 80, sortable: true, align: 'left' },

                 { display: '操作', name: 'Opt', width: 80, sortable: true, align: 'left' }

                 ],

                 buttons: [

                 { name: 'A', onpress: sortAlpha },

                 { name: 'B', onpress: sortAlpha },

                 { name: 'C', onpress: sortAlpha },

                 { name: 'D', onpress: sortAlpha },

                 { name: 'E', onpress: sortAlpha },

                 { name: 'F', onpress: sortAlpha },

                 { name: 'G', onpress: sortAlpha },

                 { name: 'H', onpress: sortAlpha },

                 { name: 'I', onpress: sortAlpha },

                 { name: 'J', onpress: sortAlpha },

                 { name: 'K', onpress: sortAlpha },

                 { name: 'L', onpress: sortAlpha },

                 { name: 'M', onpress: sortAlpha },

                 { name: 'N', onpress: sortAlpha },

                 { name: 'O', onpress: sortAlpha },

                 { name: 'P', onpress: sortAlpha },

                 { name: 'Q', onpress: sortAlpha },

                 { name: 'R', onpress: sortAlpha },

                 { name: 'S', onpress: sortAlpha },

                 { name: 'T', onpress: sortAlpha },

                 { name: 'U', onpress: sortAlpha },

                 { name: 'V', onpress: sortAlpha },

                 { name: 'W', onpress: sortAlpha },

                 { name: 'X', onpress: sortAlpha },

                 { name: 'Y', onpress: sortAlpha },

                 { name: 'Z', onpress: sortAlpha },

                 { name: '%', onpress: sortAlpha }

                 ],

                 searchitems: [

                  { display: '城市', name: 'City' , isdefault: true},

                  { display: '邮编', name: 'PostalCode' }

                  ],

                 usepager: true,

                 title: '客户信息',

                 useRp: true,

                 rp: 10,

                 showTableToggleBtn: true,

                 width: 700,

                 height: 200,

                 rpOptions: [10, 15, 20, 25, 40, 60], //可选择设定的每页结果数

                 procmsg: '请等待数据正在加载中 …', //正在处理的提示信息

                 resizable: false, //是否可伸缩

                 sortname: "AddressID",

                 //sortorder: "asc",//此列由于存储过程原因无法用

             });

         });

         function sortAlpha(com) {

             jQuery('#flex1').flexOptions({ newp: 1, params: [{ name: 'letter_pressed', value: com }, { name: 'qtype', value: $('select[name=qtype]').val()}] });

             jQuery("#flex1").flexReload();

         }

         function sss(data)

         {

            var temp=eval(data);

 //           jQuery.facebox(temp);

            jQuery.facebox({ ajax: 'Default.aspx?id='+temp })

         }

     </script>

 </head>

 <body>

     <table>

     </table>

 </body>

 </html>
Javascript 相关文章推荐
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
Jan 25 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 Javascript
Jquery事件的连接使用示例
Jun 18 Javascript
JS中类或对象的定义说明
Mar 10 Javascript
javascript监听鼠标滚轮事件浅析
Jun 05 Javascript
详解JavaScript中的forEach()方法的使用
Jun 08 Javascript
jQuery实现动态添加tr到table的方法
Dec 26 Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
Vue多组件仓库开发与发布详解
Feb 28 Javascript
vue ajax 拦截原理与实现方法示例
Nov 29 Javascript
vue+ESLint 配置保存 自动格式化代码
Mar 17 Javascript
原理深度解析Vue的响应式更新比React快
Apr 04 Javascript
jQuery+css实现百度百科的页面导航效果
Dec 16 #Javascript
jQuery+PHP打造滑动开关效果
Dec 16 #Javascript
javascript进行四舍五入方法汇总
Dec 16 #Javascript
javascript 判断整数方法分享
Dec 16 #Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
Dec 16 #Javascript
jquery队列函数用法实例
Dec 16 #Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 #Javascript
You might like
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
Node.js log4js日志管理详解
2018/07/31 Javascript
vue实现计算器功能
2020/02/22 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
简单介绍Python中的round()方法
2015/05/15 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
Python中Qslider控件实操详解
2021/02/20 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
医学生实习自我鉴定
2013/09/27 职场文书
餐厅总经理岗位职责
2013/12/31 职场文书
节能环保标语
2014/06/12 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
配置nginx负载均衡
2022/05/06 Servers