第三十四课预习任务

1. nosql介绍

  • 非关系型数据库也叫Nosql数据库,全称是not noly sql。
  • 2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。Eric Evans使用NoSQL这个词,并不是因为字面上的“没有SQL”的意思,他只是觉得很多经典的关系型数据库名字都叫“**SQL”,所以为了表示跟这些关系型数据库在定位上的截然不同,就是用了“NoSQL“一词。
  • 非关系型数据库提出另一种理念,例如,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。

1.2关系型数据库与非关系型数据库的区别:

  • 关系型数据库通过外键关联来建立表与表之间的关系,非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。

2.memrcached介绍

MemCache是一个开源的高性能的分布式的内存对象缓存系统,用于各种动态应用以减轻数据库负担。它通过在内存中缓存数据和对象,来减少读取数据库的次数,从而提高动态、数据库驱动应用速度。MemCache会在内存中开辟一块空间,建立一个统一的巨大的hash表,hash表能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

通常在访问量高的Web网站和应用中使用MemCache,用来缓解数据库的压力,并且提升网站和应用的响应速度

在应用程序中,我们通常在以下节点来使用MemCached:

  1. 访问频繁的数据库数据(身份token、首页动态)
  2. 访问频繁的查询条件和结果
  3. 作为Session的存储方式(提升Session存取性能)
  4. 页面缓存
  5. 更新频繁的非重要数据(访客量、点击次数)
  6. 大量的hot数据

3.安装memcached

[root@knightlai02 ~]# yum install -y memcached libmemcached libevent
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                                     | 8.4 kB  00:00:00     
 * base: centos.01link.hk
 * epel: mirrors.aliyun.com
 * extras: centos.01link.hk
 * updates: centos.01link.hk

启动memcached

[root@knightlai02 ~]# systemctl start memcached
[root@knightlai02 ~]# systemctl status  memcached
● memcached.service - Memcached
   Loaded: loaded (/usr/lib/systemd/system/memcached.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2018-10-30 06:47:45 EDT; 6s ago

编辑配置文件

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="127.0.0.1" //这里是ip地址

其中-m指定memcached分配内存
 -c指定最大并发数
 -u指定运行memcached服务的用户

4. 查看memcachedq状态

[root@knightlai02 ~]# memcached-tool 127.0.0.1:11211  stats
Usage: memcached-tool <host[:port] | /path/to/socket> [mode]

       memcached-tool 10.0.0.5:11211 display    # shows slabs
       memcached-tool 10.0.0.5:11211            # same.  (default is display)
       memcached-tool 10.0.0.5:11211 stats      # shows general stats
       memcached-tool 10.0.0.5:11211 dump       # dumps keys and values


5.memcached命令行

可以用telnet命令连接:

[root@knightlai02 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set key2 0 30 2
aa
STORED
get key2
VALUE key2 0 2
aa
END


<flags> 是一个16位的无符号的整数(以十进制的方式表示)。该标志将和需要存储的数据一起存储,并在客户端get数据时返回。客户端可以将此标志用做特殊用途,此标志对服务器来说是不透明的。
 
<exptime> 为过期的时间。若为0表示存储的数据永远不过期(但可被服务器算法:LRU 等替换)。如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。
 
<bytes> 需要存储的字节数,当用户希望存储空数据时<bytes>可以为0
 
<data block>需要存储的内容,输入完成后,最后客户端需要加上\r\n(直接点击Enter)作为结束标志。

6. memcached数据导出和导入

6.1数据导出

[root@knightlai02 ~]# memcached-tool 127.0.0.1:11211 dump > data.txt
Dumping memcache contents
  Number of buckets: 1
  Number of items  : 1
Dumping bucket 1 - 1 total items

6.2数据导入

[root@knightlai02 ~]# cat data.txt
add key4 3 1540907680 5
knigh
add key3 3 1540907557 4
adbc





[root@knightlai02 ~]# systemctl restart memcached
[root@knightlai02 ~]# nc 127.0.0.1 11211 < data.txt
STORED
STORED
[root@knightlai02 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key3
VALUE key3 3 4
adbc
END

注意:导出的数据是带有一个时间戳的,这个时间戳就是该条数据过期的时间点,如果当前时间已经超过该时间戳,那么是导入不进去的

7. php连接memcached

编译之前查看扩展模块

[root@knightlai02 php-5.6.32]# /usr/local/php-fpm/bin/php -m
[PHP Modules]
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mcrypt
mysql
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix

7.2 开始编译安装:

先安装php的memcache扩展
cd /usr/local/src/
wget  http://pecl.php.net/get/memcache-2.2.3.tgz 

tar zxf memcache-2.2.3.tgz 
cd memcache-2.2.3

[root@knightlai02 memcache-2.2.3]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226


./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
..........................................................
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20131226/


开始编译安装完成后,会出现这样一个提示“Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20131226/”这样就表示成功了。


[root@knightlai02 memcache-2.2.3]# vim /usr/local/php-fpm/etc/php.ini
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll
//在这个地方加入以下这行就可以
extension=memcache.so

[root@knightlai02 memcache-2.2.3]# /usr/local/php-fpm/bin/php -m
[PHP Modules]
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mcrypt
memcache
mysql
mysqli
openssl
这里我们就可以看到memcache这个模块加进来了。

7.3测试php连接memcache是否成功

//这里我们有一段试例代码下载下来,如果出现以下数据那就可以编译成功了!
[root@knightlai02 memcache-2.2.3]# curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null
[root@knightlai02 memcache-2.2.3]# /usr/local/php-fpm/bin/php 1.php
Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
    [3] => ddd
)
<br>Get key1 value: <br>Get key2 value: <br>

 

8. memcached中存储sessions

[root@knightlai02 memcache-2.2.3]# wget http://study.lishiming.net/.mem_se.txt

mv .mem_se.txt  /usr/local/apache2/htdocs/session.php


其中session.php内容可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php
curl localhost/session.php 


 

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/84066202