redis的持久化技术
为了防止意外宕机丢失数据,redis提供了两种持久化的方式
两种方案:(都需要在配置文件中设置)
1.RDB:定期把数据保存到硬盘里面,需要满足触发条件 save参数
2.AOF:用日志的方式记录redis数据的写入
redis都是的数据类型都是键值的形式
redis的五种数据类型:
字符串,哈希,列表,集合,有序集合
字符串类型指令:
getrange email 0 3 获得字符串内容
strlen email 获得字符串长度
setex city 5 beijing 设置带有过期时间(秒)的key-value
mset suername scott sex male 设置多个key-value
mget username sex 获得多个value
append temp 1234 在字符串结尾追加内容
incr num 数字自增加1
incrby num 25 数字加上指定的整数值
incrbyfloat num 2.5 数字加上指定的浮点数
decr,decrby 同上,减去指定的整数值
哈希类型指令:
hset 8000 name tom 设置哈希表
hmset 8000 name tom job slaer 设置多个键值
hget 8000 eame 获得字段值
hmget 8000 ename job 获得多个哈希字段值
hgetall 8000 获得所有哈希表字段值
hkeys 8000 获得所有哈希表字段名
hlen 8000 哈希表中的字段数量
hexists 8000 job 判断哈希表是否存在某个字段
hvals 8000 获得哈希表的所有字段值
hdel 8000 job 删除哈希表的字段
hincrby 8000 deptno 10 让哈希表某个字段值加上指定的整数值
hincrbyfloat 8000 sal 350.5 让哈希表某个字段值加上指定的浮点数
列表类型指令:
rpush dname 技术部 后勤部
lpush danme 秘书处
lset dname 2 销售部
lrange dname 0 -1 列出所有列表
llen dname 获得列表长度
lindex dname 0 获得列表某个元素
linsert dname before 秘书处 外联部 在某个位置插入元素
lpop dname 删除最左边的元素
rpop dname 删除最右边的元素
lrem dname 1 秘书处 删除列表某个元素(删除一个秘书处元素,假设列表里面有两个秘书处元素)
集合类型指令:(无序性,根据哈希值排序)
如果需要列表中的元素不可以重复,可以使用集合类型
sadd empno 8000 8001
smembers empno 列出集合元素
scard empno 获得集合长度
sismember empno 8000 判断是否含有某个元素
srem empno 8000 删除某个元素
spop empno 随机删除并返回集合的某个元素
srandmember empno 5 随机返回集合中的元素
有序集合类型指令:
zadd keyword 0 "老子" 添加元素(数字表示被索引次数)
zincrby keyword "老子" 索引次数加一
zrevrange keyword 0 -1 获得有序集合的内容(降序)
zrange keyword 0 -1 获得有序集合的内容(升序)
zrangescore keyword 5 10 获得分数值区间内的集合内容(升序)
zrevrangescore keyword 5 10 获得分数值区间内的集合内容(降序)
zrank keyword "老子" 获得元素的升序排名
zrevrank keyword "老子" 获得元素的降序排名
zcard keyword 获得有序集合的长度
zcount keyword 5 10 查询某个分数值区间内的元素数量
zscore keyword "老子" 返回元素分数值
zrem keyword "孟子" 删除有序集合中的元素
zremrangebyrank keyword 0 2 删除排名区间内的元素
zremrangebyscore keyword -inf (200 删除分数值区间内的元素
key命令:
del keyword 删除记录
exists keyworod 判断是否存在某个key
expire employee 5 设置记录过期时间
expireat employee 1544803200 设置记录的过期时间(Unix时间戳)
move keyword 1 把记录迁移到其他逻辑库
rename employee tem 修改key名称
persist keyword 移除过期时间
type keyword 判断value数据类型
数据库事务机制:
undo和redo日志保证了业务操作的原子性,redis不具备这些文件,redis是异步单线程执行,redis引入事务机制主要是为了保证一个客户端的多个命令不会被其他客户端的命令插队。
redis最开始设计出来是用来缓存数据库热点数据,也就是读取数据,但是后来为了解决秒杀功能,开始用来缓存写入数据
redis不具备原子性和持久性,但是具有一致性和隔离性。
1.为了保证事务的一致性,redis开启事务之前必须要用watch命令监视要操作的记录:watch key(如果在操作的时候key值被其他线程修改,则事务在提交的过程中就自动关闭了)
2.利用multi命令开启一个事务:multi
3.开启事务后的所有操作都不会立即执行,只有执行exec命令的时候才会批处理执行
取消事务:
redis没有事务回滚机制,所有不能保证原子性。
事务在没有提交执行前,是可以取消事务的。如果事务已经提交执行,就无法取消了。使用discard取消事务
multi .... discard
redis命令文档:http://doc.redisfans.com/index.html