python库--tensorflow
| 方法 | 返回值类型 | 参数 | 说明 |
| 张量 | |||
| .constant() |
Tensort 张量 实例t |
value | 创建一个常量tensor |
| dtype=None | 输出类型 | ||
| shape=None | 返回tensor的形状 | ||
| name='Const' | 张量名 | ||
| verify_shape=False | 是否保留输入数据的形状且不能被更改. True若shape与输入形状不一致则报错 | ||
| t.device | str | 表示tensor将被产生的设备名称 | |
| t.dtype | 元素类型 | ||
| t.graph | 此tensor被哪个图所有 | ||
| t.name | 张量名 | ||
| t.op | 产生这个tensor作为输出的操作 | ||
| t.shape | TensorShape | tensor的形状 | |
| t.value_index | 表示这个tensor在其操作结果中的索引 | ||
| t.consumers() | list | 返回消耗这个tensor的操作列表 | |
| t.eval() | ndarray | feed_dict=None | 用于placeholder赋初始值{placeholder_object: value} |
| session=None | 用来计算此tensor的session | ||
| t.get_shape() | TensorShape | tensor的形状 | |
| t.set_shape() | None | shape | 更新tensor的形状, verify_shape=False |
| .zeros() | Tensor | (shape, dtype=tf.float32, name=None) 按shape生成一个全0 tensor | |
| .zeros_like() | Tensor | (tensor, dtype=None, name=None) 按tensor的shape创建一个新全0 tensor | |
| .ones() .ones_like() | Tensor | 参考上面两个, 创建全1 tensor | |
| .fill() | Tensor | (dims, value, name=None) 值全为value, 形状为dims的tensor | |
| .linspace() | 1DTensor | 创建包含num个元素, 且步长固定的tensor | |
| start | 起始值(包含) | ||
| stop | 结束值(包含) | ||
| num | 步长 = (stop - start) / (num-1) | ||
| name=None | 张量名 | ||
| .range() | 1DTensor | (start, limit, delta=1, name='range') 创建范围为[start, limit)步长为delta的tensor | |
|
.placeholder() 占位符(feed_dictation) run的时候才赋初始值 |
Tensor | dtype | 数据类型, 必须制定, 推荐float32(或1) |
| shape=None | 指定返回张量的形状, None表示任意形状, 某一维为None则表示次维不做限制 | ||
| name=None | 张量名 | ||
|
.nn.embedding_ lookup() |
Tensor | params | 多维数据, |
| ids | 多维数据, 值为params的索引, 返回params的对应值 | ||
| partition_strategy='mod' | |||
| name=None | 张量名 | ||
| validate_indices=True | |||
| max_norm=None | |||
|
.layers.dense() 全连接层 |
Tensor | ||
| inputs | 二维tensor | ||
| units | 输出空间的维度(该层神经单元节点数) | ||
| activation及其以后参数同tf.layers.conv1d | |||
| 变量 | |||
| .Variable() |
Variable 变量 实例v |
initial_value | Tensor or Tensor_like. 变量的初始化值. 必须指定shape, 除非validate_shape=False |
| trainable=True | 是否将该变量添加到图形集合`GraphKeys.TRAINABLE_VARIABLES` | ||
| collections=None | 图表集合键的列表。新的变量被添加到这些集合中。默认为`[GraphKeys.GLOBAL_VARIABLES]` | ||
| validate_shape=True | 是否允许变量初始化为未知形状的值 | ||
| caching_device=None | 描述设备的字符串, 表示哪个设备用来读取缓存. 默认是device | ||
| name=None | 变量名 | ||
| variable_def=None | |||
| dtype=None | 指定数据类型 | ||
| expected_shape=None | TensorShape类型. 要是设置了, 那么初始的值会是这种形状 | ||
| import_scope=None | |||
| v.device | 设备名称 | ||
| v.dtype | 数据类型 | ||
| v.graph | 存放变量的图 | ||
| v.initial_value | Tensor | 变量的初始值 | |
| v.initializer | 变量的初始化器 | ||
| v.name | 变量名 | ||
| v.op | 产生这个variable作为输出的操作 | ||
| v.assign() | Variable | value | 为变量指定一个新值(形状相同) |
| use_locking=False | |||
| v.assign_add() | Variable | delta, use_locking | 为这个变量加上一个值(形状相同) |
| v.assign_sub() | Variable | delta, use_locking | 为这个变量减去一个值(形状相同) |
| v.count_up_to() | Variable | limit | 上限值. 当Op运行时, 它试图将变量+1, 如果增加变量使其超过限制, 将会引发异常 |
| v.eval() | session=None | 在一个session里计算并返回变量值 | |
| v.get_shape() | 返回变量的形状 | ||
| v.initialized_value() | Tensor | 返回已经初始化变量的值 | |
| v.load() | Variable | value | 新的变量值. 把新值载入到变量里 |
| session=None | 用来估算这个变量的Session | ||
| v.read_value() | Tensor | 返回这个变量的值 | |
| v.scatter_sub() | sparse_delta | ||
| use_locking=False | |||
| v.set_shape() | Variable | shape | 改变变量形状 |
| .get_variable() | Variable | name | 新的或现有变量名(可用于变量复用) |
| shape=None | 新变量或现有变量的形状 | ||
| dtype=None | 新变量或现有变量的类型 | ||
| initializer=None | 变量的初始值设定项 | ||
| regularizer=None | |||
| trainable=True | 是否将变量添加到图形集合 | ||
| collections=None | 图形集合键列表 | ||
| caching_device=None | |||
| partitioner=None | |||
| validate_shape=True | 是否允许变量初始化为未知形状的值 | ||
| use_resource=None | |||
| custom_getter=None | |||
| 将value赋给ref来更新ref | |||
| .assign() | Variable | ref | Veriable |
| value | 跟ref同类型的Tensor | ||
| validate_shape=None | True: value需和ref形状相同(默认) | ||
| False: ref将对value的形状进行引用 | |||
| use_locking=None | |||
| name=None | 操作的名称 | ||
| .global_variables() | 返回全局变量 | ||
| .local_variables() | 返回局部变量 | ||
| .variables_ initializer() | var_list | 待初始化变量列表 | |
| name='init' | 操作的名称 | ||
| .global_variables_ initializer() | Op | (替换tf.initialize_all_variables()的新方法)返回一个初始化所有全局变量的操作. 类似variables_initializers(global_variables()) | |
| .local_variables_ initializer() | Op | 返回一个初始化所有局部变量的操作 | |
| Graph(图) | |||
| .get_default_graph() | 返回默认图 | ||
| .Graph() | 实例g | 创建一个图 | |
| g.building_function | |||
| g.finalized | 若此图被终止了则返回True | ||
| g.graph_def_versions | |||
| g.seed | 此图的图层随机种子 | ||
| g.version | |||
| g.add_to_collection() | |||
| name | |||
| value | |||
| g.as_default() | with...: | 将此图设为默认, 其包含的张量将在此图中 | |
| g.device() | matmul_on_gpu | 参见tf.device | |
| g.finalize() | 结束这个Graph, 使得它只读 | ||
| g.get_all_collection_ key() | list | 返回Graph中的collection列表 | |
| g.get_operation_ by_name() | name | 根据操作名返回操作 | |
| g.get_operations() | list | 返回图中操作列表 | |
| g.get_tensor_by_ name() | Tensor | name | 根据张量名返回tensor |
| g.is_feedable() | bool | tensor | 判断tensor能否被feed |
| g.is_fetchable() | bool | tensor_or_op | 判断tensor或op能否被取到 |
| g.name_scope() | 参考tf.name_scope() | ||
| Session | |||
| .InteractiveSession() | 实例s | 创建一个新的session并设为默认 | |
| target='' | 连接执行引擎, 默认in-process | ||
| graph=None | 要计算的graph | ||
| config=None | |||
| .Session() | 实例s | 创建一个新的session, 包含了操作对象执行的环境 | |
| target='' | 连接执行引擎, 默认in-process | ||
| graph=None | 要计算的graph | ||
| config=None | |||
| s.graph | "投放"到session中的图 | ||
| s.graph_def | 图的描述 | ||
| s.sess_str | |||
| s.run() | 运行操作计算tensor | ||
| fetches | 图中的一个元素, 或元素列表. 或一个字典, 返回也将是字典, key不变, 值变为运算后的值 | ||
| feed_dict=None | 用于placeholder赋初始值 | ||
| options=None | |||
| run_metadata=None | |||
| s.close() | 关闭这个session | ||
| s.as_default() | with...: | 将此对象设为默认的session | |
| 优化器Optimizer(tf.train) | |||
| .Optimizer() | 优化器类的基类(基本不用) | ||
| .GradientDescent Optimizer() | Op | 创建一个梯度下降算法的优化器 | |
| learning_rate | 要是用的学习率 | ||
| use_locking=False | |||
| name='GradientDescent' | 操作的名称 | ||
| Op.compute_ gradients() | |||
| loss | 待减小的值 | ||
| var_list=None | 默认GraphKey.TRAINABLE_VARIABLES | ||
| gate_gradients= GATE_OP | |||
| aggregation_method=N | |||
| colocate_gradients_with_ ops=False | |||
| grad_loss=None | |||
| .AdadeltaOptimizer | 实现了Adadelta算法的优化器, 可以算是Adagrad算法的改进版 | ||
| learning_rate=0.001 | 学习率 | ||
| rho=0.95 | 衰减率 | ||
| epsilon=1e-08 | |||
| use_locking=False | |||
| name='Adadelta' | 操作的名称 | ||
| .AdagradOptimizer | 实现了Adagrad算法的优化器 | ||
| learning_rate | 学习率 | ||
| initial_accumulator_ value=0.1 | |||
| use_locking=False | |||
| name='Adagrad' | 操作的名称 | ||
| .Momentum Optimizer() | |||
| .AdamOptimizer() | |||
| 数学函数(Math)点击跳转到官方API(有墙) | |||
| .argmax() | Tensor | 返回指定维度最大值的位置 | |
| input | Tensor | ||
| axis=None | 默认维度0 | ||
| name=None | 操作名称 | ||
| output_type=tf.int64 | tf.int32或tf.int64 | ||
| .argmin() | Tensor | 同.argmax但作用相反 | |
| .matmul() | Tensor | 计算矩阵的积 | |
| a,b | 需要计算的两个矩阵 | ||
| transpose_a=False | 是否将a计算前进行转置 | ||
| transpose_b=False | 是否将b计算前进行转置 | ||
| adjoint_a=False | 是否将a计算前进行共轭转置 | ||
| adjoint_b=False | 是否将b计算前进行共轭转置 | ||
| a_is_sparse=Fasle | a是否是稀疏矩阵 | ||
| b_is_sparse=Fasle | b是否是稀疏矩阵 | ||
| 随机值 | |||
| .random_normal() | Tensor | 返回一个指定形状,被随机正态分布值填充的tensor | |
| shape | 指定返回张量的形状 | ||
| mean=0.0 | 正态分布的均值 | ||
| stddev=1.0 | 正态分布的标准差 | ||
| dtype=tf.float32 | 输出类型: float32, float64, int32或int64 | ||
| seed=None | 随机数种子 | ||
| name=None | 张量名 | ||
| .truncated_normal() | Tensor | 返回一个指定形状,被截断正态分布(truncated normal distribution)值填充的tensor(参数同上) | |
| .random_unifrom() |
Tensor |
服从均值分布的随机数, 区间为[minval, maxval) | |
| shape | 指定返回张量的形状 | ||
| minval=0 | 随机值范围的下界(默认[0, 1)) | ||
| maxval=None | 随机值范围的上界(int则必须指定此值) | ||
| dtype, seed, name | 同上 | ||
| .random_shuffle() | Tensor | 在第一个维度随机打乱顺序(可在随机梯度下降的时候用) | |
| value | 待打乱的tensor | ||
| seed, name | 同上 | ||
| 形状相关操作 | |||
| .shape() | Tensor | 返回输入Tensor的形状 | |
| input | 输入的Tensor | ||
| name=None | 操作的名称 | ||
| out_type=tf.int32 | 输出数据的数据类型 | ||
| .shape_n() | |||
| .size() | 返回输入Tensor的元素数量(参数同tf.shape) | ||
| .rank() | (input, name=None)返回tensor的维度数 | ||
| .reshape() | Tensor | 改变一个tensor的形状 | |
| tensor | 输入tensor | ||
| shape | tensor形状(某个分量可以是-1, 将将自动计算此值) | ||
| name=None | 操作的名称 | ||
| .squeeze() | |||
| .expand_dims() | |||
|
.reduce_max() 参考np.max |
Tensor | input_tensor | 传入一个tensor或可转换为tensor的数据 |
| axis=None(原reduction_indices) | 选择操作的维度, 默认操作全部数据 | ||
| keep_dims=False | 是否保留原维度, 否则计算后维度降低 | ||
| name=None | 张量名 | ||
| .reduce_* | Tensor | 参考.reduce_max参数 | 参考np.* |
| 基本神经网络组件 | |||
| 激活函数(输入输出维度一致) | |||
| .nn.relu() | Tensor | 计算修正线性单元 | |
| features | tensor | ||
| name=None | 操作的名称 | ||
| .nn.relu6() | |||
| .nn.crelu() | |||
| .nn.elu() | |||
| .nn.softsign() | |||
| .nn.dropout() | Tensor | 随机丢弃一部分神经元 (有助于防止过度拟合) | |
| inputs | Tensor | ||
| rate=0.5 | 丢包率 | ||
| noise_shape=None | |||
| seed=None | 随机种子 | ||
| training=False | |||
| name=None | 操作名称 | ||
| .nn.bias_add() | |||
| .sigmoid() | |||
| .tanh() | |||
| 分类 | |||
| .nn.sigmoid_cross_ entropy_with_logits() | |||
| .nn.softmax() | Tensor | softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), dim) | |
| logits | Tensor | ||
| dim=-1 | 运算的维度, 默认最后一个维度 | ||
| name=None | 操作名称 | ||
| .nn.log_softmax() | Tensor | logsoftmax = logits - log(reduce_sum(exp(logits), dim)) | |
| 参数同.nn.softmax() | |||
| .nn.softmax_cross_ entropy_with_logits() | Tensor | 计算交叉熵(禁止使用位置参数)(损失函数, 越小模型越优) | |
| labels=None | 有效概率分布 | ||
| logits=None | 估计概率分布 | ||
| dim=-1 | 维度, 默认最后一个维度 | ||
| name=None | 操作名称 | ||
| .nn.sparse_softmax_ cross_entropy_with_ logits() | |||
| .nn.weighted_cross_ entropy_with_logits() | |||
| 各种卷积网络 | |||
| 基本卷积操作 | |||
|
.layers.conv1d() |
Tensor | inputs | 张量输入 |
| filters | 整数, 输出空间的维数(即, 卷积核的数量) | ||
| kernel_size | 一个整数或一个整数的元组/列表, 指定1D卷积窗的长度 | ||
| strides=1 | 一个整数或一个整数的元组/列表, 指定卷积的步幅长度 | ||
| padding='valid' | 'valid'或'same'不区分大小写 | ||
| data_format= 'channels_last' | |||
| dilation_rate=1 | |||
| activation=None | 激活函数, 默认线性激活 | ||
| ues_bias=True | 是否使用偏置 | ||
| kernel_initializer=None | 卷积核初始化 | ||
| bias_initializer= tf.zeros_initializer() | 偏置初始化, 默认初始化为0 | ||
| kernel_regularizer=None | 卷积核化的正则化 | ||
| bias_regularizer=None | 偏置项的正则化 | ||
| activity_regularizer=None | 输出的正则化函数 | ||
| kernel_constraint=None | |||
| bias_constraint=None | |||
| trainable=True | 该层的参数是否参与训练, True则变量加入到图集合中 | ||
| name=None | 该层的名称 | ||
| reuse=None | 是否重复使用参数 | ||
|
.layers.conv2d() |
Tensor | 二维卷积 | |
| 参数同.layers.conv1d, 只列出不同 | |||
| kernel_size | 一个整数或2个整数的元组/列表, 指定2D卷积窗口的高度和宽度. 一个整数表示高=宽 | ||
| strides | 一个整数或2个整数的元组/列表, 指定沿高度和宽度的步幅长度 | ||
| dilation_rate | |||
| .nn.conv2d() | Tensor | 二维卷积 | |
| input | 输入 | ||
| filter | [滤波器高,滤波器宽,深度(同输入),滤波器个数(输出的深度 )] | ||
| strides | 滑动步长, 一般为[1, x_strides, y_strides, 1] | ||
| padding | 'SAME'会有0填充, 使步长为1时保持输入输出尺寸不变, 而'VALID'则采取丢弃 | ||
| use_cudnn_on_gpu=N | |||
| data_format=None | 指明输入数据和输出数据的格式. 'NHWC': 数据存储格式为[batch, in_height, in_width, in_channels]; 'NCHW': 数据存储格式为[batch, in_channels, in_height, in_width] | ||
| name=None | 操作的名称 | ||
| .nn.atrous_conv2d() | Tensor | 空洞卷积(没有stride参数, 因为被固定为了1) | |
| value | 4DTensor, 需要'NHWC'格式 | ||
| filters | [滤波器高,滤波器宽,深度(同输入),滤波器个数(输出的深度 )] | ||
| rate | 插入(rate-1)数量的'0' | ||
| padding | 'VALID'或'SAME'. 'VALID'返回:[batch, height-2*(filter_width-1), width-2*(filter_height-1), out_channels]的Tensor; 'SAME'返回:[batch, height, width, out_channels]的Tensore | ||
| name=None | 操作的名称 | ||
| 池化操作(Pooling) | |||
| .nn.avg_pool() | Tensor | 平均 | |
| value | [batch, height, width, channels] |
||
| ksize | 滤波器形状, 一般二维图像为[1,高,宽,1] |
||
| strides | 步长, 一般为[1, x_strides, y_strides, 1] | ||
| padding | 'VALID'或'SAME' | ||
| date_format='NHWC' | 'NHWC'或'NCHW' | ||
| name=None | 操作名 | ||
| .nn.max_pool() | |||
| .nn.max_pool_with_ argmax() | |||
| .nn.avg_pool3d() | |||
| .nn.max_pool3d() | |||
| .nn.fractional_avg_ pool() | |||
| .nn.fractional_max_ pool() | |||
| .nn.pool() | |||
| .device() | with...: | '/cpu:0' | 指定运算设备为CPU, 即使多个CPU也不区分. |
| '/gpu:n' | 多个GPU的名称是不同的, 第一个为'/gpu:0' | ||
| .name_scope() | with...: | name | 在其下使用Variable, 变量名(V_n)前会被加上'name/...'且相同V_n会自动添加后缀加以区分, 使用get_variable, V_n不会变化, 且出现相同V_n会报错 |
| default_name=None | 如果`name`参数是`None`,则使用默认名称 | ||
| values=None | |||
| .variable_scope() | with...as sc: |
name_or_scope | Variable以及get_variable变量名(V_n)前面都会被加上'name/...'但只有Variable的V_n会自动加后缀区分, 而在get_variable重复V_n前面加上sc.reuse_variables()可实现变量复用(指向同一变量)不加则报错 |
| default_name=None | 如果`name_or_scope`参数是`None`,则使用默认名称 | ||
| values=None | |||
| initializer=None | 此范围内变量的默认初始值设定项 | ||
| regularizer=None | 此范围内的变量的默认regularizer | ||
| caching_device=None | 此范围内的变量的默认缓存设备 | ||
| partitioner=None | 此范围内变量的默认分区程序 | ||
| custom_getter=None | 这个范围内的变量的默认自定义getter | ||
| reuse=None | |||
| dtype=None | 在此作用域中创建的变量类型 | ||
| use_resource=None | |||
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
python库--tensorflow的更多相关文章
- ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库
ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库. 与现有的主要针对监督任务设计的深度学习库不同,ZhuSuan 的特点是深入到贝叶斯推理中,从而支持各种生成模式:传 ...
- Python 库大全
作者:Lingfeng Ai链接:http://www.zhihu.com/question/24590883/answer/92420471来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...
- 哪些 Python 库让你相见恨晚?【转】
原文链接:https://www.zhihu.com/question/24590883/answer/92420471 原文链接:Python 资源大全 ---------------- 这又是一个 ...
- Python库资源大全
转载地址:https://zhuanlan.zhihu.com/p/27350980 本文是一个精心设计的Python框架.库.软件和资源列表,是一个Awesome XXX系列的资源整理,由BigQu ...
- Python库,让你相见恨晚的第三方库
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具.pyenv – 简单的 Python 版本管理工具.Vex – 可以在虚拟环境中执行命令.virt ...
- 小众Python库介绍
Python 是世界上发展最快的编程语言之一.它一次又一次地证明了自己在开发人员和跨行业的数据科学中的实用性.Python 及其机器学习库的整个生态系统使全世界的用户(无论新手或老手)都愿意选择它.P ...
- Python资源 --Python库
环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环境的工 ...
- 机器学习 python库 介绍
开源机器学习库介绍 MLlib in Apache Spark:Spark下的分布式机器学习库.官网 scikit-learn:基于SciPy的机器学习模块.官网 LibRec:一个专注于推荐算法的j ...
- python 库资源大全
偶然的机会翻到这篇文章,很全面,来源: Python 资源大全中文版 哪些 Python 库让你相见恨晚? 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 pyth ...
随机推荐
- 什么是CIDR?
英文缩写: CIDR (Classless InterDomain Routing) 中文译名: 无类别域间路由选择 IP地址有"类"的概念,/8掩码是A类,/16掩码是B类,/2 ...
- ElasticSearch进阶检索
ElasticSearch进阶检索 入门检索中讲了如何导入elastic提供的样本测试数据,下面我们用这些数据进一步检索 一.SearchAPI ES 支持两种基本方式检索 : 1.一种是通过使用 R ...
- python数据统计之禅道bug统计
背景 通过定期输出 每条产品的 BUG 情况,以此来反馈开发解决问题.测试跟进问题的情况:钉钉群推送提醒开发及时解决 以此我这边开始着手准备编写一个小工具,最终达到目的:自动定期发送统计报告,报告维度 ...
- 不懂Ribbon原理的可以进来看看哦,分析RibbonClientConfiguration完成了哪些核心初始操作
本文在前一篇文章的基础上来继续分析Ribbon的核心内容. 不懂Ribbon原理的可以进来看看哦,分析SpringBoot自动装配完成了Ribbon哪些核心操作 RibbonClientConfi ...
- python脚本监控股票价格钉钉推送
关注股市,发家致富 问题:一天天盯着股市多累,尤其上班,还不能暴露,股票软件,红红绿绿,这么明显的列表页面,一看就知道在摸鱼.被领导发现饭碗就没了 解决:搞个脚本监听一下自己关注的股票,一到价格就发个 ...
- sqli-labs 16-20
less 16: 和less 15基本一致,只是对参数进行了 ") 的包裹,注意闭合语句使用延时注入即可. 下面给一个payload示例: uname=admin")and if( ...
- node后台生成echarts图表
1 //2,生成图片数据 2 var option = { 3 tooltip: { 4 trigger: 'item', 5 formatter: "{a} <br/>{b} ...
- (二)MQTT客户端模拟连接阿里云并上传数据
本文主要讲述使用MQTT.fx接入物联网平台 一.下载MQTT.fx客户端 官网链接 二.设置相关参数 打开MQTT单片机编程工具,将三元组复制进去,生成所需要的信息 单片机工具下载地址 三元组还记得 ...
- Ztree 树插件 树节点名称太长的解决方案
样式允许的情况下 给背景div加滚动条.. 或者使用省略号方法:使用addDiyDom http://blog.csdn.net/zhengbo0/article/details/17759543 ...
- 新书介绍 -- 《Redis核心原理与实践》
大家好,今天给大家介绍一下我的新书 -- <Redis核心原理与实践>. 后端开发的同学应该对Redis都不陌生,Redis由于性能极高.功能强大,已成为业界非常流行的内存数据库. < ...