redis Q&A

redis 是什么?

  • 基于内存
  • 有客户端和服务器端
  • NoSQL非关系型数据库

redis 应用场景是什么?

  • 缓存
  • 队列
  • 数据持久存储

redis 如何安装?如何启动?如何关闭?客户端如何启动?

  • 下载、解压、编译、安装

wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar -xzvf redis-4.0.1.tar.gz
cd redis-4.0.1
make
cd src
make install PREFIX=/usr/local/redisphp

  • redis 服务启动

cd /usr/local/redis/bin
./redis-server
注意这种方式启动redis 使用的是默认配置git

经过启动参数告诉redis使用指定配置文件使用下面命令启动
./redis-server redis.confgithub

  • redis 服务关闭

cd /usr/local/redis/bin
./redis-cli shutdown
./redis-cli -h 127.0.0.1 -p 6379 shutdown #指定端口和主机redis

  • redis 客户端启动

cd /usr/local/redis/bin
./redis-cli
退出客户端 : quit数据库

如何建立一个Shell脚原本管理redis服务?如何让redis服务能自启动?

  • 建立Shell脚本开启、关闭、重启redis服务
REDIS_SERVER="/usr/local/redis/bin/redis-server"
REDIS_CONF="/usr/local/redis/etc/redis.conf"
REDIS_CLIENT="/usr/local/redis/bin/redis-cli"

start()
{
  $REDIS_SERVER $REDIS_CONF
}

stop()
{
  $REDIS_CLIENT shutdown
}

restart()
{
  stop
  start
}

case "$1" in
  'start')
     start;;
  'stop')
     stop;;
  'restart')
     restart;;
  *)
     echo 'nothing to do';;
esac
  • 添加服务做为自启动

如何调整 redis.conf 配置?

  • 设置为后台启动: daemonize yes

五种经常使用数据结构

  • String

key-value结构,key是字符串,value可存储 字符串整数浮点数数组

  • List

key-value结构,可是value是个数组,里面存储的值能够重复,但有序缓存

  • Hash

key-value结构,可是value是个数组,里面存储的值也是key-value结构,key是惟一的安全

图片描述

  • Set

key-value结构,与List很类似,value也是个数组,里面存储的值不能重复,但无序服务器

  • Sorted set

key-value结构,可是value是个数组,里面存储的值是score-value-rank结构,rank是隐藏值(由redis自动维护),value是惟一的,只能够修改score数据结构

图片描述

PHP如何安装redis扩展?

  • 下载 phpredis 插件

wget https://codeload.github.com/phpredis/phpredis/tar.gz/3.1.4

  • 使用phpize工具生成configure文件

php安装目录/bin/phpize

  • 生成Makefile文件

./configure --with-php-config=/usr/local/php/bin/php-config

  • 编译并安装

make && make install

  • php.ini中加载redis.so文件

extension = redis.so

使用 phpredis 扩展如何操做 redis ?

注意phpredis的类都是在根命名空间下,因此使用phpredis类时,尽可能在开头加/

  • 链接
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
  • 操做String
$redis -> set('key1', 'val1');
$val = $redis -> get('key1'); // 'val1'
$redis -> set('key1', 12);
$redis -> incr('key1', 2);
$val = $redis -> get('key1'); // '14'
  • 操做List
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('list1');

$redis -> lPush('list1', 'a');
$redis -> lPush('list1', 'b');
$redis -> lPush('list1', 'c');

$val = $redis -> rPop('list1');
  • 操做Set
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('set1');

$redis -> sAdd('set1', 'a');
$redis -> sAdd('set1', 'b');
$redis -> sAdd('set1', 'c');
$redis -> sAdd('set1', 'c');

$len = $redis -> sCard('set1');
var_dump($len);  //int(3)

$arr = $redis -> sMembers('set1');
var_dump($arr); //无序的索引数组
  • 操做Hash
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('person1');

$redis -> hSet('person1', 'name', 'mingming');
$redis -> hSet('person1', 'age', 42);
$redis -> hSet('person1', 'gender', 1);

$name = $redis -> hGet('person1', 'name');
var_dump($name);  //string(8) 'mingming'

$arr = $redis -> hMGet('person1', array('name','age'));
var_dump($arr);  //关联数组
  • 操做sort set
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('zset1');

$redis -> zAdd('zset1', 100, 'mingming');
$redis -> zAdd('zset1', 90, 'xiaohong');
$redis -> zAdd('zset1', 98, 'xiaoming');

$val = $redis -> zRange('zset1', 0, -1);  //低到高
$val = $redis -> zRevRange('zset1', 0, -1);  //高到低
##输出的$val是索引数组

redis 数据持久化

因为redis是基于内存来存储数据的,因此redis一旦重启或者系统崩溃,内存中的数据就会丢失,为了保证数据安全,因此须要把数据持久化存储到硬盘
若是仅仅当作缓存来使用,能够禁用redis持久化功能

  • redis提供两种持久化方法
一、快照持久化(默认开启,无需配置):数据安全性低,性能好
二、AOF持久化(须要配置):数据安全性高,性能差
  • 快照持久化适用场景

只使用于那些即便丢失一部分数据也不会形成问题的应用程序

  • AOF持久化适用场景

用于对数据安全性要求高的应用程序

  • AOF持久化三种同步策略
appendfsync always 每次写操做就进行同步(安全性最高)
appendfsync everysec 每秒执行一次同步(推荐)
appendfsync no 操做系统决定什么时候同步
相关文章
相关标签/搜索