热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大型网站优化-memcache技术-尼农小道

大型网站优化-memcache技术-尼农小道
大型网站优化-memcache技术

memory+cache 内存缓存

memcache简介

memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。这是一套开放源代码软件,以BSD license授权发布。【摘取自百度百科】

官网:http://memcached.org/

分布式:多台Memcache服务器来管理数据的架构。

缓存系统:将用户查询的数据缓存到内存之中,方便下次直接从内存中获取。减少了磁盘IO的开销。

什么是nosql?(sql 关系型数据库)

答:MySQL 叫做关系型数据库(主要的特点是都是一个二维表结构(表中的行和列),表与表之间是由关系的)(oracle(Java)、db2、sqlserver

非关系型数据:就是不使用sql语句作为查询的数据库(保存数据的系统),并且没有严格意义上的二维表的概念。它的数据结构全部是一张巨大的hash表(key-value)

hash表好处: 时间复杂度是 0(1):随着数据的增加,查询时间不会存在数量级(1s)的变化。

hash表坏处: hash碰撞 不同 key 对应同一个值

key1 ===MD5(sql)

Asion

key2

12

key3

shenzhen

key4

iphone

  1. 使用原理

    在使用的时候,先从nosql数据库里面获取,有的话直接返回,没有的话就先从MySQL获取,然后缓存到memcache里面,下次直接从memcache里面返回。

  2. memcache与MySQL的区别

  3. 没有使用SQL语句

  4. memcache没有MySQL中的表的概念,都是使用key-value来保存的

  5. memcache的数据是保存到内存中的,断电即丢失(如何保存数据的持久性?)

    1. MemcacheDB可以持久化保存数据。2. repcached也可以实现数据的持久化

    注意:NoSQL是否能够取到MySQL(关系型数据库)?

    答: nosql的存在永远不是为了取代MySQL(关系型数据),是关系型数据的一个补充。因为关系型数据库有它独特的地方(事务,存储过程)。

    Nosql主要使用的场景:社交型网站(人人、校内、豆瓣)

    课下了解:什么是C10K问题?C100K

    答:c10k 代表的含义就是当网站的并发数达到 1w 时候网站的整体架构会全部的更新,就叫做c10k,目前已经被NoSQL数据库完美的解决。但是又有 c100k 的问题?

    架构网站:

    http://www.infoq.com/

    memcache安装(使用端口11211)

  6. Windows下安装

    1.1 直接将memcached文件放置到某一文件夹下(千万不要使用中文命名的文件夹 | 空格)

    1.2 在cmd下执行如下命令(不能关闭)可以使用Ctrl+c 终止

    memcache的端口 11211

    1.3 查看是否启动(新开一个窗口),执行如下命令

    # netstat -an

  7. Linux下安装

    1. putty--》远程连接Linux的一个客户端工具

      1. 注意:一般连接不上(防火墙)

        1. 关闭防火墙

    2. selinux没有关闭

      让selinux立即生效

    2.1 环境准备

    在Linux环境下,需要gcc、g-c++、make(makefile)、cmake、autoconfig(configure)、libtool等工具

    在Linux下联网的情况下,使用如下命令

    # yum install -y gcc make cmake autoconfig libtool

    -y 不需要使用确认交互式

    2.2 编译安装memcached

    memcached依赖于 libevent库,因此需要先安装,分别到各自的官网下载稳定版

    libevetnt官网:http://libevent.org/

    memcache官网:http://memcached.org/

    先编译安装libevent,在编译安装memcached,同时在安装memcached需要指定libevent的安装路径

    具体步骤:

    上传

  8. 先下载libevent,解压,并安装(一般Linux下软件安装都是放在 /usr/local/src目录下,安装的软件一般放在/usr/local/NAME)

    # ./configure --prefix=/usr/local/libevent && make && make install

    b. 安装memcache,解压、编译、安装

    # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent && make && make install

    2.3 memcached的启动

    # /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nobody -vv

    注意:此时memcached成功启动,但把信息输出到控制台。

    如果想让memcached作为服务在后台启动,只需要加上-d选项(daemon 后台)

    # /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nobody -d

    如何查看服务器是否正常启动?

    # ps axu | grep memcached

    如果需要查看参数信息,使用 memcached -h 查看帮助:

    操作memcache

    memcached的客户端与服务器端的通信很简单,基于文本的协议,类似http协议,可以直接使用Telnet来做交互

    使用Telnet操作(quit退出)

    # telent 服务器的IP 11211

  9. Windows下

    连接之后 使用 ctrl + ] 打开Telnet的回显

  10. Linux下

    2. 基本命令:

    学习memcache的增删改查命令:

    add key flag expire length

    key: 名称

    flag: 1 memcache按照字符串的方式保存

    expire:过期时间,memcache时间

    length:数据长度(B)

    ※add 增加

    # add name 1 0 2 # 在memcache服务器上添加一个key为的name值 长度为2个字节,有效期长期有效

    如何理解expire

    设置缓存的有效期,有三种格式

  11. 设置秒数,从设置开始,n秒后失效

  12. 时间戳,到指定时间戳后失效

  13. 设置为0,不自动失效(特别注意,不是永久有效。a. 在memcache安装时候,指定了一个最长的有效时间,默认是30天(源代码) b. 可能不到30天,就会被挤出去)

    最近最少使用原则

    ※delete 删除

    # delete key

    ※replace 替换

    # replace key flag expire length

    ※get 获取

    # get key

    ※set 如果数据有 replace ,没有则 add

    # set key flag expire length

    name存在:

    age不存在:

    ※incr 增加

    # incr age NUMBER

    ※decr 减少

    # decr age NUMBER

    ※stats 统计memcache服务器信息

    # stats

    ※flush_all 清空所有数据

    # flush_all

    使用php操作memcache

  14. Windows下

  15. 到(http://downloads.php.net/pierre/)下载扩展dll文件

  16. 将该文件放到php的extension_dir 对应的目录下

  17. 修改php.ini文件,加入 extension=php_memcache.dll,引入该文件

  18. 重启Apache

  19. Linux下 (在Linux下如何为php开启一个扩展,说一下通用方案

    1. 到(http://pecl.php.net/package/memcache)去下载扩展源码

    beta :测试版:一般都有一些小bug,但是需要用户去使用发现,如果有问题,可以给官方反馈。然后在做修复

    alpha:内部测试版:内部在开发的时候,使用的版本,一般这个版本bug众多。但是这个版本往往有新的功能加入。(一般也是新公司才试试)alpha版本有一些补偿。

    stable:稳定版:基本无bug,能够稳定的运行。

    ftp使用的注意事项:

  20. vsftpd 是否正常的开启 service vsftpd status

  21. 一般都只能使用普通用户连接ftp(不能root来连接ftp)获取使用 sudo

  22. 自己家目录的大小空间不够(上传文件成功,但是显示的大小为0)

  23. 防火墙是否关闭(iptables -F 关闭)(iptables -L)

    # cls

    # cd

    # vim .bashrc

    Linux下载末行模式下

    # :x 小写 退出 wq

    linux在编辑模式下

    # Z 大写

    1. 一般下载到 /usr/local/src 目录下,解压,并进入该文件夹内

    1. 使用当前php的phpize命令创建configure文件(必须在扩展目录内

    # /usr/local/php/bin/phpize 绝对路径phpize

    d. 利用上面生成的configure文件,收集系统信息 不需要指定安装路径

    # ./configure --with-php-cOnfig=/usr/local/php/bin/php-config 告诉它如何去找php配置文件

    e. 执行编译、安装

    # make && make install

    注意:可以查看上述命令执行完成之后的结构

    # ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    1. 修改php.ini配置文件,重启Apache

    注意:在Linux下,如何查看php.ini配置文件的位置?

    解决:phpinfo();

    注意:在Linux下,修改配置文件之前,一定要备份

    php.ini-backup-2016-1-12

    注意:.so是什么文件?

    .so是Linux下的共享对象,类型Windows下的.dll文件

    注意:Linux下,关闭一个服务 可以使用

    # pkill -9 httpd

    # ps aux | grep httpd

    #ps uax | grep httpd

    将上面生成的地址增加到php.ini配置文件,如下

    extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    extension=memcacahe.so

    1. 测试

    建立一个test.php文件,测试php是否有memcache的一个模块

    php操作memcache,保存并获取值

    memcached的内存管理与删除机制

    注意:Memcache最大的value也只能是1M的空间。

    注意:内存碎片化永远都存在,只是哪一种方式可以使得内存碎片最小。

    1. 什么是内存碎片化?

    在使用这种内存缓存系统的时候,由于不断的申请,释放,就会形成一些很小的内存片段,无法被利用,这种现象就叫做,内存的碎片化。这个小红块就是操作系统无法使用的空间。

  24. 如何解决?

    memcache利用slab allocator的方式来管理(每个slab class大小为1M

    最小的单元叫做 chunk(小块):存放数据的仓库

    多个小单元组成一个chunks:多个小块组成(所有的小块的大小全部一致)

    每个 slab class的大小为1M

  25. memcache如何选择合适的大小?

    注意:如果 122Bytes的slab装满了,现在有一个100Bytes的数据来了,存到哪里去?

    答:肯定不会存在144,还是存在122这个chunk里面,利用LRU算法来实现数据存储。

  26. 固定chunk带来的内存浪费,22B

  27. factor调优

    memcached在启动的时候,会按照一定的大小来组织slab class,可以通过-f 来指定

    默认是1.25,相邻chunk之间的比值就是增加因子。可以根据自己网站的业务调整缓存因子的大小。

    是因为每个业务不一样,所需要的最小的chunk是不一样的。这个参数使得我们的系统变得更加适应自己的业务,因为数据可以自己设定大小。

  28. memcache的惰性删除

    memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种行为被称为lazy(惰性)expiration。因此,好处是memcached不会在过期监视上耗费CPU时间。

    比如:有 set(name, asion, 0, 3600) 过了3600秒就失效,失效后,并不会自动删除,只有当get查询时,检测是否过期,如果过期则删除。

    例如 # add name 1 8 2 当8s后,是失效,还是不存在?通过stats分析

    分析:是失效你,而不是不存在,只有在下一次去获取时候,memcache才会去检测它是否过期,过期了就删除

  29. memcache的LRU算法

    memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为 Least Recently Used(LRU)机制来分配空间。

    顾名思义,这是删除"最近最少使用"的记录的机制。因此,当memcached的内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空

    间分配给新的记录。从缓存的实用角度来看,该模型十分理想。

    当mecache里面的数据空间(默认是64M)已经占满了,再继续存储数据能否存储呢?

    答:能存储,要删除过期的数据,如果都没有过期,则删除最不活跃的数据,腾出空间给后面添加数据。

    例如:以122Bytes的slab举例,当数据装满后,如果来了一个100Bytes数据,如何处理?(即使永久有效,也会被踢)

    分析:内存的管理 LRU算法 、FIFO算法

  30. memcache的一些参数 Ctrl+C

    注意:在vim下如果输入了 ctrl+s 可以使用 ctrl+q 退出

    -p 监听的端口

    -l 连接的IP地址, 默认是本机

    -d start 启动memcached服务

    -d restart 重起memcached服务

    -d stop|shutdown 关闭正在运行的memcached服务

    -d install 安装memcached服务

    -d uninstall 卸载memcached服务

    -u 以的身份运行 (仅在以root运行的时候有效)

    -m 最大内存使用,单位MB。默认64MB

    注意:如果系统是32位的,则最大限制为2G,如果系统是64位,则无限制。

    -M 内存耗尽时返回错误,而不是删除项

    -c 最大同时连接数,默认是1024

    -f 块大小增长因子,默认是1.25

    -n 最小分配空间,key+value+flags默认是48

    -h 显示帮助

    -v 输出警告和错误信息

    -vv 打印客户端的请求和返回信息

    -i 打印memcached和libevent的版权信息

    实际使用场景

    保存:1. 文件 2. mysql

    问题:如果一个文件夹下session文件过多,检索变慢,如何处理?

    答:分层处理

    使用Memcache来保存,Memcache使用分布式来保存(拿多台Memcache做存储)

    使用memcache保存session

    1. 修改php.ini文件,配置信息如下

    session.save_handler = memcache #代表使用memcache保存session

    session.save_path ="tcp://127.0.0.1:11211" # 指定memcache服务器的地址和端口

  31. 测试

    1. 开启session,保存session

  32. 从Memcache获取session

    高级特性

    分布式memcache配置

    什么是分布式?

    由于单台memcache的服务能力有限,可以使用多台memcache来提供缓存的功能,这种架构就叫做memcache的分布式缓(集群)存系统

    如何实现?

    可以这样理解,如何将数据分散答各台Memcache服务器上。

    在客户端实现分布式,在数据保存之前,根据一定的算法,将数据保存到那台memcache服务器上,在获取数据的时候,按照前面相同的算法去对应的memcache服务器上获取数据

    分布式算法

  33. 取摸算法

    将key的值对服务器的台数取余,然后将对应的value值保存到对应的余数的那台memcache服务器上,一般这个hash函数 crc32( key ) % 3

    crc32()这个函数可以使得一个字符串变成一个32位的整数

    坏处:当某一台服务器宕机或者需要增加一台服务器的时候,这个时候缓存数据基本全部失效,因为除数变了。 不严格的公式, 命中率 = 取到数据/总数 1/N N代表服务器的台数

    引发出来的问题:当memcache宕机之后,缓存数据失效,这个时候MySQL的压力会骤增,

    这个时候,MySQL会宕机,然后在重启MySQL,MySQL会在短时期内再次宕机,然后,稍微延迟一点(缓存已经重新建立了一部分),又宕机。随着时间的慢慢推移,MySQL基本上趋于稳定,缓存系统成功建立。因为缓存数据不存在,所有的请求全部要转向MySQL来提供,这种现象就叫做memcache的雪崩现象。

    概图:

  34. 一致性hash实现分布式

  35. 假想有一个圆环,分布着从 0 到 2^32 这么多个正整数

  36. 然后在将服务器的节点数通过hash函数(crc32())运算后,按照顺时针的方向映射到上面的圆环上

  37. 将需要存储的数据的key也按照上面的hash函数运算后,按照顺时针的方向保存到一个不比自己小的节点上

    注意:只要是memcache宕机,就一定会有数据的丢失。但是要想办法让数据丢失的最少,使用一致性hash,即使有一台服务器宕机,也只是影响一台服务器上的数据。

    虚拟节点:分担任务

    缓存雪崩现象

    雪崩造成的原因?

  38. 由于算法不当,取摸算法,造成大量缓存失效,会引发雪崩

    解决方案:一致性hash算法

  39. 缓存时间都是同一时间,缓存系统会在同一时间全部失效,这个也会造成雪崩

    解决方案:缓存时间设置成一个范围内的随机时间(3-9小时)

    由于某个memcache节点的缓存数据失效,导致其他memcache节点的缓存命中率下降,缓存中缺失的数据会去MySQL数据库中查询,短时期内,造成了MySQL服务器压力巨大,造成宕机,就叫做缓存雪崩现象

    当重启MySQL之后,短期内再次宕机,但缓存数据已经建立了一部分,在MySQL反复多次启动之后,缓存全部重建完毕,MySQL不再宕机趋于稳定。

    解决方案:把缓存的时间设置成一个范围内的随机值(3-9小时),这样就在不同的时间段失效,把重建的工作分担到不同的时间上。

    memcache如何做高可用

  40. 使用repcached实现,全称 replication cached是由日本人发明的memcached的高可用性技术,简称复制缓冲区技术。

  41. MemcacheDB是一个分布式、key-value形式的持久存储系统由sina人员开发。它不是一个缓存组件,而是一个基于对象存取的、可靠的、快速的持久存储引擎。协议跟memcache一致(不完整),所以很多memcached客户端都可以跟它连接。MemcacheDB采用Berkeley DB作为持久存储组件,故很多Berkeley DB的特性的他都支持。扩展

  42. 如何在Linux下给一个php添加一个扩展,说出通用步骤?

    答:

    1. 下载对应扩展源码

    2. 上传放入/usr/local/src/

    3. 解压 并进入文件夹内

    4. 在文件夹内执行 绝对路径下的 phpize /usr/local/php/bin/phpize

    5. 执行configure ./configure --with-php-cOnfig=/usr/local/php/bin/php-config

    6. make && make install

    7. 生成一个目录文件,文件下面有一个.so 结尾的文件

    8. 修改php.ini文件

    9. 增加 extension_dir = 目录 extension= .so文件

    10. 重启Apache

    11. 添加 phpinfo()

    12. 浏览器查看

  43. memcache的安全性如何解决?

    答:

    由于memcache的本身设计就是极为简洁的,根本没有设置权限方面的限制。为什么不设置权限? 只提供缓存功能,为了精简

  44. 放在内网 192.168.1.110 内网IP外网无法访问

  45. 写一个防火墙验证规则,只允许自己规定IP的包可以转进来,其他的全部丢弃

    192.168.1.221 ---224

    3. 当使用文件保存session文件时候,如果文件过多,如何处理?

    一般来说,超过65535个session文件的时候,这个时候session的获取就会变得异常缓慢,意味php代码执行很慢,如何解决?

    答:

    分层处理: 一个文件夹下建立A-Z开头的文件夹 然后A_Z在建立

    使用memcache处理: 单台memcache处理能力有限,就使用分布式memcache来处理

  46. 如何理解负载均衡集群也是高可用集群,但有不是?

    答:负载均衡集群提供了高可用的能力,如果某一台宕机之后,还是可以提供正常的服务,只是服务提供的有些吃力而已。

    因为负载均衡集群不提供keepalive的机制。监控机制

    案例:

    在项目中如何使用Memcache?

    Memcache存在的意义就是缓存数据,减轻MySQL的压力。

  47. 书写一个列表页

  48. 详情页

    扩展
  49. Linux下安装一个php的扩展的通用方法

    答:

  50. 下载对应的扩展的源码 http://pecl.php.net/package/memcache

  51. 将对于的扩展上传到Linux服务器上,放在(/usr/local/src/下)

  52. 执行 tar -zxvf NAME.tar.gz

  53. cd NAME

  54. 执行绝对路径下的phpize命名 (/usr/local/php/bin/phpize)必须在扩展包的目录内

  55. 执行 ./configure --with-php-cOnfig=/usr/local/php/bin/php-config (--with-php-cOnfig=绝对路径下的php-config的路径,并且不需要指定安装的路径)

  56. make && make install

  57. 会生成一个目录,在个目录里面有对于的NAME.so文件

  58. 去修改php.ini的配置文件,增加两行信息

    extension_dir='上面生成的目录'

    extension='NAME.so'

  59. 重启Apache,然后使用phpinfo()函数测试一下,在浏览器输入地址查看,搜索如果有Memcache,代表扩展成功的开启。


推荐阅读
  • 开发笔记:Memcached高性能内存对象缓存系统
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Memcached高性能内存对象缓存系统相关的知识,希望对你有一定的参考价值。一、Memcached概述 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 相对于内存来说,磁盘的容量是非常大的,所以Linux内核实现了一个叫 内存交换 的功能--把某些进程的一些暂时用不到的内存页保存到磁盘中,然后把物理内存页分配给更紧急的用户使用,当 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 一,织梦后台后台设置进入系统后台,在[系统基本参数]下面的性能选项卡当中,关于memcache进行如下配置:cfg_memcache_enable:是否启用memcache缓存,如果为否(N) ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 实战项目memcached+tomcat+session+nginx在工作中的应用和配置
    环境介绍:公司根据实际需要搭建一个购物网站,当用户购物时可以将不同商品,放到同一个购物车中进行同时付款。环境的搭建:外网用户IP地址:1.1.1.1主机名:fanxiaohui用户 ... [详细]
  • Redis学习笔记(二) .NET中使用Redis
    Redis是一个用的比较广泛的KeyValue的内存数据库,新浪微博、Github、StackOverflow等大型应用中都用其作为缓存,Redis的官网为http:redis.io。最 ... [详细]
author-avatar
2yuheng
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有