20150325--Redis-02

4、sets类型及操作

set是集合,它是string类型的无序集合。set是通过hash table实现的、添加、删除和查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。

(1)sadd

向名称为key 的set中添加元素。

语法:sadd 集合名   元素

wps4C01.tmp

(2)smembers 获取集合中内容,语法:smembers 集合名称

(3)srem

删除名称为key的set中的元素.

wps4C12.tmp

(4)spop

随机返回并删除名称为key的 set中一个元素。

wps4C13.tmp

(5)sdiff

返回所有给定key与第一个key的差集。

wps4C23.tmp

(6)sdiffstore

返回所有给定key与第一个key的差集,并将结果存为另一个key。

语法:sdiffstore 新的集合  集合1   集合2

wps4C34.tmp

(7)sinter

返回所有给定key的交集.

wps4C35.tmp

(8)sinterstore

返回所有给定key的交集,并将结果存为另一个key

wps4C46.tmp

(9)sunion

返回所有给定key的并集

wps4C56.tmp

(10)sunionstore

返回所有给定key的并集。

wps4C67.tmp

(11)smove

从第一个key对应的set中移除member并添加到第二个对应的set中。

wps4C77.tmp

(12)scard

返回名称为key的set的元素个数。

wps4C88.tmp

(11)sismember

测试member是否是名称为 key的set的元素

wps4C89.tmp

(12)srandmember

随机返回名称为key的set的一个元素,但不删除元素

wps4C9A.tmp

5、sorted sets类型及操作

sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中的key理解为zset的名字。

(1)zadd

向名称为key的zset中添加元素。如果该元素存在,则更新其顺序。

语法:zadd 集合名  序号  内容

wps4CAA.tmp

(2)zrange

获取有序集合中的内容

wps4CBB.tmp

(3)zrem

删除名称为key的zset中的元素member。

wps4CCC.tmp

(4)zincrby

如果在名称为key的zset中已经存在元素member,则该元素的score增加increment否则向该集合中添加该元素,其score的值为increment。

wps4CDC.tmp

(5)zrank

返回名称为key的zset中member元素的排名(按score从小到大排序)即下标。

wps4CDD.tmp

(6)zrevrank

返回名称为key的zset中member元素的排名(按score从大到小排序)即下标。

wps4CEE.tmp

(7)zrevrange

返回名称为key的zset(按score从大到小顺序)中的index从start到end的所有元素。

wps4CFE.tmp

(8)zrangebyscore

返回集合中score在给定区间的元素

wps4D0F.tmp

(9)zcount

返回集合中score在给定区间的数量。

wps4D20.tmp

(10)zcard

返回集合中元素的个数

wps4D22.tmp

(11)zremrangebyrank

删除集合中排名在给定区间的元素。

wps4D31.tmp

(12)zremrangebyscore

删除集合中score在给定区间的元素。

wps4D42.tmp

6、redis常用命令

redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在linux终端使用。

1、键值相关的命令

(1)keys

返回满足给定参数的所有key

用表达式*,代表取出所有的key

wps4D53.tmp

(2)exists

确认一个key是否存在。

wps4D54.tmp

(3)expire

设置一个key的过期时间

wps4D64.tmp

(4)move:

将当前数据库中的key转移到其它数据库中。

wps4D75.tmp

(5)persist

移除给定key的过期时间

wps4D76.tmp

(6)randomkey

随机返回key空间的一个key

wps4D86.tmp

(7)rename

重命名key

wps4D87.tmp

(8)type:返回值的类型

wps4D98.tmp

2、服务器相关命令

(1)select

选择数据库。redis数据库编号从0-15,我们可以选择任意一个数据库来进行数据的存取。

当选择16时,报错,说明没有编号为16的这个数据库。

wps4D99.tmp

(2)quit

退出连接

wps4DAA.tmp

(3)dbsize

返回当前数据库中key的数目

wps4DAB.tmp

(4)info

获取服务器的信息和统计。

wps4DBB.tmp

(5)config get

获取参数的配置。

本例中我们获取了dir这个参数配置的值,如果想获取全部参数的配置只需要执行”config get *”即可将全部的值都显示出来

wps4DDC.tmp

(6)flushdb

删除当前选择数据库中的所有key

wps4DDD.tmp

(7)flushall

删除所有数据库中的所有的 key

wps4E0C.tmp

六、安全性(设置密码)

设置客户端连接后进行任何其他操作前需要使用的密码。

注意:因为 redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。

方法:打开配置文件redis.conf,

语法:

requirepass 设置的密码

requirepass guangzhou

wps4E0D.tmp

密码验证方式有两种:

第一种:在客户端登录后,在执行某些操作时,执行auth  输入设置密码

wps4E1E.tmp

第二种:在客户端登录时,执行验证,

redis-cli  -a  输入设置的密码  

wps4E1F.tmp

七、持久化的方式:

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。

redis支持两种持久化方式:

1、snapshotting(快照)默认方式

rdb的工作原理:

每隔N分钟或N次写操作后,

从内存dump数据形成rdb文件,

压缩

放在备份目录

save 900 1    #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。

save 300 10  #必须是300秒之后至少10个键的值发生变化。

save 60 10000 #必须是60秒之后至少10000个键的值发生变化。

(以上3个选项都屏蔽,则rdb禁用)

stop-writes-on-bgsave-error yes    #后台存储错误停止写。

rdbcompression yes    #使用LZF压缩rdb文件。

rdbchecksum yes    #存储和加载rdb文件时校验。

dbfilename dump.rdb    #设置rdb文件名。

dir ./    #设置工作目录,rdb文件会写入该目录。

2、append-only file( 缩写aof)的方式

aof方式

当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。

可以通过配置文件告诉reids我们想要通过fsync函数强制os写入到磁盘的时机。

appendonly  yes //启用 aof 持久化方式

appendfilename appendonly.aof   //保存命令的文件名称

# appendfsync always   //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

appendfsync everysec   //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

# appendfsync no   //完全依赖 os,性能最好,持久化没保证

no-appendfsync-on-rewrite no #重写aof时同步最新数据

aof重写:内存中的数据,逆化成命令,写入到.aof日志里面。以解决aof日志过大过程中。

auto-AOF-rewrite-percentage 100 当前aof文件是上次重写是增加N%时重写

auto-AOF-rewrite-min-size  64mb aof重写至少要达到的大小

64M   =è50M         100M      =è80M(重写后)      

第一次重新完成: 第二次重到100M         第三次重写160M

手动完成重写:bgrewriteaof

wps4E30.tmp

注意点:

两种备份方式可以同时使用,而且推荐这么做。

恢复时,rdb和aof哪个恢复的块。

rdb快,因为rdb数据是内存的映射,直接载入到内存,而aof是命令,需要逐条执行。

八、php支持redis

1、准备扩展文件。扩展文件要和php的版本一致,具体是vc几的,是否是ts的或nts的。

wps4E50.tmp

2、把扩展拷贝到php的安装目录下面的ext目录下面。

3、打开php.ini文件,配置加载扩展,(重启apache)

4、通过phpinfo函数进行测试。

wps4E51.tmp

入门案例使用:

wps4E71.tmp

九、案例:

用户注册     用户登录   用户的删除和修改  分页显示用户   添加用户的好友

register.php用户注册页面,

思考:如何来存储用户的具体信息,使用哈希,构造一个用户键

user:id

index.php 首页面,用于显示用户列表页面。

del.php 用于删除用户,要注意删除  哈希键  ,还要删除链表里面用户的id

login.php:用户登录的页面,

loginok.php处理用户登录的页面:

接收到$username  和 $password  如何验证用户合法呢?

用户的数据是存储到哈希里面,哈希的键user:id

思路:根据用户输入的用户名,获取到用户的id,根据id从哈希里面获取用户的密码,该密码再和用户输入的密码进行比较。

在用户注册时,通过设置一个字符串,该字符串用于存储用户的id.

字符串的键:如何设计:’username:’.$username,$userid

addfield.php  添加好友页面,

原文地址:https://www.cnblogs.com/lifushan/p/5471740.html