redis持久化机制:
1)rdb:是默认开启的是内存快照,可修改redis.conf的appendonly no 改为yes,就成为aof持久化机制。rdb每次进行快照时就会记录整个数据项,所以rdb在恢复数据的速度上快,极大的优化的redis的效率。缺点:rdb做不到实时存储(如果快照化一次,之后又添加数据,做不到实时持久化方案),所以有了aof
2)aof:(每秒存储) 存储着对redis的操作命令,进行aof日志存储。重启时在执行aof文件中的命令,进行数据恢复。
redis4.0 可在aof-use-rdb-preamble;混合开启rdb和aof共用。
一:redis的string数据结构
命令窗口如下:
Connected.
本地测试:0>set a 1 //添加 key为a value为1
"OK"
本地测试:0>get a //获取value
"1"
本地测试:0>incr a //key为a的 value自增
"2"
本地测试:0>decr a //key为a的 value自减
"1"
本地测试:0>expire a 5 //设置 key a 的失效时间5s
"1"
本地测试:0>get a //key失效
null
本地测试:0>incrby a 9 //value增加9
"9"
本地测试:0>get a
"9"
本地测试:0>exists a //判断a的key是否存在 1 存在 0 不存在
"1"
本地测试:0>exists b
"0"
本地测试:0>keys a* //模糊查询
1) "a"
本地测试:0>
适用场景:微博文章点赞数,粉丝数量、存储用户信息、 key value存储
项目整合:整合redis string类型工具类,请看本篇。。。。。。。。。。。。。。。
二:redis的list列表数据结构
list命令:
本地测试:0>lpush as 1 2 3 4 5 //存入列表数据 as key键 rpush右侧添加列元素
"5"
本地测试:0>lrange as 0 -1 //获取key中数据 0 -1 获取全部
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
本地测试:0>lindex as 1//通过下标获取元素
"4"
本地测试:0>lindex as "1"//通过值获取下标
"4"
本地测试:0>linsert as before "5" "7" //添加元素7在5 之前
"6"
本地测试:0>llen as //获取key的存的value的数量
"6"
本地测试:0>lpop as //移除列表头,并返回移除的值 rpop移除右表头
"7"
本地测试:0>lpushx as 10 //左侧列表表头添加数据,如果key不存在,添加失败,与push不同 rpushx右侧添加命令
"6"
本地测试:0>lrem as -1 2 //移除 列末元素2 -1指末端
"1"
本地测试:0>lset as 0 "你好" //有key修改可成功
"OK"
本地测试:0>exists as //判断是否有key 五种数据类型通用
"1"
使用场景:堆栈先进后出或后进先出业务场景
三:redis的hash数据结构
命令如下:
本地测试:0>hset hash qw s //添加 hash中的key qw value s 如果存才key 修改value值
"1"
本地测试:0>hgetall hash //获取hash中所用key和value
1) "qw"
2) "d"
3) "ew"
4) "uu"
本地测试:0>hdel hash qw //移除hash中keyqw
"1"
本地测试:0>hexists hash a //判断hash中的key a是否存在
"1"
本地测试:0>hget hash a //获取hash中key a 的value值
"d"
本地测试:0>hkeys hash '//获取hash中所有的key
1) "a"
2) "b"
本地测试:0>hlen hash //获取hash中有多少的key
"2"
本地测试:0>hmget hash a b //批量获取value
1) "10"
2) "0"
本地测试:0>hmset hash c 1 d 2 //批量插入元素
"OK"
本地测试:0>hsetnx hash nosql e //如果不存在key nosql 新建一条 。存在就修改
"1"
本地测试:0>hvals hash //获取所用value值
1) "10"
2) "0"
3) "1"
4) "2"
5) "e"
本地测试:0>
使用场景:存储用户信息,可直接获取,(不用想string类型要遍历)但用hash速度不太好
四:redis的set数据结构(无序,不可重复)
本地测试:0>sadd set 12 //添加set集合 元素
"1"
本地测试:0>sadd set 13
"1"
本地测试:0>sadd set 12 //添加set集合相同元素添加不成功
"0"
本地测试:0>scard set //返回集合中元素的基数(大小)
"2"
本地测试:0>sinter set sdf //返回这个集合的所有成员
1) "12"
本地测试:0>sinterstore store set sdf //两个集合的交集放在新集合中store
"1"
本地测试:0>sismember set 12 //判断元素是否在集合中
"1"
本地测试:0>smembers set //返回集合中所有元素
1) "12"
2) "13"
本地测试:0>smove set mset 12 //将12移动到set集合中
"1"
本地测试:0>spop set //弹出集合的随机数并移除
"13"
本地测试:0>srandmember mset //返回集合中的随机数
"12"
本地测试:0>srem mset 12 //移除集合中的12
"1"
本地测试:0>sunion sdf add //两个集合的并集
1) "12"
本地测试:0>sunionstore sff sdf store //两个集合的并集并存入新集合
"1"
使用场景:中奖用户存储(不循序一个用户多次中奖。) 交集 并集
五:redis的zset数据类型(有序的set,)
本地测试:0>ZADD page_rank 10 google.com //添加 zset 的集合 其中10 是 score 用于保持有序
"1"
本地测试:0>ZADD page_rank 10 google.com //相同的value不能添加成功
"0"
本地测试:0>zcard page_rank //返回key中value的基数
"3"
本地测试:0>zcount pa 12 13 //在min与max中的数量
"2"
本地测试:0>zrange pa 0 -1 //返回pa中的key
1) "ni"
本地测试:0>zscore pa ni //返回pa集合中key的value值
"12"
本地测试:0>zincrby pa 2000 ni // score中添加2000 相当于增加多少分
"2012"
本地测试:0>zrangebyscore pa 0 60000 //按照 score 从小到大排序(0 60000)
1) "goog"
2) "ni"
本地测试:0>zrank pa ni //从小到大 key ni 的排名 排名以0为底
"1"
本地测试:0>zrank pa goog
"0"
本地测试:0>zrange pa 0 -1 withscores //返回集合中的key 和value注意(withscores显示value)
1) "goog"
2) "13"
3) "so"
4) "14"
5) "ni"
本地测试:0>zrange pa 0 -1 withscores //按照score从小到大
1) "goog"
2) "13"
3) "so"
4) "14"
5) "ni"
6) "15"
本地测试:0>zrem pa ni //移除集合中key
"1"
本地测试:0>zremrangebyrank pa 0 1 //移除集合中的 0 1(0 1指的是下标)排名 的key
"2"
本地测试:0>zremrangebyscore b 12 14 //移除集合中的 12 14(12 14指的是分数)排名 的key
"3"
本地测试:0>zrevrange b 0 -1 withscores //按照score从大到小
1) "safd"
2) "18"
3) "saf"
4) "17"
5) "sa"
6) "16"
7) "ff"
8) "15"
本地测试:0>zrange b 0 -1 withscores
1) "ff"
2) "15"
3) "sa"
4) "16"
5) "saf"
6) "17"
7) "safd"
8) "18"
本地测试:0>ZREVRANGEBYSCORE b +inf -inf //逆序排列所有成员 +inf -inf
1) "safd"
2) "saf"
3) "sa"
4) "ff"
本地测试:0>zrevrank b ff //从小到大 ff的排名
"3"
本地测试:0>zscore b ff //返回集合中 ff 的value值
"15"
本地测试:0>zunionstore sala 2 b a weights 1 3 //b a 集合的并集存入新集合 weights 是乘法因子 //3 指的是score的三倍 。相同的key指 score相加
"5"
本地测试:0>zrange sala 0 -1 withscores
1) "ff"
2) "15"
3) "sa"
4) "16"
5) "saf"
6) "17"
7) "safd"
8) "18"
9) "1"
10) "30"
本地测试:0>zinterstore sofe 2 a sala //集合的交集存入新集合
"1"
使用场景:zset是有序的集合。用score因子排序。可进行交集并集。
1)可用于分数的统计,
2)也可用于权重,然后工作线程挑选权重重要的先进行。