让你快速认识redis

redis 是开源的,使用c语言进行开发的,属于非关系数据库,能读的速度是110000次/s,写的速度是81000次/s 。它是通过内存方式进行存储数据的,在平常编程当中它可以当做数据库来使用也可以高速进行缓存以及最常见的消息队列等。

redis 支持五种数据类型:字符串、哈希、链表、集合、有序集合;


字符串(string):最为常见的一种数据类型,与memcache 的key/value存储方式一样,但是不能像memcahe一样直接储存数组,需要json编译后进行储存,这种类型最大的一个特点是可以做统计,比如想要限制Ip连续访问次数,那么使用incrby的命令实现


链表(list):也是最为常见的一种数据类型它是属于单进程和单线程,在一些商品活动中,或者在一些空间微博中的timeline中都会用到这种类型,链表的特点就是先进先出。下面我来举一个我在编码中遇到的一个实例,当时公司要在网站上举办一个活动在一个时间段让用户进行对商品秒杀,那么在这个时间段就会遇到高并发的发生,如果不预防的话就会对数据库造成超卖的问题,所以当时在本地测试的时候最开始采用的是对库存字段设置无符号(不能为负数),测试时发现这样虽然解决了库存超卖的问题,但是会出现报错,这也用户体验特别不好,之后我们进行改进使用了mysql中MyISAM锁表的方式,每次让进来的先操作,操作完以后下一个才能进来操作以此类推,当这个方案在测试时又被推翻了,因为我们发现这个方法对数据库的压力非常大,这样是不乐观的。最后我们又用到了文件锁,但是因为对服务器造成了不小的压力最终pass掉了最终找到了最为合适的防止超卖的方法,那就是redis,这个方式因为在内存中进行操作,这样不仅对数据库不会造成太大压力对服务器也亦是如此。


集合(sets)通过散列表方式可以对存储的数据保证唯一性,使用了无序方式储存元素,一般用来做统计使用,例如统计独立IP的访问个数。


有序集合(zset)通过散列表方式可以对存储的数据保证唯一性,有序集合是Redis里面唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排序来访问元素的结构,有序集合使用场景一般用在做排行榜或者搜热中。


哈希(hash)hash特别适合用于存储对象。相对于将对象序列化存储为String类型,将一个对象存储在hash类型中会占用更少的内存.应用场景一般存储经常修改的数据里,因为如果在平常修改数据时候会读取出所有的字段,然后修改完后在存储回去这样消耗是非常大的,而如果使用hash存储只需修改需要修改想要修改的值即可。


非关系数据库和关系型数据库的区别:

非关系型:nosql是基于键值对的,相当于数据库中的主键与值的关系,在使用中不需要经过sql解析,所以性能方面非常高。 
关系型数据库:可以使用sql语句方便多表进行复杂的数据处理,而且支持事物,在安全性方面得到提高。


redis持久化:RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上:AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
redis出现故障:RDB在生成快照之前突然redis挂掉了那么有一段时间的数据就会丢失;AOF持久化策略默认是每秒表存一次,所以当redis出现故障最多丢失一秒的数据;


redis与memcache的区别:
1、首先redis的存储类型多,而memcache只支持key和value();
2、redis不支持视频图片存储而memcache可以存储;
3、redis可以持久化而memcache当页面关闭时数据就不在了,所以当它们各自挂掉后,redis数据还在而memcache的数据会丢失不在。;
4、redis可以通过AOF、RDB进行对数据修复;


redis 的主从原理:

1、从服务器连接主服务器,发送请求命令;
2、主服务器接收到请求命名后,会通过命令生成RDB文件;
3、主服务器当生成完RDB文件后会向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
4、从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值