Redis基础

文章目录
  1. 1. 使用redis有哪些好处
  2. 2. Memcache与Redis的区别都有哪些
  3. 3. redis持久化的几种方式
  4. 4. redis 常用的数据类型

Redis 是一个基于内存的高性能key-value数据库。
非关系型数据库

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

使用redis有哪些好处
  1. 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
  2. 支持丰富数据类型,支持string,list,set,sorted set,hash
  3. 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
  4. 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
Memcache与Redis的区别都有哪些
  1. 存储方式 Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis有部份存在硬盘上,这样能保证数据的持久性。
  2. 数据支持类型 Memcache对数据类型支持相对简单。 Redis有复杂的数据类型。
  3. 使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
redis持久化的几种方式

1、快照(snapshots)
  缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb。你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘;或者你可以手工调用命令SAVE或BGSAVE。
 工作原理
  . Redis forks.
  . 子进程开始将数据写到临时RDB文件中。
  . 当子进程完成写RDB文件,用新文件替换老文件。
  . 这种方式可以使Redis使用copy-on-write技术。
2、AOF(append-only file)
  快照模式并不十分健壮,当系统停止,或者无意中Redis被kill掉,最后写入Redis的数据就会丢失。这对某些应用也许不是大问题,但对于要求高可靠性的应用来说,Redis就不是一个合适的选择。Append-only文件模式是另一种选择。
3、虚拟内存方式
  当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.
  当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.
  vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

redis 常用的数据类型

Redis 的数据类型主要有:

  • string:字符串类型,可以包含任何数据。包括jpg图片或者序列化的对象。里面的incr方法可以实现网站计数器功能,每次访问一个就可以进行加1操作。降低了数据库的压力。
  • list:是一个双向链表,通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。比如可以获取最新添加的10个商品,获取最新的登陆的10个信息,做商品的秒杀等等。都可以通过链表中的队列来实现,极大节省了各方面的资源。
  • hash:hash数据类型是redis模仿数据库把一条记录信息给存储起来,这样可以把数据库中的每一条记录保存在hash中,作为缓存处理,非常接近于数据库的操作。
  • set :set是string类型的无序集合。set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能。比如qq好友推荐、微博系统的关注关系使用
  • sorted set:和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个权。通过权值可以有序的获取集合中的元素,它的适用场合如:获得热门帖子(回复量)信息,根据学生成绩排序获得信息等.

简单说下无序集合、有序集合、链表三者的主要区别

  • set类型:集合类型、内部元素没有顺序,同一个集合没有重复元素。
  • list链表类型:内部元素有彼此的先后顺序,同一个链表允许有重复元素。
  • sort set类型:排序集合类型,相比set类型有排序功能。