初探 Redis 数据库
本文转自最下方文档,是对参考文档的一个摘录。
基本知识
端口:6379
默认16个数据库,下标从0开始
单线程:redis是单线程+io多路复用:检查文件描述的就绪状态
Memchached:多线程+锁
redis数据类型:String set list hash zset
使用场景:
配合关系型数据库做高速缓存
缓存高频次访问的数据,降低数据库io
分布式架构,做session共享
可以持久化特定数据。
利用zset类型可以存储排行榜
利用list的自然时间排序存储最新n个数据
在我看来,redis数据库是对sql数据库的一种补充和优化,针对一些需要频繁操作数据库,高IO的场景,可以用redis进行优化,这样可以降低操作成本。
使用流程
Select 数据库前查询redis,有的话使用redis数据,放弃select 数据库,没有的话,select 数据库,然后将数据插入redis
update或者delete数据库钱,查询redis是否存在该数据,存在的话先删除redis中数据,然后再update或者delete数据库中的数据
并发大的情况下会出现的错误:
为了update先删掉了redis中的该数据,这时候另一个线程执行查询,发现redis中没有,瞬间执行了查询SQL,并且插入到redis中一条数据,回到刚才那个update语句,这个悲催的线程压根不知道刚才那个该死的select线程犯了一个弥天大错!于是这个redis中的错误数据就永远的存在了下去,直到下一个update或者delete。
所以针对并发大的情况,update或者delete要在执行前面流程后,再次删除redis中的数据。
一、优点:
- 异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
- 支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。
- 操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
- 多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。常规计数: 微博数, 粉丝数。
主要看一下多实用工具,描述了redis实际的一些应用场景。这很重要,不能为了技术而技术,学之前应该清楚地了解到,为什么要学,对现在的应用有多大的帮助,哪些场景确实可以通过这门技术得到优化,用户体验更好,又有哪些场景是不必要的。
二、redis数据库属于NoSql的一种,作为一种键值存储系统,与其他同类型对比:
- Redis是键值数据库系统的不同进化路线,它的值可以包含更复杂的数据类型,可在这些数据类型上定义原子操作。
- Redis是一个内存数据库,但在磁盘数据库上是持久的,因此它代表了一个不同的权衡,在这种情况下,在不能大于存储器(内存)的数据集的限制下实现非常高的写和读速度。
- 内存数据库的另一个优点是,它与磁盘上的相同数据结构相比,复杂数据结构在内存中存储表示更容易操作。 因此,Redis可以做很少的内部复杂性。
三、Redis数据类型(5种)
- 字符串
就是普通的键值对,SET key value,GET key,DEL key - 散列/哈希
Redis Hashes是字符串字段和字符串值之间的映射(类似于PHP中的数组类型)。 因此,它们是表示对象的完美数据类型。在Redis中,每个哈希(散列)可以存储多达4亿个键-值对。 - 列表
Redis列表只是字符串列表,按插入顺序排序。可以在列表的头部或尾部添加Redis列表中的元素。列表的最大长度为2^32 - 1个元素(即4294967295,每个列表可存储超过40亿个元素)。 - 集合
Redis集合是唯一字符串的无序集合。 唯一值表示集合中不允许键中有重复的数据。在Redis中设置添加,删除和测试成员的存在(恒定时间O(1),而不考虑集合中包含的元素数量)。列表的最大长度为2^32 - 1个元素(即4294967295,每组集合超过40亿个元素)。 - 可排序集合
Redis可排序集合类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复。
四、linux(ubantu)下的操作指令
#安装redis,类似centos下的yum指令
sudo apt-get update
sudo apt-get install redis-server
#启动redis
redis-server
#运行redis,进入redis命令行
redis-cli
#接受到PONG回应,这表明Redis已成功在您的计算机上安装了。
ping
#远程运行redis
redis-cli -h host -p port -a password
#设置密码
#查看是否设置了密码,默认情况下属性值 requirepass 为空
CONFIG get requirepass
#设置密码,设置之后再进行任何操作之前就需要验证了
CONFIG set requirepass "123"
#验证密码
AUTH 123
#计数器
INCRBY member 1
get member
五、windows下安装使用
redis已经不针对Windows出版本了,官网甚至去掉了Windows下载选项,所以只能从github上下载。
#启动,出现图形版本好信息,但会阻塞该命令行,一旦关闭,进程会被kill掉
redis-server redis.windows.conf
#设置redis为服务
redis-server --service-install redis.windows-service.conf --loglevel verbose
#常用指令,卸载,开启,停止
redis-server --service-uninstall
redis-server --service-start
redis-server --service-stop
redis快速入门
Redis在Windows下的安装过程
Redis的7个应用场景
redis官网下载(linux版本)
redis github下载(Windows版本)