Redis基本数据类型的操作
Keys操作
keys * 列出所有的key
exists k1 判断k1是否存在
move k1 2 将k1移动到2号库
select 2 切换到2号库
select 0
ttl k1 查看k1的过期时间,-1代表永不过期,-2代表已经过期
expire key 秒钟:为key设置过期时间
type key 查看key的类型
String操作
set k1 v1
get k1
del k1
append k1 在key的后面添加字符
strlen k1 查询key的长度
incr k4 将k4增加1
decr k4 将k4减1
incrby k4 5将k4增加5
decrby k4 5 将k4减去5
getrange k1 0 3 获取指定区间范围内的值,类似于between...and,从0到-1表示全部
setrange k1 0 xxx 将从0下标开始的字符替换为xxx
setex k4 10 v4 将k4值设置为v4并且过期时间为10秒
setnx k4 v4 设置k4的值,如果k4不存在才设值
mset k1 v1 k2 v2 k3 v3 设值多个值
mget k1 k2 k3 获取多个值
msetnx
List操作
lpush list01 1 2 3 4 5 以左插入方式
rpush list02 1 2 3 4 5 以右插入方式
lrange list01 0 -1 按原来插入方式返回所有list值
lpop list01 从左边弹出一个值
rpop list01 从右边弹出一个值
lindex list01 index 按照索引下标获得元素
lset list01 index value 按照索引下标设置元素
llen list01 list长度
lrem list03 count value 删除count个value
ltrim list03 start end 截取start到end下标的值给list03
rpoplpush list06 list07 list06弹出一个填入list07中
linsert list01 before value1 value2 在value1前面插入value2
linsert list01 after value1 value2 在value1后面插入value2
Set操作
sadd set01 1 1 2 2 3 4 4 只会插入不重复的值
smembers set01 显示set里面的值
sismember set01 value 判断value是不是set01的元素
scard set01 集合数量
srem set01 value 删除元素
srandmember set01 count 随机取出count个元素
spop set01 [count] 随机弹出元素
smove set01 set02 value 将set01的value值移动到set02中去
sdiff set01 set02 返回差集:在第一个集合但是不在第二个集合中
sinter set01 set02 返回交集:第一个第二个集合共有的
sunion set01 set02 返回并集:第一个第二个并集
Hash操作
hset key filed value 键值对,键为key,值为 key-value类型
hget key filed 取出属性值
hmset user id 11 age 22 hobby football 设置多个键值对
hmget user id age hobby 取出多个属性值
hgetall user 取出所有的属性
hkeys user 取出所有的属性名称
hvals user 取出所有的属性值
hdel user id age 删除属性
hlen user 元素个数
hexists user age 是否存在某个属性
hincrby user age 2
hincrbyfloat user score 0.2
hsetnx
Zset操作
zadd set01 score1 v1 score2 v2 score3 v3
zrange set01 start end [withscores] 展示zset可以带分数
zrevrange set01 0 -1 逆向展示
zrangebyscore set01 startscore endscore [withscores] [limit startindex count] 指定分数段的set集合(表示不包含
zrevrangebyscore ...
zrem set01 v5 删除元素
zcard set01 个数
zcount set01 score1 score2 统计指定分数区间个数
zrank set01 v4 获得v4的小标
zrevrank set01 v4 逆向获得v4的小标
zcore set1 v4 获得指定值的分数
事务
一个队列中,一次性,顺序性,排他性的执行一系列命令
multi 标记一个事务的开始
exec 执行事务
discard 取消事务
watch 标记一个键
unwatch 取消标记一个键
发布订阅
subscribe c1 c2 c3 订阅多个频道
publish c2 hello 发布到c1频道
psubscribe new* 通过通配符匹配多个订阅
持久化方案
RDB
RDB是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。
优点:使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能
缺点:RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
这里说的这个执行数据写入到临时文件的时间点是可以通过配置来自己确定的,通过配置redis在n秒内如果超过m个key被修改这执行一次RDB操作。这个操作就类似于在这个时间点来保存一次Redis的所有数据,一次快照数据。所有这个持久化方法也通常叫做snapshots。
RDB默认开启
AOF
Append-only file,将“操作 + 数据”以格式化指令的方式追加到操作日志文件的尾部,在append操作返回后(已经写入到文件或者即将写入),才进行实际的数据变更,“日志文件”保存了历史所有的操作过程;当server需要数据恢复时,可以直接replay此日志文件,即可还原所有的操作过程。AOF相对可靠,它和mysql中bin.log、apache.log、zookeeper中txn-log简直异曲同工。AOF文件内容是字符串,非常容易阅读和解析。优点: 可以保持更高的数据完整性,如果设置追加file的时间是1s,如果redis发生故障,最多会丢失1s的数据;且如果日志写入不完整支持redis-check-aof来进行日志修复;AOF文件没被rewrite之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的flushall)。
缺点: AOF文件比RDB文件大,且恢复速度慢。