听雷哥浅谈Redis
Linux下安装redis
1、下载源码,解压缩后编译源码。
$ wget http://download.redis.io/releases/redis-2.8.3.tar.gz
$ tar xzf redis-2.8.3.tar.gz
$ cd redis-2.8.3
$ make make install
2、编译完成后,在Src目录下,有四个可执行文件redis-server、redis-benchmark、redis-cli和redis.conf。然后拷贝到一个目录下。
mkdir /usr/redis
cp redis-server /usr/redis
cp redis-benchmark /usr/redis
cp redis-cli /usr/redis
cp redis.conf /usr/redis
cd /usr/redis
3、启动Redis服务。
$ redis-server redis.conf
4、然后用客户端测试一下是否启动成功。
$ redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
redis操作
string数据类型
set name zhilei
get name
setnx #如果key不存在则设置,如果存在,则返回0
setex name 10 zhilei #声明一个变量,且加上超时时间
set email wangzhilei@jd.com #对于这个声明好的变量进行部分内容进行更改
setrange email 3 wulong@jd.com
get email
wangwulongok@jd.com
mset name zhilei age 10 #批量的赋值
msetnx #批量设置,如果有一个key存在的话,则返回0
mget name age #批量的取值
incr age #让一个值递增1
incrby age 10 #让一个值递增固定的值
decr age #让一个值递减
decrby age 100 #让一个值递减固定的值
getset name yinchao #重新给一个变量赋值,但是返回原来的变量的值
getrange email 0 6 #返回一个字符串的部分内容
append name aa #给一个key加入相关的内容
strlen name #获取一个key的值的长度
hashes 类型
hset #设置
hsetnx #如果不存在的话,则设置
hget #获取
hmset #批量赋值
hmget #批量获取
hlen #显示字段的个数
hincrby #递增
hexists #判断hashed key是否存在 如果存在的话,则返回1,如果不存在的话,则返回0
hkeys #返回hashed下面所有的字段
hvals #返回hashes对象下面所有的值
hgetall #key val 一起获取
hdel #删除hash对象下面某个key的某个字段
list类型
栈存入
lpush list1 zhilei 10 #向栈里面加入两个值
lrange list1 0 -1 #取这个栈内的数据
队列存入
rpush
Linsert list1 before “one” “two” #插入
Lset #将一个值修改
Lrem #删除队列中几个相内的内容
Ltrim #删除非指定key范围内的值 ,其它的都删除
Lpop #从list从头弹出一个元素
Rpop #从尾部弹出
Rpoplpush #将一个链表的尾部的元素弹出,赋给第二个链表的头部
Lindex #按索引来取值
Sets与zset类型 (集合数据类型) 注意:集合内部不能有重复的值
特点:无序
方法
Sadd name zhilei #给name集合设置值
Smembers name #取name集全下面所有的值
Srem name zhieli #删除name集合下面的zhilei
Spop name #随机的弹出一个值,(删除弹出的值)
Sdiff set1 set2 #两个集合的差集
Sdiffstore set3 set1 set2 #将前两个集合差集存到set3中
Sinter set1 set2 #取两个集合的交集
Sinterstore set1 set2 set3 #将后面的两个集合的交集存话到set1中
Sunion set1 set2 #取两个集合的并集
Sunionstore set3 set1 set2 #两set1 set2两个并集到set3中
Smove set1 set2 name #将第一个集合内的一个值放到set2中
Scard #查看集合内元素的个数
Sismember set1 one #判断一个元素是否为一个集合的元素
Srandmember set1 #随机取一个元素,但不删除元素
有序集合 stored sets
Zadd #添加元素 例:Zadd class 1 one
Zrange class 0 -1 withscores #取值(withscores将排行号给取出来 )
Zrem class one #删除一个元素,返回1的话 则代表删除成功
Zincrby #给指定的顺序增加 例子:zincrby zsets 3 one 将集合zsets 中元素one的排序加上3
Zrank #按score排序列从小到大排序 ,并返回一个元素的索引 这个是按score的升序来排序
Zrevrank #按排序列从大到小排序 ,并返回一个元素的索引 这个是按score的降序来排序
Zrevrange #倒序,然后取索引范围 withscores 加上排序值 也就是说这个是按索引来倒过来排序
Zrangebyscore #按排序范围值来取
Zcount #返回区间内空的个数 也是按score来取个数
Zcard #返回集合中所有的元素的个数
Zremrangebyrank set1 0 1 #按索引来删除
Zremrangebyscore #set 0 2 #按排序来删除
Redis常用命令
Keys * 输出所有的键
Exists #判断一个键是否存在
Del #删除一个键
Expire #设置一个键的过期时间
Ttl #查看一个key的过期时间
Move age 1 #将一个数据库的key age 剪切到1数据库
Persist age #取消过期
Randomkey #随机返回一个key
Rename #给一个key重命名
Type #返回key的数据类型
服务器相关的命令
Ping
Echo
Select 0-15 共15个数据库
Quit 或者是 exit
Dbsize #返回当前数据中key总量
Info #获取服务器的信息
Config get #实时传储收到请求
Flushdb #删除当前数据库所有库
Flushall #删除所有数据库的所有key
Redis高级应用
- 1. 安全性
- 2. 主从复制
- 3. 事务处理
- 4. 持久化机制
- 5. 发布订单消息
- 6. 虚拟内存的使用
安全性:
在配置文件中 修改requirepass 后面直接是redis密码
Auth passwd 来登录进去 或者是登录时候 用 -a 密码
主从复制:
- 在从机配置slaveof
- 配置masterauth
- 判断哪个是主 哪个是从只要命令info
Redis事务处理
Multi
中间是事务的内容
如果想回滚discard
Exec
乐观锁
用watch来监控一个key,并执行事务,这个时候,如果有另外的一个session来改变这个key值,则这个key版本的值已经不是最新的了,这样的话,则事务则不会执行成功
相当于svn 与givhub 如果服务器上面的版本为4 如果将上传的版本改为3,则不能上传成功,必须为4以上的版本
例:
Session1:
127.0.0.1:6379> get name
"aaaaaa"
127.0.0.1:6379> WATCH name
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name zongbin
QUEUED
127.0.0.1:6379> exec
(nil)
Session 2:
Set name newword
Redis持久化机制
两种方式:
Snapshotting 快照 相当于mysqldump
Append-only file 缩写aof的方式 给操作进行备份 相当于mysql中的bin-log日志
消息发布与订阅
Session1发布如下Publish message1 hello
Session2 订阅如下Subscribe message
虚拟内存 2.6之后就弃用了
php-redis扩展安装方法
PHP 使用 Redis
安装
开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动:下载地址为:https://github.com/phpredis/phpredis/releases。
PHP安装redis扩展
以下操作需要在下载的 phpredis 目录中完成:
$ wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz
$ cd phpredis-2.2.7 # 进入 phpredis 目录
$ /usr/local/php/bin/phpize # php安装后的路径
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make && make install
如果你是 PHP7 版本,则需要下载指定分支:
git clone -b php7 https://github.com/phpredis/phpredis.git
修改php.ini文件
vi /usr/local/php/lib/php.ini
增加如下内容:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20090626"
extension=redis.so
安装完成后重启php-fpm 或 apache。查看phpinfo信息,就能看到redis扩展。
PHP 使用 Redis
连接到 redis 服务
<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//查看服务是否运行
echo "Server is running: " . $redis->ping();
?>
执行脚本,输出结果为:
Connection to server sucessfully
Server is running: PONG
Redis PHP String(字符串) 实例
<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//设置 redis 字符串数据
$redis->set("tutorial-name", "Redis tutorial");
// 获取存储的数据并输出
echo "Stored string in redis:: " . $redis->get("tutorial-name");
?>
执行脚本,输出结果为:
Connection to server sucessfully
Stored string in redis:: Redis tutorial
Redis PHP List(列表) 实例
<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//存储数据到列表中
$redis->lpush("tutorial-list", "Redis");
$redis->lpush("tutorial-list", "Mongodb");
$redis->lpush("tutorial-list", "Mysql");
// 获取存储的数据并输出
$arList = $redis->lrange("tutorial-list", 0 ,5);
echo "Stored string in redis";
print_r($arList);
?>
执行脚本,输出结果为:
Connection to server sucessfully
Stored string in redis
Redis
Mongodb
Mysql
Redis PHP Keys 实例
<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
// 获取数据并输出
$arList = $redis->keys("*");
echo "Stored keys in redis:: ";
print_r($arList);
?>
执行脚本,输出结果为:
Connection to server sucessfully
Stored string in redis::
tutorial-name
tutorial-list