文章目录

  • 1 Memcached应用实战配置
  • memcache监控
  • 2 Redis
  • redis服务器环境下mysql实现la/nmp架构缓存
  • redis持久化和订阅
  • Redis 发布订阅
  • 主从复制
  • 哨兵模式
  • 集群模式
  • 缓存穿透、击穿、雪崩、预热、更新、降级

1 Memcached应用实战配置


环境规划

首先关闭防火墙,同步时间

systemctl stop firewalld
yum install ntp ntpdate -y
ntpdate cn.pool.ntp.org
hwclock --systohc

1.web 服务器配置
在192.168.74.151上安装软件,启动服务
检查http端口是否为80

vim /etc/httpd/conf/httpd.conf


安装数据库软件,如未安装请参考Centos安装mysql数据库

安装lnmp环境
yum install httpd php php-gb php-mysql php-memcache
启动apache服务
systemctl restart httpd
stemctl enable httpd
2.在mysql服务端创建用户(192.168.74.138)
mysql8.0中默认的身份认证插件是caching_sha2_password,替代了之前的mysql_navtive_password

create user 'memcache'@'%' identified by 'Nebula@123';
ALTER USER'memcache'@'%' IDENTIFIED WITH mysql_native_password BY 'Nebula@123';
flush privileges

检查mysql用户表中有刚才创建的用户信息
select user,host,plugin from mysql.user;

测试http功能

vim /var/www/html/index.html



测试PHP测试功能
vim /var/www/html/index.php

<?php phpinfo(); ?>


在这里可以发现php链接是正常的.接下来,我们来测试mysql
连接mysql使用MySQL服务端的IP地址,之前创建好的memcache用户名和对相应的密码,若连接正常,返回success,失败则返回fail!!

vim /var/www/html/mysql.php
<?php
$link=mysql_connect(‘192.168.74.138:3306','memcache',‘Nebula@123');
if($link);
else echo "Fail!!";
echo "<h1>Success!!</h1>";
mysql_close();
?>


通过测试,可见MySQL数据库是可以正常链接的。
如果数据库连接失败,可以查看

tail -f /var/log/httpd/error_log

错误日志进行改正
3.memcache 服务配置
yum安装
Linux系统安装memcached,首先要先安装依赖库。

yum install gcc gcc-c++ libevent-devel

安装memcahched

 yum install memcached

启动memcached
memcached -u root -p 11211 -vv
这里显示了调试信息。这样就在前台启动了memcached,监听TCP端口11211。调试信息的内容大部分是关于存储的信息。
Memcached 连接

telnet localhost 11211


测试web和memcache的连通性
修改客户端监听所有地址
注意:先杀死之前创建的memcached进程

memcached -d -l 0.0.0.0 -p 11211 -u root -m 64 -c 1024 -P /var/run/memcached.pid

Web服务器(192.168.74.151)做
代码测试
这里的IP地址为memcached端,和他的端口号

vim /var/www/html/memcache.php

<?php $memcache = new Memcache; $memcache->connect('192.168.74.150', 11211) or die ("Could not connect"); $version = $memcache->getVersion(); echo "Server's version: ".$version."
"; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server"); echo "Store data in the cache (data will expire in 10 seconds)
"; $get_result = $memcache->get('key'); echo "Data from the cache:
"; var_dump($get_result); ?>


配置session(web端192.168.74.151)
vim /etc/php.ini
// 把这段放在最下面即可,IP地址为memcache端地址
session.save_handler = memcache
session.save_path =“tcp://192.168.74.150:11211?persistent=1&weight=1&timeout=1&retry_interval=15”
测试memcached的可用性
vim /var/www/html/memcached1.php

<?php session_start(); if (!isset($_SESSION['session_time'])) { $_SESSION['session_time'] = time(); } echo "session_time:".$_SESSION['session_time']."
"; echo "now_time:".time()."
"; echo "session_id:".session_id()."
"; ?>


在mysql端数据库节点(192.168.74.138)上创建测试数据库

 create database testab1;
use testab1;
create table test1(id int not null auto_increment,name varchar(20) default null,primary key(id)) engine=innodb auto_increment=1 default charset=utf8;
insert into test1(name) values ('tom1'),('tom2'),('tom3'),('tom4'),('tom5');

对memcache用户赋予库testab1的查看权限

 grant select on testab1.* to memcache@'%';


web端

<?php $*memcachehost = '192.168.74.150'; //memcached端地址* $memcacheport = 11211; $memcachelife = 60; $memcache = new Memcache; $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect"); $query="select * from test1 limit 10"; $key=md5($query); if(!$memcache->get($key)) { *$conn=mysql_connect("192.168.74.138","memcache",“Nebula@123"); //数据库节点,地址,用户,密码* mysql_select_db(testab1); $result=mysql_query($query); while ($row=mysql_fetch_assoc($result)) { $arr[]=$row; } $f = 'mysql'; $memcache->add($key,serialize($arr),0,30); $data = $arr ; } else{ $f = 'memcache'; $data_mem=$memcache->get($key); $data = unserialize($data_mem); } echo $f; echo "
"; echo "$key"; echo "
"; //print_r($data); foreach($data as $a) { echo "number is $a[id]"; echo "
"; echo "name is $a[name]"; echo "
"; } ?>

memcache监控

请参考文章memcached管理与监控web工具

2 Redis


Redis 是当前互联网世界最为流行的 NoSQL(Not Only SQL)数据库。NoSQL 在互联网系统中的作用很大,因为它可以在很大程度上提高互联网系统的性能。
Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于 NoSQL 数据库而言,作为持久层,它存储的数据是半结构化的,这就意味着计算机在读入内存中有更少的规则,读入速度更快。对于那些结构化、多范式规则的数据库系统而言,它更具性能优势。作为缓存,它可以支持大数据存入内存中,只要命中率高,它就能快速响应,因为在内存中的数据读/写比数据库读/写磁盘的速度快几十到上百倍。
redis 和 memcached 的区别

Redis安装
安装源码编译支持库:yum install gcc gcc-c++
下载包:wget https://download.redis.io/releases/redis-6.2.3.tar.gz
解压包:tar xzf redis-6.2.3.tar.gz
进入redis目录:cd redis-6.2.3
编译安装:make
启动redis
src/redis-server
启动警告的解决


启动 redis 服务进程后,就可以使用测试客户端程序 redis-cli 和 redis 服务交互了。 比如:

前端启动的关闭命令:
强制关闭:Ctrl+c
正常关闭:./redis-cli shutdown
强制关闭只需在Redis控制台直接执行即可(redis可能会丢失部分数据)。
正常关闭需要另开一个终端窗口才可执行(redis不会丢失数据,推荐使用)。
后端启动与停止
1)后端启动的配置
修改redis.conf文件,将daemonize的值改为yes后保存。

2) 后端启动的命令
src/redis-server redis.conf
3)后端启动的关闭命令
强制关闭:kill -9 进程id
正常关闭:src/redis-cli shutdown
Redis客户端
1)启动
src/redis-cli
2)关闭
ctrl+c
127.0.0.1:6379> quit
2、图形界面客户端(RedisDesktopManager)
1、修改redis文件夹下redis.conf文件,在bind 127.0.0.1行前面加#注释掉这一行,使能远程连接(默认只能使用本地连接)。
2、执行命令 ps -ef|grep redis 杀掉redis-server进程。

3、在redis目录下执行 src/redis-server redis.conf 用redis.conf设置的参数重启redis-server服务。

4、命令行执行src/redis-cli 进入redis命令行,执行config set requirepass 123456 也可以设置为其他

5、在RedisDesktopManager客户端输入用户名、密码、服务器地址、端口连接服务器,点击测试连接。

redis服务器环境下mysql实现la/nmp架构缓存


场景实例搭建:(基于Memcached实例基础搭建)

关闭防火墙:
同步时间:

1、PHP安装(web端):
yum install php php-fpm php-cli php-common php-gd php-mbstring php-mysql php-pdo php-devel php-xmlrpc php-xml php-bcmath php-dba php-enchant

安装gcc依赖
yum install gcc gcc-c++ libevent-devel

安装php的redis扩展(web服务器)
wget http://pecl.php.net/get/redis-2.2.7.tgz
tar -zxvf redis-2.2.7.tgz
cd redis-2.2.7/
phpize
./configure
make install
编译完成后可以看到安装的目录如下,进入后可以看到编译的模块redis.so

vim修改/etc/php.ini,添加redis的扩展

extension=redis.so

重启web服务器的httpd服务

systemctl  restart httpd

在httpd的发布目录下编辑如下php页面,然后访问

最后查看phpinfo,显示如下,代表安装成功:

2.安装redis(192.168.74.150)
wget -c -t 0 http://download.redis.io/releases/redis-2.8.19.tar.gz
tar xvf redis-2.8.19.tar.gz
#安装很简单、直接make就可以了
cd redis-2.8.19
make
启动redis
修改redis.con将daemonize no改为yes

启动redis
src/redis-server redis.conf
动如果没有报错,则配置正确
查看进程

ps -ef | grep redis


编写php的测试代码(web端)

vim /var/www/html/redis.php

<?php $redis = new Redis(); $redis->connect('192.168.42.30',6379) or die ("could net connect redis server"); $query = “select * from dog limit 8”; //红色代表这里是你的数据库里的表名 //为了简单一点,这里就读取了8条数据 for ($key = 1; $key < 9; $key++) { if (!$redis->get($key)) { $connect = mysql_connect('192.168.42.28','root','Nebula@123'); mysql_select_db(mytest); //红色这里是你的数据库名 $result = mysql_query($query); //如果没有找到$key,就将该查询sql的结果缓存到redis while ($row = mysql_fetch_assoc($result)) { $redis->set($row['id'],$row['name']); } $myserver = 'mysql'; break; } else { $myserver = "redis"; $data[$key] = $redis->get($key); } } echo $myserver; echo "
"; for ($key = 1; $key < 9; $key++) { echo "number is $key"; echo "
"; echo "name is $data[$key]"; echo "
"; } ?>


测试验证
第一次访问,redis中没有对应的KEY时

刷新,再次访问时

redis持久化和订阅

Redis持久化分为RDB持久化和AOF持久化:前者将当前数据保存到硬盘,后者则是将每次执行的写命令保存到硬盘(类似于MySQL的binlog);由于AOF持久化的实时性更好,即当进程意外退出时丢失的数据更少,因此AOF是目前主流的持久化方式,不过RDB持久化仍然有其用武之地。

RDB持久化
是将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化),保存的文件后缀是rdb,默认的文件名为dump.rdb。当Redis重新启动时,可以读取快照文件恢复数据。
1.触发条件
手动触发
bgsave命令可以生成RDB文件
自动触发
自动触发最常见的情况是在配置文件中通过save m n,指定当m秒内发生n次变化时,会触发bgsave。
例如,查看redis的默认配置文件(Linux下为redis根目录下的redis.conf),可以看到如下配置信息:

其中save 900 1的含义是:
当时间到900秒时,如果redis数据发
生了至少1次变化,则执行bgsave;
save 300 10和save 60 10000同理。
当三个save条件满足任意一个时,
都会引起bgsave的调用。
2.RDB备份恢复
此案例使用bgsave命令触发


灾难备份

使用flushall命令释放数据

数据恢复
先停止服务,可使用kill或pkill命令

将备份文件恢复回来

重新启动服务,并进行验证,发现数据又有了,至此我们使用RDB方式备份恢复成功

配置文件恢复参考此博客
AOF
全称是Append Only File,是 redis 记录执行指令的日志文件。

三种触发机制
(1)每修改同步always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
(2)每秒同步everysec:异步操作,每秒记录 如果一秒内宕机,有数据丢失
(3)不同no:从不同步
AOF备份恢复
因为配置文件默认备份方式是RDB,所以如果想以AOF方式备份,需要开启appendonly参数,将
no改为yes。演示使用默认的触发机制everysec。

修改后重新启动服务,会产生一个空的aof文件,这是因为之前都是采用rdb方式的,使用这种方式还没有数据

构造数据
发现文件增大
备份并清空数据

停止服务

pkill redis

恢复备份数据

Redis 发布订阅



实例中我们创建了订阅频道名为 redisChat:

现在,我们先重新开启个 redis 客户端,然后在同一个频道 redisChat 发布两次消息,订阅者就能接收到消息。

Redis主从复制

准备三台服务器
192.168.74.138 为主服务器
192.168.74.150 为从服务器
192.168.74.151 为从服务器

一、安装redis
参考前文
二、配置主服务器

 cd redis-6.2.3/vim redis.conf

将bind 127.0.0.1这行注释或者指定ip

关闭守护进程

设置访问密码(由于redis性能非常高,撞库风险极大,建议线上把密码设置非常复杂,最好能在第2步中指定ip)。

三、配置从服务器
前四步与主服务器配置基本一致
配置所属主服务器ip和端口

配置所属主服务器的密码

需要注意的是,从服务器通常是只读,所以要配置只读(默认是只读,不要更改即可
四、测试
进入主服务器(192.168.42.28)
进入redis客户端,由于设置了密码,所以需要鉴权

设置一个值

进入从服务器
用get命令获取name的值

主从复制

环境准备
192.168.74.138 为主服务器(master)
192.168.74.150 为从服务器(slave)
192.168.74.151为从服务器(slave)

一、安装redis
首先给服务器分别安装redis,过程可参考前文
二、配置主服务器
1、进入192.168.42.28服务器,打开redis配置文件。

cd redis-6.2.3/
vim redis.conf

2、将bind 127.0.0.1这行注释或者指定ip
设置访问密码(由于redis性能非常高,撞库风险极大,建议线上把密码设置非常复杂,最好能在第2步中指定ip)。


3、开启守护进程

 daemonize yes


至此主服务器配置完毕!
启动redis服务

 ./src/redis-server redis.conf

三、配置从服务器
前四步与主服务器配置基本一致
5、配置所属主服务器ip和端口
6、配置所属主服务器的密码

配置完成,启动服务
四、测试
1、进入主服务器
2、进入从服务器
使用get命令获取name的值,可以看到

如果在从服务器上写,则会报错,如下图
至此,redis主从复制配置完成

哨兵模式


环境准备

1、三个节点修改哨兵配置文件sentinel.conf

 cd redis-6.2.3/vim sentinel.conf


scp拷贝到其他两台从机上

scp sentlnel.conf 192.168.74.150:/root/redis-6.2.3/
scp sentlnel.conf 192.168.74.151:/root/redis-6.2.3/

将server1上配好的sentinel文件发送给server2和server3,一定要在server1开启sentinel之前。这是因为sentinel是一个动态的服务。

2、在server1/2/3开启服务sentinel
启动redis服务(先主机后从机)
启动sentinel(先主机后从机)
cd /root/redis-6.2.3
src/redis-server sentinel.conf --sentinel
提示socket连接数设置的太低了,需要修改后重启服务就不会有警告提示了

echo 1024 > /proc/sys/net/core/somaxconn

搭建好哨兵之后,哨兵一启动,过了几秒就会判断master sdown

原因是没有设置节点认证的密码,也就是我的redis设置了节点通信的密码,那么在哨兵里面也是需要配置的。

主节点可以查看到如下信息,slave两个节点已经加入

3、在server1上查看master信息

redis-cli
info

4、模拟server1(Master)宕机故障,进行测试:

 shutdown

此时我们,在server2上,可以看到订阅的消息:
备Redis(server3)上:
我们可以看到server3变为master。
5、我们再将server1的redis恢复,重新加入主从复制

 src/redis-server redis.conf

此时,在server1上,我们可以看到,server1重新上线后,是server3(192.168.42.30)的备机。

在server1上:Redis的配置文件自动添加了最后一行,表明server1是server3的slave

哨兵配置文件最后自动添加了,sentinel监控状况
在server2上:

集群模式

cluster可以说是sentinel和主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。
cluster集群特点:
多个redis节点网络互联,数据共享
所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用
不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上, 并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为
支持在线增加、删除节点
客户端可以连接任何一个主节点进行读写
1、集群的作用
(1)数据分区:数据分区(或称数据分片)是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

(2)高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。
2、集群的数据分片
1、Redis集群的数据分片:
Redis集群引入了哈希槽的概念
Redis集群有16384个哈希槽( 编号0-16383)
集群的每个节点负责一部分哈希槽
每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作
2、以3个节点组成的集群为例:
节点A包含0到5460号哈希槽
节点B包含5461到10922号哈希槽
节点C包含10923到16383号哈希槽
3、Redis集群的主从复制模型
集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1 都失败后,集群将不可用。
3、群集模式的搭建

修改配置文件:

cp /root/redis-6.2.3/redis.conf /root/redis-6.2.3/redis_7001.conf
cp /root/redis-6.2.3/redis.conf /root/redis-6.2.3/redis_7002.conf
mdir -p /var/log/redis/cluster
mkdir -p /root/redis-6.2.3/cluster/{redis_7001,redis_7002}

以下是要手动修改或添加的,其他配置不需要修改

 vim redis_7001.conf

bind 192.168.74.151
port 7001
daemonize yes
pidfile “/var/run/redis_7001.pid”
logfile “/var/log/redis/cluster/redis_7001.log”
dir “/root/redis-6.2.3/cluster/redis_7001”
masterauth “123456”
requirepass “123456”
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 15000

vim redis_7002.conf

bind 192.168.74.151
port 7002
daemonize yes
pidfile “/var/run/redis_7002.pid”
logfile “/var/log/redis/cluster/redis_7002.log”
dir /root/redis-6.2.3/cluster/redis_7002"
masterauth “123456”
requirepass “123456”
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7002.conf
cluster-node-timeout 15000

其它两台机器配置与192.168.74.151一致,参照上面
启动redis服务

./src/redis-server redis_7001.conf
tail -f /var/log/redis/cluster/redis_7001.log
src/redis-server redis_7002.conf
tail -f /var/log/redis/cluster/redis_7002.log

其它两台机器启动与192.168.42.28一致

  echo 1024 > /proc/sys/net/core/somaxconn

再次重新登陆即可
创建集群

src/redis-cli -a 123456 --cluster create 192.168.74.151:7001 192.168.74.151:7002 192.168.74.138:7003192.168.74.138:7004 192.168.74.151:7005 192.168.74.151:7006 --cluster-replicas 1

手动输入yes,接受上面的配置

 cd redis-6.2.3/cluster/redis_7001/ll


vim /root/redis/cluster/redis_7001/nodes-7001.conf

集群操作
登录集群:

./src/redis-cli -c -h 192.168.74.151 -p 7001 -a 123456                  # -c,使用集群方式登录cluster info

列出节点信息:

cluster nodes


写入数据


可以看出redis cluster集群是去中心化的,每个节点都是平等的,连接哪个节点都可以获取和设置数据。
当然,平等指的是master节点,因为slave节点根本不提供服务,只是作为对应master节点的一个备份。

增加节点
192.168.74.138上增加一节点(7007)

cp /root/redis-6.2.3/redis_7003.conf /root/redis-6.2.3/redis_7007.conf
vim /root/redis-6.2.3/redis_7007.conf

bind 192.168.74.138
port 7007
daemonize yes
pidfile "/var/run/redis_7007.pid“
logfile "/usr/local/redis/cluster/redis_7007.log“
dir "/data/redis/cluster/redis_7007“
#replicaof 192.168.74.151 6379
masterauth "123456“
requirepass "123456“
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7007.conf
cluster-node-timeout 15000

mkdir /root/redis-6.2.3/cluster/redis_7007
./src/redis-server redis_7007.conf

192.168.74.150上增加一节点

cp /root/redis-6.2.3/redis_7005.conf /root/redis-6.2.3/redis_7008.conf
vim /root/redis-6.2.3/redis_7008.conf

bind 192.168.74.150
port 7008
daemonize yes
pidfile "/var/run/redis_7008.pid“
logfile "/usr/local/redis/cluster/redis_7008.log“
dir "/data/redis/cluster/redis_7008“
masterauth "123456“
requirepass "123456“
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7008.conf
cluster-node-timeout 15000

mkdir /root/redis-6.2.3/cluster/redis_7008
./src/redis-server redis_7008.conf

集群中增加节点:

192.168.74.138:7003> cluster meet 192.168.74.150 7008
192.168.74.138:7003> cluster nodes


可以看到,新增的节点都是以master身份加入集群的
更换节点身份
将新增的192.168.42.30:7008节点身份改为192.168.42.29:7007的slave

./src/redis-cli -c -h 192.168.74.150 -p 7008  -a 123456 cluster replicate 22097f46f8740176f93570001f9132cbab9bbdbc


查看相应的nodes.conf文件,可以发现有更改,它记录当前集群的节点信息
cat /root/redis/cluster/redis_7001/nodes_7001.conf

删除节点:

CLUSTER FORGET
CLUSTER NODES

保存配置:
CLUSTER SAVECONFIG
模拟master节点挂掉

     CLUSTER NODES


重新启动7001节点

./src/redis-server redis_7001.conf
CLUSTER NODES


可以看到,7001节点启动后为slave节点,并且是7004的slave节点。即master节点如果挂掉,它的slave节点变为新master节点继续对外提供服务,
而原来的master节点如果重启,则变为新master节点的slave节点。
另外,如果这里是拿7007节点做测试的话,会发现7008节点并不会切换,这是因为7007节点上根本没数据。集群数据被分为三份,采用哈希槽 (hash slot)的方式来分配16384个slot的话,它们三个节点分别承担的slot 区间是
节点7004覆盖0-5460
节点7003覆盖5461-10922
节点7005覆盖10923-16383

缓存穿透、击穿、雪崩、预热、更新、降级

Memcached管理与Redis相关推荐

  1. 【转】Memcached管理与监控工具----MemAdmin

    原文连接:http://blog.csdn.net/ajun_studio/article/details/6746877 原文作者:halfMe 转载注明以上信息! 使用MemCached以后,肯定 ...

  2. redis 管理工具_Redis桌面管理工具Redis Desktop Manager 2019.2发布

    简介 Redis桌面管理器(又名RDM) - 是适用于Windows,Linux和MacOS的快速开源Redis数据库管理应用程序. 该工具为您提供了一个易于使用的GUI,可以访问您的Redis数据库 ...

  3. 管理连接redis server的客户端

    一.redis server管理连接redis客户端的命令 1.查看与redis服务端相连的所有客户端的连接信息 查看命令:client list # 查看连接当前redis的所有客户端 127.0. ...

  4. linux下memcached安装 和redis安装,jdk,tomcat,mysql 安装

    一.memcached安装yum search memcached yum -y install memcached memmcached -h service memcached restart c ...

  5. 上下文管理、redis发布订阅、RabbitMQ发布订阅、SQLAlchemy

    一.上下文管理 import contextlib @contextlib.contextmanager def work_state(state_list,worker_thread):state_ ...

  6. 淘淘商城第39讲——使用Spring来管理单机版Redis与集群版Redis

    我们知道Jedis在处理Redis的单机版和集群版时是完全不同的,有可能在开发的时候使用的是单机版,但是当项目上线后使用的则是集群版,这就需要能够方便的在单机版和集群版之间进行切换了.我们的做法便是定 ...

  7. 更好的内存管理-jemalloc (redis 默认使用的)

    2019独角兽企业重金招聘Python工程师标准>>> 更好的内存管理-jemalloc 2011-05-31 11:23:23|  分类: 软件技术(杂)|字号 订阅 今年年初由于 ...

  8. python操作redis集群_python 连接管理作redis集群

    python的redis库是不支持集群操作的,推荐库:redis-py-cluster. 安装 pip3 install redis-py-cluster 连接redis集群 #!/usr/bin/e ...

  9. tomcat 使用 memcached管理session ,并且实现统一登录

    2019独角兽企业重金招聘Python工程师标准>>> 把tomcat的session存放在memcached 的集中式缓存中,所有的tomcat共享memcached中的https ...

最新文章

  1. Eclipse:定制toString()
  2. Unsupported gpu architecture 'compute_*'2017解决方法
  3. 米兔点读笔点读包_小米米兔点读笔评测:养成教育只要轻松一点
  4. 深度学习(神经网络)[1]——单层感知器
  5. 大道至简第五章阅读笔记
  6. mysql有类似dbms_output.pu_line();_使用MySQL,SQL_MODE有哪些坑,你知道么?
  7. cocos2d-x游戏开发(十一)细说场景切换
  8. javafx 和swing_集成JavaFX和Swing(修订版)
  9. Android Studio(8)---为新设备添加模块
  10. CSS3鼠标滑过图片3D旋转动画
  11. CMOS摄像头驱动分析笔记1
  12. 关于萤石云与海康威视摄像头对接
  13. 使用NOPI做Excepl导入导出
  14. 芯片可靠性与商规、工规、车规
  15. mac要装anaconda吗_在Mac OS X上安装Anaconda
  16. 2023速卖通开店入驻流程及费用,新店运营思路
  17. Android手机QQ的UI自动化实践
  18. 电脑屏上出现联想炫彩鸿蒙,最欢甚!联想P50手机炫彩版升级上市
  19. 2021 Jiangsu Collegiate Programming Contest——K. Longest Continuous 1
  20. template 推导

热门文章

  1. 网易邮箱发送注册或登陆验证码
  2. Luogu_P4140 奇数国
  3. HTML + CSS 学习
  4. 邓宁—克鲁格心理效应(达克效应)【转】
  5. java 屏蔽广告js_用js屏蔽被http劫持的浮动广告实现方法
  6. 2016年(第15届)中国软件业务收入前百家企业名单(zz)
  7. 维深集团荣获2004年物流与采购信息化优秀方案大奖
  8. 如何使用 CSS 定位 HTML 元素
  9. Android 自定义加载Dialog 运行效果流畅
  10. 刘慈欣 计算机工程师,刘慈欣:《三体》之外,我只是个普通的工程师