新人入坑Redis必会的吐血总结(二)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 新人入坑Redis必会的吐血总结(二)

4、Redis-set

赋值

sadd key value[value1 value2...]:向set中添加元素,如果该key的值已有则不会重复添加

example:


127.0.0.1:6379> sadd abc 1 2 3 4
(integer) 4

srem key member[member1 member2...]:删除set中指定的成员

example:


127.0.0.1:6379> srem abc 1 3
(integer) 2
取值

smembers key:获取set中所有的成员

example:

127.0.0.1:6379> smembers abc
1) "2"
2) "4"

sismember key member:判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在(无论集合中有多少元素都可以极速的返回结果)

example:

127.0.0.1:6379> sismember abc 2
(integer) 1
127.0.0.1:6379> sismember abc 3
(integer) 0
删值

集合运算

差集运算

sdiff key1 key2...:返回key1与key2中相差的成员,而且与key的顺序有关,即返回差集

example:

127.0.0.1:6379> sadd set1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd set2 3 4 5 6 7
(integer) 5
127.0.0.1:6379> sdiff set1 set2
1) "1"
2) "2"
127.0.0.1:6379> sdiff set2 set1
1) "6"
2) "7"

交集运算

sinter key1 key2...:返回交集

example:

127.0.0.1:6379> sinter set1 set2
1) "3"
2) "4"
3) "5"

并集运算

sunion key1 key2...:返回并集

example:

127.0.0.1:6379> sunion set1 set2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
扩展命令

scard key:获取set中成员的数量

example:

127.0.0.1:6379> scard set1
(integer) 5

srandmember key:随机返回set中的一个成员

example:

127.0.0.1:6379> srandmember set1
"1"
127.0.0.1:6379> srandmember set1
"5"
127.0.0.1:6379> srandmember set1
"3"

sdiffstore destination key1 key2...:将key1 key2...相差的成员存储在destination上

example:

127.0.0.1:6379> sdiffstore set3 set1 set2
(integer) 2
127.0.0.1:6379> smembers set3
1) "1"
2) "2"

sinterstore destination key[key...]:将返回的交集存储在destination上

example:

127.0.0.1:6379> sinterstore set4 set1 set2
(integer) 3
127.0.0.1:6379> smembers set4
1) "3"
2) "4"
3) "5"

5、Redis-sortedset

赋值

zadd key score member score2 member2...:将所有成员以及该成员的分数存放到sorted-set中。如果该元素已经存在则会用新的分数代替原有的分数,返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

example:

127.0.0.1:6379> zadd list 50 xiaoming 100 xiaohong 200 xiaozhang
(integer) 3
取值

zscore key member:返回指定成员的分数

example:

127.0.0.1:6379> zscore list xiaohong
"100"

zcard key:获取集合中的成员数量

example:

127.0.0.1:6379> zcard list
(integer) 3
范围查询

zrange key start end[withscores]:获取集合中脚标为start-end的成员,[withscores]参数表明返回的成员包含其分数(分数从小到大排序)

example:

127.0.0.1:6379> zrange list 0 -1
1) "xiaoming"
2) "xiaohong"
3) "xiaozhang"
127.0.0.1:6379> zrange list 0 -1 withscores
1) "xiaoming"
2) "50"
3) "xiaohong"
4) "100"
5) "xiaozhang"
6) "200"

zrevrange key start end[withscores]:获取集合中脚标为start-end的成员,[withscores]参数表明返回的成员包含其分数(分数从大到小排序)

example:

127.0.0.1:6379> zrevrange list 0 -1
1) "xiaozhang"
2) "xiaohong"
3) "xiaoming"
127.0.0.1:6379> zrevrange list 0 -1 withscores
1) "xiaozhang"
2) "200"
3) "xiaohong"
4) "100"
5) "xiaoming"
6) "50"
删值

zrem key member[member...]:移除集合中指定的成员,可以指定多个成员

example:

127.0.0.1:6379> zrem list xiaozhang
(integer) 1

zremrangebyrank key start stop:按照排名范围删除元素

example:

127.0.0.1:6379> zremrangebyrank list 0 1
(integer) 2

zremrangebyscore key min max:按照分数范围删除元素

example:

127.0.0.1:6379> zremrangebyscore list 50 120
(integer) 2
扩展命令

zrangebyscore key min max [withscores][LIMIT offset count]:返回分数在[min,max]的成员并按照分数从低到高排序。[withscores]:显示分数;[LIMIT offset count]:offset,表明从脚标为offset的元素开始并返回count个成员

example:

127.0.0.1:6379> zrangebyscore list 50 120 withscores limit 0 2
1) "xiaoming"
2) "50"
3) "xiaohong"
4) "100"

zincrby key increment member:设置指定成员的增加的分数,返回值是更改后的分数

example:

127.0.0.1:6379> zincrby list 30 xiaoming
"80"

zcount key min max:获取分数在[min,max]之间的成员

example:

127.0.0.1:6379> zcount list 80 120
(integer) 2

zrank key member:返回成员在集合中的排名(索引从小到大)

example:

127.0.0.1:6379> zrank list xiaohong
(integer) 1

zrevrank key member:返回成员在集合中的排名。(索引从大到小)

example:

127.0.0.1:6379> zrevrank list xiaozhang
(integer) 0

6、通用Redis命令【重点】

keys pattern:获取所有与pattern匹配的key,返回所有与该key匹配的keys。*表示任意一个或者多个字符

通配符:

  • *表示任意0个或者多个字符
  • ?表示任意一个字符

exits key:判断该key是否存在,1表示存在,0表示不存在

example:

127.0.0.1:6379> exists username
(integer) 1
127.0.0.1:6379> exists admin
(integer) 0

rename key newkey:为当前的key重命名

127.0.0.1:6379> rename username user
OK
127.0.0.1:6379> keys *
 1) "list"
 2) "abc"
 3) "set1"
 4) "information"
 5) "set2"
 6) "age"
 7) "score2"
 8) "set4"
 9) "score1"
10) "set3"
11) "user"

type key:获取指定的key的值类型,该命令将以字符串的格式返回。返回的字符串为string、list、set、hash和zset,

如果key不存在返回none

example:

127.0.0.1:6379> type user
string
127.0.0.1:6379> type list
zset

expire key:设置过期时间,单位:秒 如果某个key过期,redis会将其删除

example:

127.0.0.1:6379> expire abc 10
(integer) 1
127.0.0.1:6379> keys *
 1) "list"
 2) "set1"
 3) "information"
 4) "set2"
 5) "age"
 6) "score2"
 7) "set4"
 8) "score1"
 9) "set3"
10) "user"

ttl key:获取该key所剩的超时时间,如果没有设置超时时间,返回-1.如果返回-2表示超时不存在。

example:

127.0.0.1:6379> expire user 10
(integer) 1
127.0.0.1:6379> ttl user
(integer) 3
127.0.0.1:6379> ttl user
(integer) -2
127.0.0.1:6379> keys *
1) "list"
2) "set1"
3) "information"
4) "set2"
5) "age"
6) "score2"
7) "set4"
8) "score1"
9) "set3"
127.0.0.1:6379> ttl information
(integer) -1

7、Redis其他特性

消息订阅与发布

subscribe channel:订阅频道

example:

127.0.0.1:6379> subscribe mychat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychat"
3) (integer) 1

psubscribe channel*:批量订阅频道

example:

127.0.0.1:6379> psubscribe s*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "s*"
3) (integer) 1

publish channel content:在指定的频道中发布消息

example:

127.0.0.1:6379> publish mychat 'today is a newday'
(integer) 1
多数据库

传统数据库如MySQL数据库可以自己用语句自定义创建,我们可以通过create database xxxx进行创建。Redis 也是有数据库的,不过Redis已经提前创建好了。在redis默认有十六个数据库,0,1,2....15,在radis上所作的所有数据操作,都是默认在0号数据库上操作,数据库与数据库之间是不能共享键值对的。我们可以把Redis数据库理解为一个map集合。

切换数据库

select 数据库名:切换数据库

example:

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 15
OK
127.0.0.1:6379[15]> select 16
(error) ERR DB index is out of range
数据库的移植

move newkey 数据库名:将当前数据库的key移植到指定的数据库中

example:

127.0.0.1:6379> keys *
1) "list"
2) "set1"
3) "information"
4) "set2"
5) "age"
6) "score2"
7) "set4"
8) "score1"
9) "set3"
127.0.0.1:6379> move information 1
(integer) 1
127.0.0.1:6379> keys *
1) "list"
2) "set1"
3) "set2"
4) "age"
5) "score2"
6) "set4"
7) "score1"
8) "set3"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "information"
数据库清空

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

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

服务器命令

ping 测试连接是否存活

example:

127.0.0.1:6379> ping
PONG

echo 在命令行打印一些内容

example:

127.0.0.1:6379> echo hehe
"hehe"

quit/Ctrl+C 退出客户端

example:

127.0.0.1:6379> quit

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

example:

127.0.0.1:6379> dbsize
(integer) 8

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

example:

127.0.0.1:6379> info
# Server
redis_version:4.9.103
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:d727e4f6fe88cefd
redis_mode:standalone
......
......

8、Redis持久化策略

RDB策略

RDB是redis的默认持久化机制,相当于照快照,保存的是一种状态

优点:

  • 快照速度极快,还原数据速度极快
  • 适用于灾难备份

缺点:

  • 小内存机器不适合使用

RDB机制符合要求就会照快照(随时随地启动),会占用一定的系统资源(突然的)很可能内存不足直接宕机。(宕机后,服务器会关闭,属于非正常关闭,数据会丢失)

RDB机制适用于内存比较充裕的计算机

RDB是何时进行照快照?

  • 服务器正常关闭时,会照一次快照
  • key满足一定条件时,会照一次快照
  • save 900 1#每900秒至少有1个key发生变化,则dump内存快照
  • save 300 10#每300秒至少有10个key发生变化,则dump内存快照
  • save 60 10000#每60秒至少有10000个key发生变化,则dump内存快照
AOF策略

AOF策略是一种使用日志功能保存数据操作的机制,默认AOF机制关闭的,它的操作只会保存导致key变化的语句

优点:

  • 持续性占用极少量的内存资源

缺点:

  • 日志文件会特别大,不适用于灾难恢复
  • 恢复效率远远低于RDB

AOF机制适用于内存比较小的计算机

AOF是如何进行数据备份的呢?

  • 每秒同步:每秒进行一次AOF保存数据,安全性低,比较节省系统资源
  • 每修改同步:只要有key变化语句,就进行AOF保存数据,比较安全,但是这样做极为浪费系统资源,降低效率
  • 不同步:不进行任何持久化操作,这种配置不安全

AOF的配置

  • always #每秒有数据修改发生时都会写入AOF文件
  • everysec #每秒同步一次,该策略为AOF的缺省策略
  • no #从不同步。高效但是数据不会被持久化

开启AOF机制的方法

  1. 在redis.config文件中用:/aof找到对应的段落
  2. 将appendonly no改成appendonly yes
  3. 再修改其中一段成appendfsync always即可
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
缓存 监控 NoSQL
Redis高可用总结:Redis主从复制、哨兵集群、脑裂...
在实际的项目中,服务高可用非常重要,如,当Redis作为缓存服务使用时, 缓解数据库的压力,提高数据的访问速度,提高网站的性能 ,但如果使用Redis 是单机模式运行 ,只要一个服务器宕机就不可以提供服务,这样会可能造成服务效率低下,甚至出现其相对应的服务应用不可用。
444 0
Redis高可用总结:Redis主从复制、哨兵集群、脑裂...
|
NoSQL Redis
Redis学习7:按次结算的服务控制、微信会话顺序管理(应用场景总结)
现在数据类型五种基本的已经学完了,现在开始应用一个简单的业务场景。
Redis学习7:按次结算的服务控制、微信会话顺序管理(应用场景总结)
|
存储 SQL NoSQL
新人入坑Redis必会的吐血总结(一)
新人入坑Redis必会的吐血总结
157 0
新人入坑Redis必会的吐血总结(一)
|
存储 缓存 负载均衡
Redis cluster去中心化设计的思考与总结
Redis cluster去中心化设计的思考与总结
224 0
|
缓存 监控 NoSQL
Redis常见面试题总结
Redis常见面试题总结
Redis常见面试题总结
|
数据采集 分布式计算 NoSQL
爬虫识别-爬虫写入 Redis-效果及总结| 学习笔记
快速学习爬虫识别-爬虫写入 Redis-效果及总结
102 0
爬虫识别-爬虫写入 Redis-效果及总结| 学习笔记
|
消息中间件 缓存 NoSQL
【Java】来总结一下Nosql数据库之Redis基础知识点
作为开发的程序员对Redis都应该不陌生,Redis是一个Key-Value键值对数据库,也是一个nosql数据库。 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 有了它可以帮助我们提高系统性能。
116 0
|
存储 缓存 NoSQL
浅浅总结Redis
Redis作为开源数据库,为开发者提供了多种语言的API。而Redis应用在实际开发中已经很常见了,不仅能作为缓存存储数据,也由于其键值对存储数据的形式而可以作为持久化数据存储。接下来我们浅谈一下Redis的集群和缓存。
100 0
浅浅总结Redis
|
存储 缓存 监控
redis总结万能手册,熟悉不等于精通;
日常总结:redis线程模型,多路复用原理;单体,哨兵架构,集群架构的自动化安装,解释说明,集群扩容,缩容,选举,主从自动切换策略,应用程序接入……
223 0
redis总结万能手册,熟悉不等于精通;
|
存储 缓存 NoSQL