Redis的数据结构之set常用命令:
像set中增加元素 sadd myset 1 2 3 不允许重复
srem myset 1 2 删除数据
smember Myset 所有的值
sismember myset a 0不存在 1存在
差集运算 sdiff myset1 myset2
交集运算 sinter mya2 myb2
并集运算 sunion mya2 myb2 去掉重复元素
获得set中值的数量 scard myset
随机返回一个成员 srandmember myset
sdiffstore myset1 myset3 myset4 将3 4 的差集存到1里
sinterstore m2 m3 m4 交集存m2
suionstore my3 ma3 mb3 并集存到my3
Redis的数据结构之Sorted-Set常用命令:
添加元素
zadd sortname score1 value1 score2 value2...:向sortname中添加元素value及元素的分数score,如果value存在,但是value对应的score不一样则进行替换
获得元素
zscore sortname value:返回sortname中value对应的score
zcard sortname:返回sortname中的value个数
删除元素
zrem sortname value1 value2:删除sortname中对应value的元素及分数
zremrangebyrank sortname start end:删除下标在start至end范围内的元素value及value对应的score
zremrangebyscore sortname start end:删除score在start至end范围内的元素value及value对应的score
范围查询
zrange sortname start end:返回sortname中下标在start至end范围内的value,返回value的顺序以value的score进行升序排序
zrange sortname start end withscore:返回sortname中下标在start至end范围内的value及value对应的分数,以value对应的score进行升序排序
zrevrange sortname start end withscores:返回sortname中下标在start至end范围内的value及value对应的score,以value的score进行降序排序
扩展命令
zrangebyscore setname start end withscores:返回成绩在start至end之间的value及value对应的成绩
zrangebyscore setname start end withscores limit num1 num2:返回setname中score在start至end之间的num2-num1个的value及value的score
zincyby setname value setkey:对setname的setkey的score加上value
zcount setname start end:返回setname中score在start至end之间的个数
四、Redis的Keys的通用操作
keys *:查询所有key
keys str? :查询以字符串str开头的key
del key1 key2 key3 ... :删除多个key
exists key:判断key是否存在,存在返回1不存在返回0
rename key newkey :对key进行重命名
expire key times(秒) :设置过期的时间
ttl key:查看key所剩的时间,若没有设置,则返回-1
type key :获取指定key的类型
五、Redis 特性
1、多数据库
一个redis实例可以包含多个数据库,最多可以提供16个数据库,下标是从0到15,通过select number 切换数据库
move set number : 把名称为set的集合移动到数据库number中
2、Redis 事务
multi : 开启开务
exec : 提交事务
discard : 回滚事务
六、Redis 持久化
- RDB持久化(默认支持,不需配置):在指定的时间间隔n内,将数据写入到磁盘中。
- AOF持久化机制:以日志的形式记录 服务器中所有redis操作。redis启动后,会读取日志文件,重新构建redis数据库,保证数据的完整。
- 无持久化。
- 同时使用RDB和AOF。
RDB
优势:
1.数据库只包含一个文件,通过文件备份策略,定期配置,恢复系统灾难
2.压缩文件转移到其他介质上
3.性能最大化,redis开始持久化时,分叉出进程,由子进程完成持久化的工作
,避免服务器进程执行I/O操作,启动效率高
劣势:
1.无法高可用:系统一定在定时持久化之前宕机,数据还没写入,数据已经丢失
2.通过fock分叉子进程完成工作,数据集大的时候,服务器需要停止几百毫秒甚至1秒
配置:
cd /usr/local/redis
vim redis.conf
默认:
save 900 1 #每900秒至少1个key变化,持久化一次,到内存一个快照
save 300 10 #每300秒至少10个key变化,往硬盘写一次
save 60 10000 #每60秒至少10000个key变化,写一次
dbfilename dump.rdb #数据的文件名
dir ./ #保存的路径,redis路径下
AOF
优势:
1.同步:
a.每秒同步:异步完成,效率高,一旦系统宕机,修改的数据丢失
b.每修改同步:同步持久化,每分钟发生的变化记录到磁盘中,效率低,安全
c.不同步
2.日志写入操作追加模式append
a.系统宕机,不影响存在的内容
b.写入一半数据,若系统崩溃,下次启动redis,redis-check-aof工具解决数据一致性
3.如果日志过大,自动重写机制,修改的数据写入到到磁盘文件,创建新文件,记录产生的修改命令,重写切换时,保证数据安全
4.格式清晰的日志文件,完成数据的重建
劣势:
1.对于相同数据文件,相比RDB,AOF文件较大
2.效率低
配置:
vim redis.conf
默认:
appendonly no #AOF方式默认关闭
appendfilename appendonly.aof #配置文件
#appendfsync always #每修改一次,同步到磁盘上
appendsync everysec 每秒同步到磁盘一次
#appensync no 不同步
实践打开AOF:
appendonly yes
appendfsync always
终端2:先断开redis
./bin/redis-cli
shutdown
启动redis:
./bin/redis-server ./redis.conf
终端1:set name 100
终端2:产生appendonly.aof文件
终端1:flushall 清空数据库
终端2:
./bin/redis-cli shutdown
vim appendonly.aof
删除flushall
./bin/redis-server ./redis.conf
./bin/redis-cli
keys *
数据还原