redis的使用

1.背景介绍

什么是redis?

redis是一个key-value存储系统,与memcached类似,redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关读写操作。redis使用c语言开发,支持的客户端语言也非常丰富,其中自然包括了Java语言。当前redis的应用已经十分广泛,国内像新浪、淘宝,知乎等均在使用redis的缓存服务

为什么要使用缓存?

机械硬盘的读写速度:50-90MB/s

固态硬盘的读写速度可以达到:500MB/s

内存DDR3 1333Hz的读写速度大概在8G/s

读写次数:mysql 读8000次/s  写4000次/s

redis  读写速度在10万次/s

redis是基于内存操作的高性能服务器存储应用,读写速度很快,作为内存型缓存服务器时,它支持的数据类型比较丰富,而且提供了持久化的存储方案,在一些开发场景中甚至可以作为结构不复杂的数据库来使用

2.知识剖析

redis支持的两种持久化数据方式:RDB(Redis DataBase)和AOF(Append Only File)。

1.RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上

2.AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。

redis支持的5种数据类型及基本操作

String(字符串):对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement)

List(链表):从链表的两端推入或者弹出元素;根据值来查找或者移除元素

Set(集合):添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集

Zset(有序集合):添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素

Hash(散列):添加、获取、移除单个键值对;获取所有键值对

redis的常用配置

1.daemonize 默认为no,改为yes可以使其后台运行

2.bind 默认127.0.0.1,ip地址为允许访问该redis的主机,注释掉可以让所有主机访问

3.port 默认6379

4.timeout  默认为0(永不关闭),表示一直没有请求发到redis服务器的客户端连接超时时间

5.requirepass redis密码,在向redis服务器发起请求之前需要验证的参数,可以不写

redis使用场景

1、取最新的N个数据的操作

比如当你要取网站的最新的500条文章,我们可以将最新的500条文章的ID放在redis的List链表中,每有用户发布一篇文章就向链表左边插入一条数据,取的时候按照链表顺序从左边开始取500条,就能拿到对应的最新500条文章的ID,更加细化的读取操作可以方便的达到分页的功能

2、排行榜应用,取Top N操作

比如按照点赞的次数给文章排名,我们可以使用有序集合实现,将点赞数设置成sortset的score,将具体的文章ID设为字符串成员member,每次执行一条ZADD命令即可

3、需要精准设置过期时间的应用

redis支持过期功能,比如短信验证码的时效性可以通过设置过期时间来决定

4、计数功能

redis的命令都是原子性的,我们可以轻松利用INCR,DECR命令来构建计数器,完成计数功能,比如记录同一号码一天内不能超过三次请求发送验证码

5、唯一约束的数据

使用redis的set(集合)数据结构就可以自动排重了

6、常用的缓存功能

比如和mysql连用时临时存储数据提高访问速度

3.常见问题

1、redis和mamcached主要区别?

2、如何使用java操作redis?

4.解决方案

区别:

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

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

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

5.编码实战

6.扩展思考

redis在开发中能够完全取代传统数据库(如mysql)吗?

1.redis虽然在许多项目中已经被直接当成数据库来使用,但是在许多复杂场景中,还是mysql等传统数据库才能胜任

2.Redis本来就是内存数据库,用来当做计数器,队列等的确很不错,性能高效。但是若是对此了解不够深入,或者受到架构的约束,在需求更新时会遇到巨大的困难,BAT也有许多项目大量使用redis作为存储机制,不过他们已经对redis进行了个性定制和扩展.

3.redis不支持实体完整性约束,不支持用户完整性约束和关联完整性约束校验,要保证数据低冗余和无差错时十分困难的,以现在业界开发人员的平均水平来说,传统数据库的开发效率还是更胜一筹.

7.参考文献

https://www.cnblogs.com/Hondsome/p/5962144.html

 

你可能感兴趣的:(redis的使用)