Redis
简介
1.一个通过 内存 存取数据的key-value数据库
2.常用的是它的链表与集合的数据结构
3.当然除了redis,我们平时的应用离不开它与Mysql的结合,
先存入mysql再存入redis
主要功能
用来提速,因为内存读取比硬盘读取 速度要快很多
字符串 string
特点:简洁,常用于存用户信息
常用操作方法
key-value数据库设计
常用方式,类比Mysql数据库设计,表名>字段名>字段值
示例一:user表,里面的字段有username,uid,password 带有$表示php中的变量
先定一个自增变量 $uid=$r->incr("uid");
Key Value 备注
user:uid:$uid:username $username 根据用户uid查名字
user:uid:$uid:password $password 根据用户uid查密码
user:$username $uid 根据用户名查密码
场景:已知用户名$username,密码$password,查帐号密码是否正确
步骤一,
$uid=$r->get("user:$username");
步骤二:其中*表示匹配任意多个字符
$find_key = $r->keys("user:uid:$uid*");
if(empty($find_key)){
echo "帐号或者密码错误";//帐号不存在
}else{
$nameMix="user:".$uid.":username";
$pwdMix= "user:".$uid.":pwd" ;
$get_user_info=array(
$nameMix,
$pwdMix
);
$find=$r->mget($get_user_info);
if($name == $find[0] && $pwd == $find[1]){
echo "欢迎您,$username!";
}else{
echo "帐号或者密码错误";
}
链表 list
特点:常用来做消息推送
这里的消息推送是指,判断是否发送成功,系统成功接收到消息,就返回确认信息给发送端
然后就把推送的过程留给服务器,在后台进行。[推送可以用到优先级,关注越早(可以通过zsort实现),越优先]
常用队列解决优先级的问题,例如
lpush可以形成一个从左往右的队列
rpush可以使得一个新的数据插入队列的顶部,用于解决进程优先级的问题
注意:队列一般不给予定点删除功能,比如新浪微博,你取消关注后,它依然
集合 set
特点:交集、并集、差集、不重复,可以通过sort排序
1)粉丝粉主关系
2)防止事件重复
哈希 hash
特点:类似于二维数组的存取
排序集 zset
特点:排序方便,如果熟练set方法的排序,这个就不用研究了
常用操作
目前我做了一个小案列关于具体操作的,微博逻辑大概就是这个样子
链接:http://pan.baidu.com/s/1slMSrqH 密码:9u5b
更新时间 2016年8月2日 23:48:06
这里讲php中常用方法
初始的时候定义静态变量 $r
$r = new Redis();
$r->connect("127.0.0.1",“6379”);
//如果有密码
//$r->auth("密码");
$r->select(1);
如果是查询的string型,模糊查找user:uid: uid的数据,查找user:uid: uid:age的各自年龄
$find_array=$r->keys("user:uid:*");
$count=count($find_array);//找到到的个数
for($i=0 ; $i < $count ; $i++){
$keyMix[$i]="user:uid:$find_array[$i]:age";
}
$result_array=$r->mget($find_array);
print_r($result_array);
其他类型的常用尝试
Redis的AOF
进入redis的安装后的配置文件redis.conf
vim /usr/local/redis/etc/redis.conf
0)设置AOF类型,这里设置精准持久化(每次数据变更都会自动备份,当数据量大的时候换类型)
appendfsync everysec
1)你应该会看到
save 900 1
save 300 10
save 60 10000
比如,第一行,表示900秒内,如果超过1个key被修改,就发起快照保存
后两行同理,这三行表示三种方案,不同情况不同处理
2)你应该会看到
备份的数据名称
dbfilename dump.rdb
备份数据的路径
dir /usr/local/redis/var
3)如果你是在本地输入的数据,想将dump.rdb文件弄到服务器上
此间要求:本地的redis版本,不能高于服务器版本的redis,否则dump.rdb不能被读取
主从配置
为了防止意外发生,请各个服务器统一redis版本!!!
1) 开放服务器对应的redis端口
iptables -A INPUT -p tcp --dport 6379 -j ACCEPT
service iptables save
2) 进入redis的安装后的配置文件redis.conf
vim /usr/local/redis/etc/redis.conf
3) 找到# requirepass foobared这行下面添加密码,比如设为hlz
# requirepass foobared
# 配置该服务器密码
requirepass hlz
4) 配置主服务器(master)
主服务器(115.159.56.128:6379)
配置步骤3)中的密码
设置slave权限:一般情况=>从服务器=>只读,不可写
slave-read-only yes
从服务器
在redis.conf中,找到
# slaveof <masterip> <masterport> # 示例如下,填写对应的主服务器的ip与端口 slaveof 115.159.56.128 6379
- 再在redis.conf中,找到
# masterauth
# 输入主服务器的密码
masterauth hlz
现在就完成主从配置了。
关于主从配置的分布式使用,我们可以用一致哈希算法
http://blog.csdn.net/cywosp/article/details/23397179/
待更新
解决跨域请求
待有空时,再更新
后续:建议相关
我建议在windows下,因为编译器更强大,
Windows下安装redis环境讲解
http://blog.csdn.net/myboyli/article/details/52082050
Linux下安装redis环境讲解
待更新
php操作redis的函数总结
http://blog.csdn.net/myboyli/article/details/52090452