什么是Redis
Redis是一个内存高速缓存数据库,可持久化。
缓存:
- 数据缓存
- 页面缓存
默认:
- 端口:6379
Redis安装
1、解压redis
tar zxvf redis-x.x.x.tar.gz
2、编译redis
cd redis-x.x.x
make
3、拷贝文件
cd src
cp redis.conf /usr/local/redis
mkdir /usr/local/redis
cp redis-cli redis-server /usr/local/redis
Redis脚本文件
- redis-cli 终端操作脚本
- redis-server 启动服务脚本
- redis-benchmark 压力测试
- redis-check-aof / redis-check-dump 备份检测
启动Redis
vi redis.conf
# 打开redis的配置文件
# 修改 136 daemonize yes
# daemonize表示是否后台启动
./redis-server redis.conf
# 守护启动redis
简单使用Redis
./redis-cli
# 启动终端控制
set <变量> <值>
# 存储值
get <变量>
# 读取值
命名规则
key
除了回车与空格都可以,长度不做要求。
常用Redis命令
- exists <key> 查询key是否存在
- type <key> 查询key的类型
- keys <key | *> 返回匹配的key的列表
- del <key> 删除key
- rename <old> <new> 更改key的名称
- dbsize 返回当前数据库的key的数量
- expire <key> <seconds> 设置key的有效时间(s)
- ttl <key> 返回当前key的剩余时间(s)
- select <dbindex> 选择当前的数据库(默认:0号数据库)设置最大数据库可以在redis.conf下的databases来修改
- move <key> <dbindex> 将key移动到指定的数据库
- flushdb 删除当前数据库的所有key
- flushall 删除所有数据库的所有key
Redis的基本类型
String
字符串类型
操作
set <key> <value>
#设置key
get <key>
#取key的值
mset <key> <value> [<key2> <value2> ..]
#设置多个key
mget <key> [<key2> ..]
#取多个key
incr <key>
#对key的值+1,并返回
decr <key>
#对key的值-1,并返回
incrby <key> <n>
#对key的值加n
decrby <key> <n>
#对key的值减n
append <key> <value>
#对key的值连接一个value
substr <key> <start> <end>
#对key的值进行截取操作
List
就是一个双向链表
操作
lpush <key> <value>
#向key的最左边添加一个元素
rpush <key> <value>
#向key的最右边添加一个元素
rpop <key>
#删除key的最右边的一个元素
lpop <key>
#删除key的最左边的一个元素
lrange <key> <start> <end>
#提取从左边开始将key中start的位置到end的位置的元素
llen <key>
#返回链表的长度
ltrim <key> <start> <end>
#保留链表key中start到end元素
Set
set是string类型的无序集合。
最大包含2^32 -1个元素。
操作
sadd <key> <string>
#为key集合添加一个元素string
sinter <key> <key>
#求两个集合的交集
sunion <key> <key>
#求两个集合的并集
sdiff <key1> <key2>
#求key1-key2的差集
srem <key> <string>
#移除指定的元素
smove <key1> <key2> <string>
#从key1中删除string,并在key2中增加这个string
scard <key>
#返回key中元素的个数
sismember <key> <string>
#返回string元素是否存在与key中
smembers <key>
#无序显示key中的所有元素
SortSet
排序集合。
数据结构
(w,i)i:id w:权
操作
zadd <key> <w> <id>
#插入一个id与他的权值
zrem <key> <id>
#删除key中的id
zremrangebyrank <key> <min> <max>
#先从小到大排序,然后删除min到max的元素
zrevrange <key> <start> <end>
#降序显示key中从start到end范围的数据
zrange <key> <start> <end>
#同上,升序显示
zincrby <key> <incr> <id>
#按指定的incr对id对应的w进行增加
zrank <key> <id>
#先从小到大排序,然后返回id对应的下标
zrevrank <key> <id>
#同上,从大到小
zcard <key>
#返回元素的个数
zscore <key> <id>
#返回id 的w值
hash
哈希数据类型,与mysql中的一条记录很像
操作
hset <key> <field> <value>
#设置key中field的value值
hget <key> <field>
#读取key中field的值
hmset <key> <field1> <value1> ....
#设置多个field
hmset <key> <field1> <field2>
#读取多个
hincrby <key> <field> <integer>
#增加值
hexists <key> <field>
#检测field是否存在
hdel <key> <field>
#删除指定的field
hlen <key> <field>
#返回field的个数
hkeys key
#返回hash的所有field
hvals key
#返回所有的value
hgetall key
#返回所有的field与value
持久化
将内存中的数据保存到硬盘里就叫做持久化。
snap shotting 快照持久化
默认开启,一次性全部保存到硬盘。
文件:dump.rdb
保存频率
save 900 1 #15分 有1个修改就保存一次
save 300 10 #5分 有10个修改就保存一次
save 60 10000 #1分 有10000次修改就保存一次
手动快照
redis-cli bgsave
append only file AOF持久化
又称精细持久化,每秒保存一次,但只保存规定时间的数据。
保存原理是对用户的写指令进行保存。
默认关闭。
开启AOF持久化(会清空redis内部的数据)
配置
appendonly yes
执行命令
ps -A |grep redis
kill -9 <进程号>
频率
默认1s一次
AOF优化
redis-cli bgrewriteaof
#优化压缩
关闭服务并保存
redis-cli shutdown
主从模式
主Redis负责写入
从Redis负责读出
配置
第一步:打开redis.conf
第二步:修改slaveof ip port
设置主人服务的ip与端口
PHP扩展Redis
安装PHP的Redis扩展
文件:
- autoconf
- phpredis
安装:
第一步:安装autoconf
./configure && make && make install
第二步:配置phpredis
./configure --with-php-config=/usr/local/local/php/bin/php-config
第三步:安装phpredis
make && make install
第四步:打开php/lib/pbp.ini
修改 extension=redis.so
PHP中使用redis
类:Redis
$redis = new Redis();
//实例化redis
$redis->connect('ip',port);
//连接redis服务器
$redis->select(5);
//选择第5个数据库
$redis->set(key,value);
//存储一个key的
$redis->get(key);
//读取一个key