第2讲 Redis常用命令与高级应用
2015-11-30 16:10
776 查看
目录 一、redis数据类型 5. sorted sets类型和操作 二、Redis常用命令 1、键值相关命令 2、服务器相关命令 三、 redis高级应用 1、 给redis服务器设置密码 2、持久化 3、主从备份
一、redis数据类型
5. sorted sets类型和操作
sorted set是set的一个升级版本,它给集合中每个元素都定义一个分数,集合中的元素按照其分数排序。
1) zadd 键 分数1 值1 [分数2 值2…]
该命令添加指定的成员到key对应的有序集合中,每个成员都有一个分数。你可以指定多个分数/成员组合。如果一个指定的成员已经在对应的有序集合中了,那么其分数就会被更新成最新的,并且该成员会重新调整到正确的位置,以确保集合有序。分数的值必须是一个表示数字的字符串,并且可以是double类型的浮点数。
127.0.0.1:6379>zadd zset1 1 lm 2 sc 3 glf (integer) 3 127.0.0.1:6379>zadd zset1 1 ymj (integer) 1
2) zrange 集合 起始下标 截止下标 [withscores]
返回有序集合中,指定区间内的成员。其中成员按照score(分数)值从小到大排序。具有相同score值的成员按照字典顺序来排列。
起始下标与截止下标和list类型一致: 0代表队列中第一个元素,1代表第二个元素,依次类推 -1代表队列中最后一个元素,-2代表倒数第二个元素 withscores:返回集合中元素的同时,返回其分数(score)
127.0.0.1:6379>zrange zset1 0 -1 withscores 1) "lm" 2) "1" 3) "ymj" 4) "1" 5) "sc" 6) "2" 7) "glf" 8) "3"
3) zrevrange 集合 起始下标 截止下标 [withscores]
返回有序集合中,指定区间的成员。其成员按照score从大到小来排列。
127.0.0.1:6379>zrevrange zset1 0 -1 withscores 1) "glf" //下标为0 2) "3" 3) "sc" //下标为1 4) "2" 5) "ymj" //下标为2 6) "1" 7) "lm" //下标为3 8) "1" 127.0.0.1:6379>zrevrange zset1 1 2 withscores //查看集合中下标是1-2的值 1) "sc" 2) "2" 3) "ymj" 4) "1"
4) zrangebyscore 集合 起始分数 截止分数 withscores(不包含截止分数)
返回有序集合中score(分数)在指定区间的值
127.0.0.1:6379>zadd zset2 1 one 2 two 3 three 4 four (integer) 4 127.0.0.1:6379>zrange zset2 0 -1 withscores //按照下标区间返回值 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "four" 8) "4" 127.0.0.1:6379>zrangebyscore zset2 2 3 withscores //按照分数区间返回值 1) "two" 2) "2" 3) "three" 4) "3"
5) zrem 集合 值1 [值2…]
删除有序集合中指定的值
127.0.0.1:6379>zrem zset1 lm (integer) 1 127.0.0.1:6379>zrange zset1 0 -1 withscores 1) "ymj" 2) "1" 3) "sc" 4) "2" 5) "glf" 6) "3"
6) zincrby 集合 增量 值
给有序集合中指定值的成员的分数(score)值加上增量(increment)。如果集合中没有这个值,则给添加一个分数是increment的值。
127.0.0.1:6379>zincrby zset1 2 ymj //如果值存在,则在其分数上加增量 "3" 127.0.0.1:6379>zrange zset1 0 -1 withscores 1) "sc" 2) "2" 3) "glf" 4) "3" 5) "ymj" 6) "3" 127.0.0.1:6379>zincrby zset1 4 bro //如果值不存在,则加入值。并指定分数为增"4" 量 127.0.0.1:6379>zrange zset1 0 -1 withscores 1) "sc" 2) "2" 3) "glf" 4) "3" 5) "ymj" 6) "3" 7) "bro" 8) "4"
7) zrank 集合 值
返回有序集合中指定值的下标。
127.0.0.1:6379>zrank zset1 sc (integer) 0 127.0.0.1:6379>zrank zset1 ymj (integer) 2
8) zrevrank 集合 值
返回有序集合中指定值的下标
127.0.0.1:6379>zrange zset1 0 -1 withscores 1) "sc" 2) "2" 3) "glf" 4) "3" 5) "ymj" 6) "3" 7) "bro" 8) "4" 127.0.0.1:6379>zrevrank zset1 ymj (integer) 1 127.0.0.1:6379>zrevrank zset1 sc (integer) 3
9) zcount 集合 起始分数 截止分数
返回有序集合中,score值在起始分数与截止分数之间的个数
127.0.0.1:6379>zrange zset2 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "four" 8) "4" 127.0.0.1:6379>zcount zset2 2 4 (integer) 3
10) zcard 集合
返回有序集合元素的个数
127.0.0.1:6379>zcard zset2 (integer) 4
11) zremrangebyrank 集合 起始下标 结束下标
删除有序集合中,下标在指定区间的元素
127.0.0.1:6379>zrange zset2 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "four" 8) "4" 127.0.0.1:6379> ZREMRANGEBYRANK zset2 0 1 (integer) 2 127.0.0.1:6379>zrange zset2 0 -1 withscores 1) "three" 2) "3" 3) "four" 4) "4"
12) zremrangebyscore 集合 起始分数 截止分数
删除有序集合中,分数在指定区间的元素
127.0.0.1:6379>zrange zset1 0 -1 withscores 1) "sc" 2) "2" 3) "glf" 4) "3" 5) "ymj" 6) "3" 7) "bro" 8) "4" 127.0.0.1:6379> ZREMRANGEBYSCORE zset1 2 3 (integer) 3 127.0.0.1:6379>zrange zset1 0 -1 withscores 1) "bro" 2) "4"
13)zinterstore 新集合 取交集的集合个数 集合1 集合2
取集合1和集合2的交集,并把结果保存到新集合中。在计算交集之前,需要指定计算交集的集合的个数。交集中,值的分数是多个集合中分数的和。
127.0.0.1:6379>zadd zset1 1 one 2 two 3 three 4 four (integer) 4 127.0.0.1:6379>zaddzset2 2 two 3 three 4 four 5 five (integer) 4 127.0.0.1:6379> ZINTERSTORE zset3 2 zset1 zset2 //有两个集合计算交集,所以集合个数是2 (integer) 3 127.0.0.1:6379> ZRANGE zset3 0 -1 withscores 1) "two" 2) "4" //分数是两个集合中two值的分数和 3) "three" 4) "6" 5) "four" 6) "8"
14) zunionstore 新集合 取并集的集合个数 集合1 集合2
取集合1和集合2的并集,并把结果保存到新集合中。在计算并集之前,需要指定计算并集的集合的个数。并集中,值的分数是多个集合中分数的和。
127.0.0.1:6379>zadd zset1 1 one 2 two 3 three 4 four (integer) 4 127.0.0.1:6379>zaddzset2 2 two 3 three 4 four 5 five (integer) 4 127.0.0.1:6379> ZUNIONSTORE zset4 2 zset1 zset2 (integer) 5 127.0.0.1:6379> ZRANGE zset4 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "4" 5) "five" 6) "5" 7) "three" 8) "6" 9) "four" 10) "8"
二、Redis常用命令
(一) 键值相关命令
1、 keys 键名按照键名查找指定的键。支持通配符
127.0.0.1:6379> set hello 1 OK 127.0.0.1:6379> set hallo 1 OK 127.0.0.1:6379> set heeeello 1 OK 127.0.0.1:6379> keys h?llo 1) "hallo" 2) "hello" 127.0.0.1:6379> keys h*llo 1) "hallo" 2) "heeeello" 3) "hello"
2、 exists 键名
确认一个键是否存在
127.0.0.1:6379> EXISTS name (integer) 1 //name键存在 127.0.0.1:6379> EXISTS age (integer) 0 //age键不存在
3、 del 键名
删除一个键
127.0.0.1:6379>del hello (integer) 1 127.0.0.1:6379> EXISTS hello (integer) 0
4、 expire 键 秒
设置一个键的过期时间,如果键已经过期,将会被自动删除
127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> EXPIRE age 20 (integer) 1 127.0.0.1:6379>ttl age (integer) 18 127.0.0.1:6379>ttl age (integer) -2 127.0.0.1:6379> EXISTS age (integer) 0
5、 ttl 键
以秒为单位,返回键的剩余生存时间。
当键不存在时,返回值为-2
当键存在,但没有设置剩余生存时间时,返回-1
127.0.0.1:6379>ttl name (integer) -1
6、 select 数据库号
选择一个数据库。
默认连接的数据库是0,可以支持共16个数据库。
在配置文件中,通过databases 16 关键字定义
127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]>
7、 move 键 数据库号
将当前数据库的键移动到指定的数据空中
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> move age 1
(integer) 1
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> get age
"18"
8、 randomkey
从当前数据库返回一个随机的键。如果当前库没有任何键,则返回nil
9、 rename 旧名 新名
重命名键
127.0.0.1:6379> rename name name_new OK 127.0.0.1:6379> get name_new "sc"
10、 type 键
返回键类型。
返回值
none (key不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
(二) 服务器相关命令
1、 ping测试服务器是否可以连接
127.0.0.1:6379> ping PONG //连接正常 127.0.0.1:6379> ping Could not connect to Redis at 127.0.0.1:6379: Connection refused //redis被停止,连接拒绝
2、 echo 字符串
在命令行输出字符串
127.0.0.1:6379> echo "test message" "test message"
3、 quit
退出redis数据库
4、 save
保存所有的数据。很少在生产环境直接使用SAVE 命令,因为它会阻塞所有的客户端的请求,可以使用
BGSAVE命令代替. 如果在
BGSAVE命令的保存数据的子进程发生错误的时,用
SAVE命令保存最新的数据是最后的手段
5、 dbsize
返回当前库中键的数量
127.0.0.1:6379>dbsize (integer) 6
6、 info
获取服务器的详细信息
7、 config get 参数
获取redis服务器配置文件中的参数。支持通配符
127.0.0.1:6379>config get * //查询配置文件中所有的参数 1) "dbfilename" 2) "dump.rdb" 45) "port" 46) "6379" 99) "save" 100) "900 1 300 10 60 10000"
8、 flushdb
删除当前数据库中所有的数据
127.0.0.1:6379>dbsize (integer) 6
127.0.0.1:6379>flushdb
OK
127.0.0.1:6379>dbsize
(integer) 0
9、 flushall
删除所有数据库中所有的数据
三、 redis高级应用
1、 给redis服务器设置密码
1)修改redis服务器的配置文件[root@localhostredis]# vi /usr/local/redis/etc/redis.conf # requirepass foobared (大概391行) #找到这句话,requirepass后面就是登录redis的密码,改为自定义密码 requirepass flzx_3QC
2)重启redis
[root@localhostredis]# pkill redis [root@localhostredis]#/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
3)连接redis
[root@localhostredis]# /usr/local/redis/bin/redis-cli 127.0.0.1:6379> keys * //可以正常连接redis (error) NOAUTH Authentication required. //但因为没有密码,提示操作拒绝 127.0.0.1:6379>auth flzx_3QC //利用auth命令输入密码 OK 127.0.0.1:6379> keys * //才可以正常使用 1) "name"
或
[root@localhostredis]# /usr/local/redis/bin/redis-cli -a flzx_3QC #在登录的同时指定密码 #注意历史命令中会明文保存此密码 127.0.0.1:6379> keys * 1) "name"
2、持久化
Redis 提供了不同级别的持久化方式:1)RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。这种持久化方式被称为快照 snapshotting(快照)。
save 900 1 #900秒内,最少有1个键被改动。则自动保存一次数据集 save 300 10 #300秒内,最少有10个键被改动。则自动保存一次数据集 save 60 10000 #60秒内,最少有10000个键被改动。则自动保存一次数据集
实验:验证dump.rdb数据保存文件
[root@localhost ~]# ls anaconda-ks.cfg dump.rdb install.log install.log .syslog #root目录下有dump.rdb文件 [root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf #在root目录中启动redis [root@localhost ~]# /usr/local/redis/bin/redis-cli 127.0.0.1:6379>auth 123 OK 127.0.0.1:6379> keys * 1) "name2" 2) "name" 3) "name1" #0库中有键 [root@localhost ~]# cd /usr/local/redis/ [root@localhostredis]# pkill -9 redis [root@localhostredis]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf #在/usr/local/redis/库中重启redis [root@localhostredis]# ls [root@localhostredis]# /usr/local/redis/bin/redis-cli 127.0.0.1:6379> keys * (empty list or set) #0库中没有键 127.0.0.1:6379> save OK #保存 127.0.0.1:6379> quit [root@localhostredis]# ls bin dump.rdbetc #在redis目录中也生成dump.rdb文件
结论:
[root@localhostredis]# vi /usr/local/redis/etc/redis.conf dir ./ #定义了dump.rdb数据库文件保存在当前位置。所以每次重启redis服务的所在位置不同,导致生成新的dump.rdb文件 #将数据库保存目录写为绝对路径(注意只能是目录) dir /usr/local/redis/
2) 使用AOF 会让你的Redis更加耐久: 你可以使用不同的持久化策略:无备份,每秒备份,每次写的时候备份。使用默认的每秒备份策略,Redis的性能依然很好(备份是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据。
appendonly no #默认不使用AOF持久化(450行) appendonly yes #开启AOF持久化 # appendfsync always #有写操作,就马上写入磁盘。效率最慢,最安全 appendfsync everysec #默认,每秒钟写入磁盘一次。 # appendfsync no #不进行AOF备份,将数据交给操作系统处理。最快,最不安全
3、主从备份
Redis主从复制特点:a. Master可以拥有多个slave
b. 多个slave可以连接同一个master外,还可以连接到其它slave
c. 主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
d. 提高系统的伸缩性
Redis主从复制过程:
a. Slave与master建立连接,发送sync同步命令
b. Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。
c. 后台完成保存后,就将此文件发送给slave
d. Slave将此文件保存到硬盘上
1) 不同服务器配置主从
A)克隆一台linux作为从服务器 克隆机需要进行如下操作: ① vi /etc/sysconfig/network-scripts/ifcfg-eth0 删除MAC地址行 ② rm -rf /etc/udev/rules.d/70-persistent-net.rules 删除网卡和MAC地址绑定文件 ③ 注意关闭防火墙和SELinux ④ 重启动系统 B)在从服务器上配置
[root@localhost ~]# vi /usr/local/redis/etc/redis.conf # slaveof<masterip><masterport> #把此句开启,并指定主服务器ip和端口 (196行) masterauth flzx_3QC #设定主服务器密码
C)重启从服务器上redis
2) 同一台服务器实现主从配置
这里我们以本机配置 1台Master + 1台Slave 为例子,其中:
Master IP:127.0.0.1 PORT:6379 Slave1 IP:127.0.0.1 PORT:63791
A) 复制出从服务器目录
[root@localhost ~]# cp -r /usr/local/redis/ /usr/local/redis-slave1
B) 修改redis-slave1配置文件
[root@localhost ~]# vi /usr/local/redis-slave1/etc/redis.conf pidfile /usr/local/redis-slave1/redis.pid #指定pid文件 port 63791 #指定端口号 dir /usr/local/redis-slave1/ #指定服务器目录 slaveof 127.0.0.1 6379 #指定主服务器IP和端口 masterauth flzx_3QC #指定主服务器密码
C) 启动服务
/usr/local/redis-slave1/bin/redis-server /usr/local/redis-slave1/etc/redis.conf #启动从服务器,并调用从服务器配置文件 [root@localhost ~]# netstat -tlun tcp0 0 :::6379 :::* LISTEN tcp 0 0 :::63791 :::* LISTEN #验证两个端口是否都启动
D)验证
[root@localhost ~]# /usr/local/redis/bin/redis-cli -a flzx_3QC #启动主服务器,并建立一个键 127.0.0.1:6379> set bb 234 OK 127.0.0.1:6379> keys * 1) "sex" 2) "aa" 3) "name" 4) "age" 5) "bb" [root@localhost ~]# /usr/local/redis-slave1/bin/redis-cli -a flzx_3QC -p 63791 #启动从服务器,发现键已经同步 127.0.0.1:63791> keys * 1) "aa" 2) "sex" 3) "age" 4) "name" 5) "bb"
参考资料:
1.Redis http://redis.io
2.Redis中文官方网站 http://www.redis.cn
3.Redis 教程 | 菜鸟教程 http://www.runoob.com/redis/redis-tutorial.html
相关文章推荐
- 第1讲 Redis部署与基本操作
- PHP中使用redis执行lua脚本示例
- redis安装
- 利用未授权的redis写webshell
- redis下载
- redis 定义
- redis过期时间
- Redis简明教程-要点
- centos6上redis搭建配置
- Redis Mass Insertion
- redis实现发布/订阅
- 【redis】常见JedisConnectionException异常分析
- CentOS7配置redis开机启动
- Centos下给php安装Redis扩展及编译问题解决
- Redis 起步
- python操作redis
- Redis利用swap文件将数据从内存转移到磁盘
- Redis是一个磁盘备份内存型数据库
- 漫谈应用缓存的命中率问题
- 一种基于“哨兵”的分布式缓存设计