第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"
时间: 2024-10-26 05:45:30

第2讲 Redis常用命令与高级应用的相关文章

redis常用命令小结_Redis

1.redis-benchmark redis基准信息,redis服务器性能检测 redis-benchmark -h localhost -p 6379 -c 100 -n 100000 100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能 [root@Architect redis-1.2.6]# redis-benchmark -h localhost -p 6379 -c 100 -n 100000 ====== PING ====

redis常用命令、常见错误、配置技巧等分享_Redis

1. redis查看当前所有的key 复制代码 代码如下: KEYS * 2. 查看当前redis的配置信息 复制代码 代码如下: CONFIG GET * 3. MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis

Redis常用命令入门——列表类型(一级二级缓存技术)

获取列表片段 redis 127.0.0.1:6379> LRANGE KEY_NAME START END lrange命令比较常用,返回从start到stop的所有元素的列表,start和stop都是从0开始. (1)查询所有(获取全部列表):LRANGE KEY_NAME 0 -1 1.41.88.9:63789[1]> LRANGE myList2 0 -1 1) "b" 2) "e" 3) "g" 4) "b&qu

Redis——常用命令操作

 一,启动   Centos6       进入到redis安装目录: cd redis-2.8.17     进入src目录: cd src     启动server:  ./redis-server    使用配置文件启动: ./redis-serverredis.conf      Ubuntu 启动server:redis-server 启动客户端:redis-cli    Windows   redis-cli.exe-h 127.0.0.1 -p 6379 二,使用命令对Redis基

05_NoSQL数据库之Redis数据库:Redis的常用命令,键值相关命令和服务器相关命令

 Redis常用命令 Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以再Linux终端使用.   键值相关命令: Keys:返回满足给定pattern的所有key 用表达式*表示取出所有的key 127.0.0.1:6379> keys * 1) "age" 2) "name" 3) "age2" 127.0.0.1:6379> keys a* 1) "age" 2) "age

Redis集合类型的常用命令小结_Redis

集合类型介绍 集合类型也是体现redis一个比较高价值的一个类型了.因为Redis的集合类型,所以我们可以很容易的在Redis中执行差集运算.交集运算.并集运算. 首先我们先介绍一下集合类型和列表类型的区别,其实学过面向对象的语言的同学应该都能猜到这些类型有什么不同.      ①集合类型和列表类型还是都能存储2^32-1个字符串      ②集合类型是无序的,列表类型是有序的      ③集合类型是唯一的,列表类型的值是不唯一的 下面我们一起来看一下语法. 1.增加删除元素命令 sadd ke

Redis字符串类型的常用命令小结_Redis

Redis字符串类型 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的Value最多可以容纳的数据长度是512M. 一.最简单的命令 1.获得符合规则的键名列表 keys * 这里的*号,是指列出所有的键,同时*号也可以替换成其他支持glob风格通配符格式,具体规则如下:      ?:匹配一个字符      *:匹配任意个(包括0个)字符      []

Redis中散列类型的常用命令小结_Redis

Redis散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,也就是说,散列类型不能嵌套其他的数据类型.一个散列类型键可以包含至多2^32-1个字段. 除了散列类型,Redis的其他数据类型同样不支持数据类型嵌套.比如集合类型的每个元素只能是字符串,不能是一个集合或者散列表等. 散列类型适合存储对象:使用对象类别和ID构成建名,使用字段表示对象的属性,而字段值存储属性值.例

Linux中常用命令

一.Linux下常用命令:文件与目录操作 basename:从文件名中去掉路径和扩展名 cd:切换当前工作目录到指定目录 chgrp:改变文件所属组 chmod:改变文件的权限 chown:改变文件的所有者和组 cp:复制文件或目录 dd:复制文件并转换文件内容 file:确定文件类型 find:在指定目录下查找文件并执行指定的操作 ln:创建文件链接 locate/slocate:快速定位文件的路径 ls/dir/vdir:显示目录内容 mkdir:创建目录 mv:移动或重命名文件 pwd:显