第2讲 Redis常用命令与高级应用
目录
一、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
第2讲 Redis常用命令与高级应用的更多相关文章
- Redis常用命令与高级应用
		附: 127.0.0.1:6379> set xiaofei 小飞 OK 127.0.0.1:6379> get xiaofei "\xe5\xb0\x8f\xe9\xa3\x9 ... 
- 【redis】05Redis的常用命令及高级应用
		Redis常用命令 Redis提供了非常丰富的命令,对数据库和个中数据类型进行操作, 这些命令呢,可以在Linux终端使用. 分为两大类的命令,一种是键值相关的命令,一种是服务器相关的命令, ... 
- Redis快速起步及Redis常用命令大全
		本系列教程内容提要 Java工程师之Redis实战系列教程教程是一个学习教程,是关于Java工程师的Redis知识的实战系列教程,本系列教程均以解决特定问题为目标,使用Redis快速解决在实际生产中的 ... 
- Redis常用命令
		Redis常用命令Redis提供了丰富的命令对数据库和各种数据类型进行操作,这些命令可以再Linux终端使用.1.键值相关命令2.服务器相关命令 一.键值相关命令 1.get get 键值 当 key ... 
- linux 学习3  第四讲 文件常用命令
		好几天没有在网上总结了.我把ppt先誊写在本子上,这样听的时候记录就方便很多,添些东西就可以. 我想先看shell那部分,但是没有之前几章的准备,是没法跟着视频动手操作的.所以还是按部就班得学习. 虽 ... 
- Redis常用命令手册:服务器相关命令
		Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用.在编程时,比如各类语言包,这些命令都有对应的方法.下面将Redis提供的命令做一 ... 
- redis redis常用命令及内存分析总结(附RedisClient工具简介
		redis常用命令及内存分析总结(附RedisClient工具简介 by:授客 QQ:1033553122 redis-cli工具 查看帮助 连接redis数据库 常用命令 exists key se ... 
- redis配置密码 redis常用命令
		redis配置密码 1.通过配置文件进行配置yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 [plain] view plain copy #requi ... 
- redis常用命令及持久化机制
		redis 常用命令 查找redis服务文件 find / -name redis-server 查找配置文件 find / -name redis.conf 启动服务时候,要指定配置文件 启动r ... 
随机推荐
- checkbox、全选反选,获取值
			<input id="Chk_All" onclick="CheckAll()" type="checkbox" /> < ... 
- centos安装lamp环境
			通过yum安装,需要联网且为su账号 yum -y install httpd php mysql mysql-server php-mysql 设置开启启动mysql,httpd /sbin ... 
- 让C++程序打印自身源码
			本人原创文章,欢迎阅读,禁止转载. 这绝对是惊艳到让你眼前一亮(为了简洁,故意没考虑资源问题和编译警告). #include <iostream> #include <fstream ... 
- Nessus导入Cookie进行Web应用安全扫描
			在不导入Cookie使用Nessus进行扫描的时候,扫描的结果是比较简单的,很多深层的问题无法被扫描出来. 需要我们手动导入Cookie,带着Cookie的状态扫描的结果会更详细更深入,以下是操作步骤 ... 
- IOCP入门
			完成端口(Completion Port)详解 此文讲解最好,也很全面一下其他文章看看就行,也可不看. 单句柄数据,单IO数据 此文讲述比较清晰,可以辅助理解上文. IOCP编程之基本原理:http: ... 
- React Ntive 学习手记
			React使今年来比较热门的前端库,之所以说是库呢,因为React.js是应用于MVC中的V层, 它并不是一个完整的MVC框架,所以,我也不知称之为框架了. 不过这并不影响React的火热. 混合应用 ... 
- Excel公式设置单元格颜色
			Excel2010 “条件格式"-"新建规则"-"使用公式确定要设置格式的单元格" 公式如下: =OR(H2<=-20%,H2>=20%, ... 
- C#的对象赋值
			例如 Class A { int x = 0; int y = 0; } public void test() { A test1 = new A( ); ... 
- lua里面求int数组的union,diff,inter,distinct 方法实现
			--利用lua中的table是哈希表这一点进行计算 function lua_distinct_union (union_t1,union_t2) if(union_t2==nil) then uni ... 
- 后台设置gridview不换行
			GridView1.Style.Add("word-break", "keep-all"); GridView1.Style.Add(&q ... 
