资讯专栏INFORMATION COLUMN

redis Q&A

saucxs / 643人阅读

摘要:是什么基于内存有客户端和服务器端非关系型数据库应用场景是什么缓存队列数据持久存储如何安装如何启动如何关闭客户端如何启动下载解压编译安装服务启动注意这种方式启动使用的是默认配置通过启动参数告诉使用指定配置文件使用下面命令启动服务关

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/redis

redis 服务启动

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

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

redis 服务关闭

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

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提供两种持久化方法

1、快照持久化(默认开启,无需配置):数据安全性低,性能好
2、AOF持久化(需要配置):数据安全性高,性能差

快照持久化适用场景

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

AOF持久化适用场景

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

AOF持久化三种同步策略

appendfsync always 每次写操作就进行同步(安全性最高)
appendfsync everysec 每秒执行一次同步(推荐)
appendfsync no 操作系统决定何时同步

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25580.html

相关文章

  • 大型网站性能监测、分析与优化常见问题Q&A

    摘要:后端和移动性能优化需要的时间较长,出成果较慢。大型网站上,一般通过什么方式监控性能的用户端主要是真机监测监测,都属于真实用户监测。目前主要有以下两种类型,,最终用户性能监测。,,真实用户性能监测。 showImg(https://segmentfault.com/img/bVAbWm);@tanwen110 (唐文),曾负责腾讯四大平台之一网络媒体平台的整体运维、运营规划工作;曾任百度...

    Lavender 评论0 收藏0

发表评论

0条评论

saucxs

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<