目录

redis简介

redis特点

redis中key命名规范

redis的基本操作

String类型

List类型

Hash类型

Set类型

ZSet类型

redis持久化方式

AOF模式 (AOF 默认是不开启的)


redis简介

redis全称:reomote Dictionary Server (远程字典服务),是一个开源的,使用ANSIC语言来编写。是基于内存来存储key-value的数据库,还可以持久化的保存在磁盘上。redis是NoSQL类型的数据库的一种。支持大多数主流的开发,如java、c、python等。

NoSQL:(Not Only SQL)泛指非关系型数据。NoSQL不仅仅是一个概念,还泛指非关系型数据库,区别于关系型数据库,他们不保证ACID特性。NoSQL是一种全新的数据库革命性运动,能够解决关系型数据库难以完成的操作,还具有已扩展高可读写的性能,特别是当数据量大的时候,同样表现优秀。

redis特点

  1. 缓存数据库,可以简化对数据库访问次数,来提高响应速度
  2. 性能极高,redis读取速度可以达到110000/s,写入速度81000/s
  3. 支持数据持久化
  4. 丰富的数据结构 String字符串Hash(散列)List(链表)Set(集合)ZSet(有序集合)

redis中key命名规范

  1. 英文字母开头,命名只能出现小写字母数字英文点号(.)和英文的冒号(:)
  2. 不要包含特殊字符,如下划线、空格、换行、单双引号及其他转义字符
  3. 命名做到见名知意,key的长度不宜过长影响查询效率

redis的基本操作

redis默认有16个数据库。(默认选中0,名字从0开始)

切换数据库 select 1:这样就切换到名字为1的数据库;

查看key keys patten:patten是查询key的规则,使用*表示查看当前数据库中所有的key;

String类型

常用命令:

  1. set key value:设置一个key,值为value,值类型为String的键值对,若key不存在则创建,若key已存在,则更新value。返回 1成功,0失败。
  2. get key:获取key对应的value,若key不存在,则返回nil。
  3. mget key1 key2 key3:获取多个value。
  4. incr key:将key的数字加1,若key不存在则会创建一个,并初始化为0,然后数值加1。若key的value不是一个数字,则会报错。
  5. incr key increment:可以设置每次执行加的次数(increment)。
  6. decr key:将key的数值减1,若key不存在,先创建并初始化为0,再执行减1操作,若不存在则报错。
  7. decrby key increment:可以设置每次执行减的次数(increment)。
  8. append key value:若key存在,则在后面最加value,若key不存在,则执行set的操作。
  9. help @String:查看string类型的帮助文档。

String类型的应用场景:朋友圈的点在、微博的点赞、直播的在线点赞等

解决了多线程的问题:redis是单线程的,读写的速度非常快,不存在处理不过来的问题。比如窗口卖票是多线程的线程锁解决卖票的不一致问题,操作复杂。而redis却能简单的解决卖票的线程问题。

List类型

常用命令:

  1. lpush key value1 value2 value3:从左边推进去,存入的顺序是value1,value2,value3,而在第一位的是value3。
  2. rpush key value1 value2:从右边开始推 值进去,如果key存在,则从右边开始存值进去,顺序是value1,value2,而value2的位置在-1。
  3. llen:返回key的list长度。
  4. lindex key index:根据下标查找元素,从0开始,从左往右。
  5. lrange key start stop:查找指定范围的key,如lrange key 0 -1,查询所有的key。
  6. lpop:从左边移除第一个元素,返回第一个元素。
  7. rpop:从右边移除第一个元素,返回移除的元素。(最后一个元素)

List类型的应用场景:处理排名类的业务,楼层的回帖,聊天室等

Hash类型

常用命令:

  1. hset key field value:设置hash field为指定值,若key不存在,则会创建,若key存在,则会更新数据。
  2. hget key field:获取指定的hash field。
  3. hmget key field...:获取指定多个的hash field。
  4. hmset key field value1...fieldN valueN:同时设置hash的多个field。
  5. hexists key field:判断指定的field是否存在,存在返回true,不存在返回false。
  6. hdel key field:删除指定的hash field。
  7. hlen key:返回指定hash的field数量。
  8. hkeys key:返回hash的所有field。
  9. hvals key:返回hash的所有value。
  10. hgetall key:返回hash的所有field和value。

Set类型

特点:

  • 无序的、不可重复的
  • 元素都是字符串类型
  • 最多2^32-1元素

常用命令:

  1. sadd key member[member...]:添加一个set类型的value,若key不存在则会创建,若key存在,如果是一个set类型的则将不同的添加进去,相同的则会被忽略,如果不是set类型,返回一个错误。
  2. smembers key:返回集合key中的所有成员。不存在的key则视为空集合。
  3. spop key:移除并返回集合中一个随机的元素。被移除的元素是随机的。当key不存在或key是空集时,返回nil。
  4. scard key:返回集合key的基数(集合元素的个数)。当key不存在时,返回0。
  5. sinter key[key...]:返回一个几个的全部成员,该集合是所有给定集合的交集。不存在视为空集。
  6. sunion key[key...]:返回一个集合的全部成员,该集合的所有给定集合的并集。不存在视为空集。
  7. sdiff key[key...]:返回一个集合的全部成员,该集合是所有第一个集合的差集。不存在视为空集。

Set类型的应用场景:QQ的共同好友,可能认识的人。新浪微博的共同关注等。

ZSet类型

特点:

  • 类似Set集合
  • 有序的、不可重复的
  • 元素类型是字符串类型
  • 每一个元素都关联着一个浮点数分值(Score),可以按照分值进行排序,分值也可以相同。
  • 最多包含2^32-1元素

常用命令:

  1. zadd key[sort member sort member...]:增加值,如zadd set1 1.0 zhangsan 2.0 lisi
  2. zrange key start end:根据指定的索引查询范围的值。如 zrange set1 0 -1
  3. zcout key start end:统计一个范围内元素的个数。根据分值查找。返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。
  4. zcard key:统计元素的个数。如 zcard set1。
  5. zrank key:返回成员的索引号。如 zrank set1 lucy
  6. zrem key [member...]:删除成员。如 zrem set1 zhangsan

ZSet类型的应用场景:适用于需要有序且唯一的业务。比如网易云音乐的排行榜。

redis持久化方式

redis是基于内存的,如果Redis服务器宕机了,数据就会丢失。为了避免数据丢失了,redis提供了两种持久化方式RDB和AOF

RDB(Redis DateBase)持久化,就是把内存数据快照的形式保存到磁盘上。和AOF相比它记录的是某一时刻的数据,并不是操作。

什么是快照?可以这样理解,相当于给当前时刻的数据,拍一张照片,然后保存下来。

原理:redis会单独创建一个(fork)子进程来进行持久化操作 主要过程是将redis的内存数据写入到一个磁盘上临时文件dump.rdb中 等待持久化操作结束 将这个临时文件直接替换上次存储的临时文件 因为这个过程并不执行IO操作 而是做直接覆盖 所以能够确保极高的性能。

RDB模式会在redis根目录生成临时文件的名字叫做dump.rdp

rgb持久化策略:

持久化策略默认有900秒修改1次,300秒修改10次,60秒修改10000次时触发备份,需要修改时可以到redis.conf里去修改 SNAPSHOTTING 对应内容 比如通过更变策略 save 60 5 表示60秒5次操作将会触发备份

rdb持久化策略在什么时候会被触发:

  1. save满足规则的情况下会触发rdb规则
  2. 在执行flushall命令时会触发rdb规则(删除全库自动备份)
  3. 退出redis时 触发rdb规则

AOF模式 (AOF 默认是不开启的)

AOF(Append Only File) 持久化,采用日志的形式来记录每个写操作追加AOF文件末尾

redis默认情况是不开启AOF的。重启时再重新执行AOF文件中的命令来恢复数据。它主要解决数据持久化的实时性问题。

原理:将我们的写入语句全部记录 恢复时文件再执行一次

AOF保存文件名为appdendonly.aof

以日志形式记录写入操作(读操作不记录) 只允许读该文件不允许写该文件 弊端就是大数据的情况下需要执行很久

appendonly yes 开启aof模式

appendfsync always 每次都修改 消耗性能

appendfsync everysec 每秒修改 可能会丢失1秒的数据

appendfsync no 不开启 默认

优点

每次更新时同步的文件完整性较好

缺点

相对于rdb文件 修复的速度会比较慢 因为原理是存储操作 然后回复时执行操作

效率没有rdb高

RDB和AOF最大的区别就是 RDB存储的是直接数据 AOF存储的执行的语句