Redis初级介绍

1 什么是Redis

Redis(REmote DIctionary Server,远程数据字典服务器)是开源的内存数据库,经常使用做缓存或者消息队列。redis

Redis的特色:

  • Redis存在于内存,使用硬盘做为持久化;每秒十万读写。
  • 具备丰富的数据结构,字符串、哈希表、列表、集合、有序集合;提供交集、并集、差集等操做。
  • 设置TTL存活时间,到期自动删除。
  • Redis单线程、Memcached多线程;对于通常的应用场景,单线程也足够使用,优点仍是在于多数据类型、持久化。
  • 能够将数据复制到任意数量的从服务器。

2 Redis中的数据结构

字符串

  • SET keyname value 设置键值keyname的值是value
  • KEYS * 获取全部的键值
  • GET keyname 获取keyname的值
  • EXISTS keyname 判断是否存在键值keyname
  • DEL keyname 删除键值keyname
  • TYPE keyname 判断keyname的类型(string字符串,hash哈希表,list列表,set集合,zset有序集合)

哈希表

  • HSET keyname key value 添加一个哈希属性和值
  • HGET keyname key 获取值
  • HKEYS keyname 获取所有的key值
  • HVALS keyname 获取所有的value值
  • HGETALL keyname 获取全部的值

列表

经过双向链表实现,头尾操做均为O(1),获取指定元素比较慢。数据库

  • LPUSH keyname value1或者LPUSH keyname value1 value2 在左边插入
  • RPUSH keyname value2 在右边插入
  • LRANGE keyname 0 -1 查询全部的元素
  • LPOP keyname
  • RPOP keyname

集合

元素惟一,可是没有顺序。使用值为空的哈希表实现,操做都是O(1)。缓存

  • SADD keyname value1 value2 添加值
  • SREM keyname value1 删除
  • SMEMBERS keyname查询全部元素

有序集合

使用哈希和跳跃表实现,中间速度也很快。服务器

  • ZADD keyname key value 添加
  • ZRANGE keyname start end 获取指定范围的元素

与列表的比较:数据结构

相同:多线程

  • 都是有序的
  • 均可以获取某一范围的元素

不一样:app

  • 列表经过双向链表实现,两端数据存取极快,中间缓慢
  • 有序集合经过哈希和跳跃表实现,中间速度也很快,为O(log(N))
  • 列表不能简单地调整某个元素的位置,有序集合能够
  • 有序集合比列表更好费内存

3 Redis持久化

Redis提供了两种持久化方式:1 RDB快照方式 2 AOF方式优化

RDB方式:线程

知足必定条件时,会建立一个子进程,复制当前的数据,把数据写入到硬盘中某个文件,写入完成后替换原来的存储文件。数据通常存储在dump.rdb中。UNIX系统中支持写时复制,即刚开始会执行持久化写入磁盘的操做,若是此时有其余的数据发生改变,就复制一份数据执行。队列

除了这种自动的快照方式,还支持命令方式持久化:

  • SAVE:经过阻塞的方式,用父进程来持久化,此时没法执行其余的请求。
  • BGSAVE:经过fork子进程的方式,持久化。

AOF方式:

每次操做都会记录命令,这样会形成某些命令的冗余,好比添加了一个属性,再删除,那么这两个操做都是冗余的。redis提供了一些优化,因此能够避免这些冗余信息。命令记录在appendonly.aof中

4 Redis的消息队列

Redis用于消息队列,一般有两种种使用方式:

LIST:基于列表的方式,全部的消费者数据加起来是列表中的全部数据.

发布/订阅:每一个消费者订阅独立的channel,每一个数据都是独立的。

相关文章
相关标签/搜索