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机制的方法
- 在redis.config文件中用:/aof找到对应的段落
- 将appendonly no改成appendonly yes
- 再修改其中一段成appendfsync always即可