您的位置:首页 > 数据库 > Redis

20150325--Redis-02

2016-05-08 21:40 323 查看

4、sets类型及操作

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

(2)smembers 获取集合中内容,语法:smembers 集合名称 (3)srem 删除名称为key的set中的元素.

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

(5)sdiff 返回所有给定key与第一个key的差集。

(6)sdiffstore 返回所有给定key与第一个key的差集,并将结果存为另一个key。 语法:sdiffstore 新的集合 集合1 集合2

(7)sinter 返回所有给定key的交集.

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

(9)sunion 返回所有给定key的并集

(10)sunionstore 返回所有给定key的并集。

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

(12)scard 返回名称为key的set的元素个数。

(11)sismember 测试member是否是名称为 key的set的元素

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

5、sorted sets类型及操作

sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中的key理解为zset的名字。 (1)zadd 向名称为key的zset中添加元素。如果该元素存在,则更新其顺序。 语法:zadd 集合名 序号 内容

(2)zrange 获取有序集合中的内容

(3)zrem 删除名称为key的zset中的元素member。

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

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

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

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

(8)zrangebyscore 返回集合中score在给定区间的元素

(9)zcount 返回集合中score在给定区间的数量。

(10)zcard 返回集合中元素的个数

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

(12)zremrangebyscore 删除集合中score在给定区间的元素。

6、redis常用命令

redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在linux终端使用。 1、键值相关的命令 (1)keys 返回满足给定参数的所有key 用表达式*,代表取出所有的key

(2)exists 确认一个key是否存在。

(3)expire 设置一个key的过期时间

(4)move: 将当前数据库中的key转移到其它数据库中。

(5)persist 移除给定key的过期时间

(6)randomkey 随机返回key空间的一个key

(7)rename 重命名key

(8)type:返回值的类型

2、服务器相关命令 (1)select 选择数据库。redis数据库编号从0-15,我们可以选择任意一个数据库来进行数据的存取。 当选择16时,报错,说明没有编号为16的这个数据库。

(2)quit 退出连接

(3)dbsize 返回当前数据库中key的数目

(4)info 获取服务器的信息和统计。

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

(6)flushdb 删除当前选择数据库中的所有key

(7)flushall 删除所有数据库中的所有的 key

六、安全性(设置密码)

设置客户端连接后进行任何其他操作前需要使用的密码。 注意:因为 redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。 方法:打开配置文件redis.conf, 语法: requirepass 设置的密码 requirepass guangzhou

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

第二种:在客户端登录时,执行验证, redis-cli -a 输入设置的密码

七、持久化的方式:

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 #后台存储错误停止写。 rdbcompressionyes #使用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

注意点: 两种备份方式可以同时使用,而且推荐这么做。 恢复时,rdb和aof哪个恢复的块。 rdb快,因为rdb数据是内存的映射,直接载入到内存,而aof是命令,需要逐条执行。

八、php支持redis

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

2、把扩展拷贝到php的安装目录下面的ext目录下面。 3、打开php.ini文件,配置加载扩展,(重启apache) 4、通过phpinfo函数进行测试。

入门案例使用:

九、案例:

用户注册 用户登录 用户的删除和修改 分页显示用户 添加用户的好友 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 添加好友页面,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: