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

 

Posted on 2020-06-29 10:08  Schrodinger'sdoris  阅读(163)  评论(0编辑  收藏  举报