Redis
MongoDB
NoSQL
• NoSQL(NoSQL = Not Only SQL )
– 意思是 " 不仅仅是 SQL“
– 泛指非关系型数据库
– 不需要预先定义数据存储结构
– 表的每条记录都可以有不同的类型和结构
NoSQL 服务软件
• 主流软件
– Redis
– MongoDB
– Memcached
– CouchDB
– Neo4j
– FlockDB
Redis 特点:
– 支持数据持久化,可以把内存里数据保存到硬盘中
– 不仅仅支持 key/values 类型的数据,同时还支持 list
hash set zset 类型
– 支持 master-salve 模式数据备份
装包:
1)[root@host50 ~]# tar -xf redis-4.0.8.tar.gz
[root@host50 ~]# cd redis-4.0.8/
[root@host50 redis-4.0.8]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests
BUGS deps MANIFESTO runtest sentinel.conf utils
CONTRIBUTING INSTALL README.md runtest-cluster src
[root@host50 redis-4.0.8]#
[root@host50 redis-4.0.8]# rpm -q gcc gcc-c++
[root@host50 redis-4.0.8]# yum -y install gcc gcc-c++
[root@host50 redis-4.0.8]# make
[root@host50 redis-4.0.8]# make install
2)初始化配置
[root@host50 redis-4.0.8]# cd utils/
[root@host50 utils]# ls
build-static-symbols.tcl hashtable redis_init_script.tpl
cluster_fail_time.tcl hyperloglog redis-sha1.rb
corrupt_rdb.c install_server.sh releasetools
create-cluster lru speed-regression.tcl
generate-command-help.rb redis-copy.rb whatisdoing.sh
graphs redis_init_script
[root@host50 utils]# ./install_server.sh #####初始化脚本
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf 主配置文件
Log file : /var/log/redis_6379.log 日志
Data dir : /var/lib/redis/6379 数据存储目录
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@host50 utils]# ss -nuplt | grep 6379
tcp LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=5058,fd=6))
[root@host50 utils]# /etc/init.d/redis_6379 status ###服务运行脚本
Redis is running (5058)
[root@host50 utils]# /etc/init.d/redis_6379 stop 停止
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@host50 utils]# /etc/init.d/redis_6379 status
cat: /var/run/redis_6379.pid: 没有那个文件或目录
Redis is running () 没PId号 没起服务
[root@host50 utils]# /etc/init.d/redis_6379 start 启动
Starting Redis server...
[root@host50 utils]# /etc/init.d/redis_6379 status 查看状态
Redis is running (5120)
[root@host50 utils]#
[root@host50 utils]# ps -C redis-server
PID TTY TIME CMD
5120 ? 00:00:00 redis-server
初始化完成后服务自动运行
4访问redis服务器存储数据
[root@host50 utils]# redis-cli
127.0.0.1:6379>ping ##测试能否正常存储数据
PONG
127.0.0.1:6379> exit
[root@host50 utils]# redis-cli
127.0.0.1:6379> set name bob 存数据
OK
127.0.0.1:6379> get name 读数据
"bob"
127.0.0.1:6379> quit
现在时写在内存的,但他会定期将内存数据写入硬盘
[root@host50 utils]# ls /var/lib/redis/6379/ ###数据库目录文件
dump.rdb
[root@host50 utils]#
– Set keyname keyvalue // 存储
– get keyname // 获取ls
– Select 数据库编号 0-15 // 切换库
– Keys * // 打印所以变量
– Keys a? // 打印指定变量
– Exits keyname // 测试是否存在
– ttl keyname // 查看生存时间 (-1表示永不过期,-2表示已过期)
– type keyname // 查看类型
– move keyname dbname // 移动变量
– expire keyname 10 // 设置有效时间
– del keyname // 删除变量
– flushall // 删除所有变量
– save // 保存变量
– shutdown // 关闭服务
[root@host50 6379]# redis-cli
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> select 0
OKpho
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> keys a? 一个问号代表一个字符
(empty list or set)
127.0.0.1:6379> keys n?
(empty list or set)
127.0.0.1:6379> keys n???
1) "name"
127.0.0.1:6379> del name 删除 返回值为1 表示删除成功
(integer) 1
flushall 清空所有
一 配置 php 支持 Redis
[root@host50 html]# php -m | grep mysql 检查php支持mysql
mysql
mysqli
pdo_mysql
[root@host50 html]# php -m | grep redis 同上
1)• 安装 php 扩展
#yum -y install autoconf
#yum -y install automake
[root@host50 ~]# rpm -ivh php-devel-5.4.16-42.el7.x86_64.rpm
[root@host50 ~]# cd phpredis-2.2.4/
[root@host50 phpredis-2.2.4]# ls
arrays.markdown debian php_redis.h redis_session.c
common.h debian.control README.markdown redis_session.h
config.h library.c redis_array.c rpm
config.m4 library.h redis_array.h serialize.list
config.w32 mkdeb-apache2.sh redis_array_impl.c tests
COPYING mkdeb.sh redis_array_impl.h
CREDITS package.xml redis.c
[root@host50 phpredis-2.2.4]# which phpize
/usr/bin/phpize
[root@host50 phpredis-2.2.4]# phpize ###这个命令就是输出当前源码配置信息
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
[root@host50 phpredis-2.2.4]# ls /usr/bin/php-config 同时生成这个文件
# ./configure --with-php-config=/usr/bin/php-config
# make
[root@host50 phpredis-2.2.4]# make install
Installing shared extensions: /usr/lib64/php/modules/共享文件夹
[root@host50 phpredis-2.2.4]# ls /usr/lib64/php/modules/
curl.so json.so mysql.so pdo.so phar.so sqlite3.so
fileinfo.so mysqli.so pdo_mysql.so pdo_sqlite.so redis.so zip.so
redis.so就是redis连接php模块
2)修改php配置文件定义模块名和目录
[root@host50 phpredis-2.2.4]# vim /etc/php.ini
726 ; Directory in which the loadable extensions (modules) reside.
727 ; http://php.net/extension-dir
728 extension_dir = "/usr/lib64/php/modules" ####
729 ; On windows:
730 extension = "redis.so" ####值修改这两行
731
[root@host50 phpredis-2.2.4]# systemctl restart php-fpm
查看是否支持模块
[root@host50 phpredis-2.2.4]# php -m | grep redis
redis
[root@host50 phpredis-2.2.4]#
编写测试文件
[root@bogon bin]# cat
/usr/local/nginx/html/redis.php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->set('redistest','666666');
echo $redis->get('redistest');
?>
[root@host50 phpredis-2.2.4]# redis-cli
127.0.0.1:6379> get redistest
"666666"
127.0.0.1:6379>
修改redis配置文件参数
12 # 1k => 1000 bytes
13 # 1kb => 1024 bytes
14 # 1m => 1000000 bytes
15 # 1mb => 1024*1024 bytes
16 # 1g => 1000000000 bytes
17 # 1gb => 1024*1024*1024 bytes
18 #
19 # units are case insensitive so 1GB 1Gb 1gB are all the sam
69 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70 bind 192.168.4.50 跟多个ip用空格隔开
71
93 port 6350 修改默认端口
[root@host50 phpredis-2.2.4]# redis-cli -h 192.168.4.50 -p 6350
192.168.4.50:6350> exit
修改端口或者ip后 重启后不能再用/etc/init.d/redis_6379脚本停止,因为ip变了
[root@host50 phpredis-2.2.4]# redis-cli -h 192.168.4.50 -p 6350 shutdown
停止只能这样 脚本能启动不能停止 或者把这条停止命令写入脚本
[root@host50 phpredis-2.2.4]# /etc/init.d/redis_6379 status
cat: /var/run/redis_6379.pid: 没有那个文件或目录
Redis is running ()
修改脚本让改ip和端口后还能用脚本停
[root@host50 phpredis-2.2.4]# vim /etc/init.d/redis_6379
8 REDISPORT="6350"
43 $CLIEXEC -h 192.168.4.50 -p $REDISPORT shutdown
常用配置选项
– port 6379 // 端口
– bind 127.0.0.1 //IP 地址
– tcp-backlog 511 //tcp 连接总数
– timeout 0 // 连接超时时间
– tcp-keepalive 300 // 长连接时间
– daemonize yes // 守护进程方式运行 /
– databases 16 // 数据库个数
– logfile /var/log/redis_6379.log //pid 文件
– maxclients 10000 // 并发连接数量
– dir /var/lib/redis/6379 // 数据库目录
内存管理
• 内存清除策略
– volatile-lru 最近最少使用 (针对设置了过期时间的 ke
y )
– allkeys-lru 删除最少使用的 key
– volatile-random 在设置了过期的 key 里随机移除
– allkeys-random 随机移除 key
– volatile-ttl (minor TTL) 移除最近过期的 key
– noeviction
不删除 写满时报错
内存管理(续 1 )
• 选项默认设置
– maxmemory
– maxmemory-policy noeviction // 定义使用的策略
– maxmemory-samples 5 // 选取模板数据的个数
(针对 lru 和 ttl 策略)
设置连接密码
500 #
501 requirepass 123456 密码
502
503 # Command renaming.
504 #
[root@host50 phpredis-2.2.4]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host50 phpredis-2.2.4]# ss -nuplt | grep 6350
tcp LISTEN 0 128 192.168.4.50:6350 *:* users:(("redis-server",pid=22763,fd=6))
[root@host50 phpredis-2.2.4]# redis-cli -h 192.168.4.50 -p 6350 shutdown
(error) NOAUTH Authentication required.
[root@host50 phpredis-2.2.4]# redis-cli -h 192.168.4.50 -p 6350
192.168.4.50:6350> ping
(error) NOAUTH Authentication required.
192.168.4.50:6350> auth 123456 ####登陆后再数密码
OK
192.168.4.50:6350> ping
PONG
192.168.4.50:6350> exit
[root@host50 phpredis-2.2.4]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> ping #####登陆时输入密码
PONG
有密码后停服务:
[root@host50 phpredis-2.2.4]# redis-cli -h 192.168.4.50 -p 6350 -a 123456 shutdown
把密码写入停止
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -h 192.168.4.50 -p $REDISPORT -a 123456 shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
Port : 6379
Config file : /etc/redis/6379.conf 主配置文件
Log file : /var/log/redis_6379.log 日志
Data dir : /var/lib/redis/6379 数据存储目录
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
/etc/init.d/redis-6379 启动脚本
[root@host57 utils]# scp 192.168.4.50:/root/1.txt /root
在57主机上拷贝50主机文件 把4.50/root/1.txt 拷贝到57/root下