YOLO813

memcached和redis的初步了解

    想要做一个大型网站,memcached和redis是一个绕不过去的坎,所以尽管之前没接触过,也还是硬着头皮去学习了下。

    官方介绍:Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。当然看完还是晕的也很正常,二者的区别及优缺点网络上都很多,直接来实战。

    memcached的安装和使用,windows中我安装版本小于1.45,这样可以作为一个服务来安装,下载好memcached之后进入到下载目录

memcached.exe -d install    #安装
memcached.exe -d start     #启动
memcached.exe -d stop     #停止
memcached.exe -d uninstall   # 卸载
memcached.exe -d runservice -m 512 # 后台运行缓存设置为512M

    linux中的安装(centos),

yum install memcached
whereis memcached  # 查看安装目录
# 或者使用源码安装,我采用的第二种
wget http://memcached.org/latest                    #下载最新版本
tar -zxvf memcached-1.x.x.tar.gz                    #解压源码
cd memcached-1.x.x                                  #进入目录
./configure --prefix=/usr/local/memcached           #配置
make && make test                                   #编译
sudo make install                                   #安装

    memcached中的默认端口号为11211,如果想要其它服务器能够访问本机的memcached,可以使用如下参数启动,开始必须是/usr/bin/memcached

/usr/bin/memcached -d -m 1024 -u root -l 0.0.0.0 -p 11211

    然后阿里云(我的linux服务器在阿里云)开放11211端口给我的IP地址,再放行防火墙的11211端口

firewall-cmd --zone=public(作用域) --add-port=11211/tcp(端口和访问类型) --permanent
firewall-cmd --zone=public --list-all

    此时看到防火墙中已经放开了11211端口,如果你还是无法通过远程telnet [ip] 11211访问到你的远程memcached,别着急,请先用systemctl restart firewalld.service重启防火墙,让配置生效,这个时候,再使用telnet链接,可以看到漆黑一片,已经链接成功

    测试如下,说实话是真的难用,没有提示,没有删除按键,一旦输入错误就得重新输入,stats items可以看到存储了多少key-value,使用stats cachedump [items_id] 0(表示所有)可以查看键名的一些情况,使用quit退出链接。

    redis的安装使用,我是直接在linux服务器上进行的安装,并没有安装到windows中,网址:https://redis.io/download,按照其Installation里面的介绍来安装即可,

$ wget https://download.redis.io/releases/redis-6.0.9.tar.gz
$ tar xzf redis-6.0.9.tar.gz
$ cd redis-6.0.9
$ make

    在执行make命令之前,也可以进入到redis下面的src目录看一下,是没有redis 服务程序 redis-server,和用于测试的客户端程序 redis-cli的,当进行编译之后,我们就可以进入到src目录下面使用./redis-server启动服务,当然这是前台启动,我们可以看到有一长串的Warning

no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf

    这是因为我们没有配置redis.conf文件,所以我们需要把配置文件修改下,因为配置文件在上级,修改起来不方便,我是将其拷贝到src同级目录下,然后修改daemonize为yes

    保存之后使用./redis-server redis.conf启动,没有任何报错即意味着启动,

ps aux | grep redis
root     15463  0.0  0.5  61800  9640 ?        Ssl  21:14   0:00 ./redis-server 127.0.0.1:6379
root     15470  0.0  0.0  12108   980 pts/0    S+   21:14   0:00 grep --color=auto redis

    我们可以使用./ redis-cli运行测试客户端程序进行测试,输入ping,如果返PONG,则说明成功启动,如果你配置了密码,尽管可以启动redis-cli,但如果你没有输入密码,ping之后会显示权限错误

    我们可以使用CONFIG GET *获取配置文件信息,也可以使用如下格式的代码来短暂修改配置文件信息(测试,修改的信息会在redis重启之后丢失)

CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

CONFIG SET save "500 1 300 10 60 10000"

    如果想要通过外网来链接redis,阿里云和防火墙放行端口6379(据说是redis创始人造的梗,手机上MERZ字母按键的缩写),再将redis.conf文件中的bind ip注释掉,网上还有教程让关闭protect-mode,完全不需要。

    不得不说在linux终端上,redis用起来还是比memcached方便,tab补全,字符提示,强大的列表,集合,哈希数据结构的存储,RDB和AOF持久化,当然最终还是用python代码来操作他们,所以还是得看需求。