一、Redis简介

Redis属于Nosql 非关系数据库

Redis是Remote Dictionary Server(远程数据服务)的缩写

由意大利人 antirez(Salvatore Sanfilippo)  开发的一款 内存高速缓存数据库

该软件使用C语言编写,它的数据模型为 key-value

 

它支持丰富的数据结构,比如 String  list(双向链表)  hash(哈希)   set(集合)  sorted set(zset有序集合)

可持久化(保存数据到磁盘中),保证了数据安全

端口:6379

默认16个数据库,下标从0开始

 

 

二、redis 优点

①Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

②Redis支持数据的备份,即master-slave模式的数据备份。

③性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

 

 

④丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

⑤原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

⑥丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

 

三、应用场景

①[Sort Set]排行榜应用,取top n操作,例如sina微博热门话题

②[List]获得最新N个数据 或 某个分类的最新数据

③[String]计数器应用

④[Set]sns(social network site)获得共同好友

⑤[Set]防攻击系统(ip判断)等等

 

四、redis常见的性能问题

①Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件

②如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次

③为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内

④尽量避免在压力很大的主库上增加从库

⑤主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...

这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。

 

五、对比memcache

①Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

②Redis支持master-slave(主—从)模式应用。

③Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

④Redis单个value的最大限制是512M, memcached只能保存1MB的数据

⑤redis是单核,memcached是多核

由于redis只能使用单核,而memcache可以使用多核,所以在比较上,平均每一个核上redis在储存小数据时比memccache性能更高。而却100K以上数据中,memcache性能要高于redis,虽然redis最近也在储存大数据的性能上进行优化,但是比起memcached还是有点逊色。结论是无论你使用那个,每秒处理请求的次数都不会成为瓶颈。

你需要关注内存使用率。对于key-vlaue这样简单的数据储存,memcache的内存使用率更高,如果采用hash结构,redis的内存使用率会更高,当然这都依赖于具体的应用场景

 

六、常见的性能问题及如何解决

①Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。

②Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。

③Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。

④Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内

 

七、数据结构命令

1.key

key的命名规则不同于一般语言,键盘上除了空格、\n换行外其他的大部分字符都可以使用

像“my key”和“mykey\n”这样包含空格和换行的key是不允许的。

我们在使用的时候可以自己定义一个Key的格式。

例如 object-type:id:field

Key不要太长。占内存,查询慢。

Key不要太短。像u:1000:pwd   就不如   user:1000:password:123456  可读性好

2.redis的作用是什么 redis主要作用有哪些_Redis

 

 

2.string

string是redis最基本的类型

redis的string可以包含任何数据。包括jpg图片 base64或者序列化的对象

单个value值最大上限是1G字节

如果只用string类型,redis就可以被看作加上持久化特性的memcache

2.redis的作用是什么 redis主要作用有哪些_2.redis的作用是什么_02

 

 

3.list

key value(value1,value2,value3)

list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素

这使得list既可以用作栈,也可以用作队列

同一端进出  先进后出   栈

一端  另外一端出  先进先出  队列

 

2.redis的作用是什么 redis主要作用有哪些_2.redis的作用是什么_03

 

首部(左 left)   尾部(右right)

2.redis的作用是什么 redis主要作用有哪些_数据_04

 

4.set

redis的set是string类型的无序集合。集合里不允许有重复的元素

set元素最大可以包含(2的32次方-1)个元素。

关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能。

2.redis的作用是什么 redis主要作用有哪些_Redis_05

 

 

5.zset

 

 

 

和set一样sorted set也是string类型元素的集合,有序集合,元素不允许重复

不同的是每个元素都会关联一个权。

通过权值可以有序的获取集合中的元素,可以通过score值进行排序

2.redis的作用是什么 redis主要作用有哪些_redis_06

 

 

 

6.hash

Hash存储数据和关系型数据库(mysql),存储的一条数据的结构极为相似

Key:value(field:value)

2.redis的作用是什么 redis主要作用有哪些_数据_07