Redis学习记录(一)
在学习Redis之前,要知道什么是NoSQL?
1.NoSQL
1.1. 什么是NoSQL
NoSQL(NoSQL = Not Only SQL),表示“不仅仅是SQL”,泛指非关系型数据库。
1.2. 为什么需要NoSQL
在面对超大规模和高并发的web2.0纯动态网站,暴露了很多难以克服的问题:
(1)High performance —— 对数据库高并发读写的需求
web2.0网站需要根据用户个性化信息来实时生成动态页面和提供动态信息,因此数据库并发负载非常高,往往需要达到每秒钟上万次读写需求。而不同的关系型数据库应付上万次SQL查询才能够勉强顶住,但是对于上万次SQL读写操作,硬盘IO就无法承受。
(2)Huge Storage —— 对海量数据的高效率存储和访问的需求
在一些大型的web网站中,每天用户量产生上亿的用户动态,这对于关系型数据库来说,在上亿条记录的表中进行SQL查询,效率极其低下。
(3)High Scalability && High Availability——对数据库的高可扩展性和高可用性的需求
在基于web的网络架构中,数据库是最难进行横向扩展的。当用户量和访问量与日俱增时,你的数据库没有办法简单的添加服务节点来扩展性能和负载能力,尤其对于那些提供24小时服务的网站来说,对数据库系统进行升级和扩展非常困难,往往需要停机维护和数据迁移。
所以综上所述,NoSQL数据库的产生是为了解决大规模数据集合多重数据种类带来的挑战。
1.3 主流NoSQL
NoSQL数据库主要分为四大类:
(1) 键值(key-value)存储数据库
相关产品:Redis
典型应用:内容缓存,主要用于处理大量数据的高访问负载
优势:快速查询
劣势:存储的数据缺少结构化
(2) 列存储数据库
相关产品:HBase
典型应用:分布式的文件系统
优势:查找树杜快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限
(3) 图形存储数据库
相关产品:Neo4J,InfoGrid, Infinite Graph
典型应用:社交网络
优势:图结构
劣势:需要对整个图进行计算才能得出结果,不容易做分布式的集群方案
(4) 文档型存储数据库
相关产品:MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
优势:数据结构要求不严格
劣势:查询性能不高,而且缺乏统一的查询愈发
1.3 NoSQL的特点
(1) 易扩展性
NoSQL数据库都有一个共同的特点,都去掉了关系数据库的关系型特性。数据之间无关系,容易扩展。
(2) 大数据量,高性能
NoSQL数据库都具有非常高的读写性能,也得益于它的无关系特性,数据库结构简单
(3) 灵活的数据模型
NoSQL无需事先为要存储的数据简历字段,随时可以存储自定义的数据格式。而在关系型数据库中,增删字段非常麻烦,尤其是非常大数据量的表,增加字段简直就是噩梦
(4) 高可用
NoSQL在不太影响性能的情况下,就可以方便的实现高可用的架构。
2.Redis
2.1 什么是redis
redis是用C语言开发的一个开源的高性能键值对数据库。目前为止redis支持的键值数据类型:
(1) 字符串类型
(2) 散列类型
(3) 列表类型
(4) 集合类型
(5) 有序集合类型
官方提供测试数据:50个并发执行1000000个请求,读的速度为110000次/s,写的素的是81000次/s 。
2.2 redis的应用场景
(1) 缓存(数据查询,短连接,新闻内容,商品内容)。(最多使用)
(2) 聊天室的在线好友列表
(3) 任务队列(秒杀,抢购)
(4) 应用排行榜
(5) 网站访问统计
(6) 数据过期处理(可以精确到毫秒)
(7) 分布式集群架构中的session分离
2.3Redis的安装
安装步骤:
第一步:redis的源码包上传到linux系统。
第二步:解压缩redis。
第三步:编译。进入redis源码目录。make
第四步:安装。make install PREFIX=/usr/local/redis
PREFIX参数指定redis的安装目录。一般软件安装到/usr目录下
2.3.1. 连接redis
2.3.1.1 redis的启动:
前端启动:在redis的安装目录下直接启动redis-server
[root@localhost bin]# ./redis-server
后台启动:
把/root/redis-3.0.0/redis.conf复制到/usr/local/redis/bin目录下
[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/
修改配置文件:
[root@localhost bin]# ./redis-server redis.conf
查看redis进程:
[root@localhost bin]# ps aux|grep redis
root 5190 0.1 0.3 33936 1712 ? Ssl 18:23 0:00 ./redis-server *:6379
root 5196 0.0 0.1 4356 728 pts/0 S+ 18:24 0:00 grep redis
[root@localhost bin]#
2.3.2. Redis-cli
[root@localhost bin]# ./redis-cli
默认连接localhost运行在6379端口的redis服务。
[root@localhost bin]# ./redis-cli -h 192.168.25.153 -p 6379
-h:连接的服务器的地址
-p:服务的端口号
关闭redis:[root@localhost bin]# ./redis-cli shutdown
2.3.3. 想redis服务器发送命令
字符串类型数据存储:该类型是redis中最为基础的数据存储类型,它在redis中是二进制安全的,这意味着该类型可以接受任何格式的数据;
在redis中字符穿类型的value最多可以容纳数据长度是512m。
(1) set/get,使用set和get可以向redis设置数据,获取数据
(2) del,删除指定key的内容
(3) keys * ,查看当前库中所有的key值
(4) incr:加一(生成id)
(4) decr:减一
hash数据类型存储:redis中的hash类型可以看成String Key和 StringValue的map容器。所以该类型非常适合于存储对象的信息。
如果hash中包含很少的字段,那么该类型的数据也将占用很少的磁盘空间。每隔hash可以存储4294967295个键值对。
(1) hset/hget向hash中添加/取内容
(2) hkeys hash查看hash中所有的key
(3)hvals hahs查看hash中所有的值
(4)hgetall hash查看hash中所有的key-val
(5)hdel hash field 删除hash中的键值
list数据类型存储:在redis中,list类型是按照插入顺序排序的字符串联表。我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键不存在,redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素都被移除,那么该键也将会被从数据库中删除。list可以包含最大元素是4294967285。如果我们是在链表的两头插入或者删除元素,效率非常高,假设链表中已经存储了百万条数据,该操作也可以在常量时间内完成;但是如果元素插入或删除操作在链表中间,那将会非常低效。
(1)lpush list 向list集合中从左边添加元素
元素位置为6,5,4,3,2,1
(2)rpush list 向list集合中从右边添加元素
(3)lrange list 0 -1遍历list集合从第一个元素(0)到最后一个元素(-1)
(4)lpop list 从list集合弹出头部元素,弹出之后list集合中不存在该元素
(5)rpop list 从list集合弹出尾部元素
(6)llen list 获取list中元素的个数
set数据类型存储:在redis中,set类型看做没有排序的字符集合,和list类型一样。在该类型的数据之上执行添加,删除或者判断某一元素是否存在等操作,所需时间都是常量时间。set可包含最大元素是4294967295。set集合不允许出现重复的元素,而且与list不同在服务端可以完成多个sets之间的聚合计算操作。如unions,intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。
使用场景:
(1) 跟踪一些唯一性数据,比如访问某一博客的唯一ip地址信息。
(2) 充分利用set类型的服务端集合操作方便,高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户id被存储在一个指定的set中,而购买另外一种电子产品的客户id被存储在另一个set中,如果此时我们想获取有哪些客户同时购买了这两种商品,set intersections命令就有很大的优势。
常用命令:
(1)sadd set 向set中添加元素,如果该元素已有,则不能重复添加
(2)srem set 删除set中指定成员
(3)smembers set 获取set中所有的成员
(4)sismember set 判断参数中指定成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在(无论元素中有多少元素都可以极速的返回结果)
set集合还能进行集合运算
(1) A∩B(属于A且属于B的元素构成的集合)
sinter list1 list2
(2)A∪B(属于A或者属于B的元素构成的集合)
sunion list1 list2
sortedset数据类型存储:与sets类型极为相似,都是字符串的集合,也不允许于出现重复的成员。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分 数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然 而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score) 却是可以重复的。在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为 集合中成员数量的对数。由于Sorted-Sets中的成员在集合中的位置是有序的,因此, 即便是访问位于集合中部的成员也仍然是非常高效的。事实上,Redis所具有的这一 特征在很多其它类型的数据库中是很难实现的,换句话说,在该点上要想达到和Redis 同样的高效,在其它数据库中进行建模是非常困难的。例如:游戏排名、微博热点话题等使用场景。
sortedset暂未学习
Redis学习记录(一)的更多相关文章
- redis 学习记录
http://www.yiibai.com/redis/redis_quick_guide.html Redis 是一款依据BSD开源协议发行的高性能Key-Value存储系统(cache and s ...
- Redis学习记录之Java中的初步使用
1.关于Redis redis下载地址:<span style="font-family: Arial, Helvetica, sans-serif;">http:// ...
- Redis学习记录
参考资料: http://www.dengshenyu.com/%E5%90%8E%E7%AB%AF%E6%8A%80%E6%9C%AF/2016/01/09/redis-reactor-patter ...
- Redis学习记录之————微博项目
Key设计 全局相关的key: 表名 global 列名 操作 备注 Global:userid incr 产生全局的userid Global:postid Incr 产生全局的postid 用户相 ...
- Redis学习记录(三)
1.Redis集群的搭建 1.1redis-cluster架构图 架构细节: (1)所有的redis节点批次互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail ...
- Redis学习记录(二)
1.Key命令 设置key的过期时间. expire key second:设置key的过期时间 ttl key:查看key的有效期(如果显示正数说明该key正在倒计时,如果是-1说明该key永久保存 ...
- Redis学习记录及Jedis代码示例
文章目录 二.Redis简介 三.Redis安装 1. 下载并解压安装 2. 安装C语言编译环境 3. 修改安装位置 4. 编译安装 5.启动Redis服务器 ①默认启动 ②定制配置项启动 [1]准备 ...
- redis学习记录1 特性与优点
1.存储结构:字符串.散列.列表.集合.有序集合. redis存储结构的优势:数据在redis中的储存方式和其在程序中的储存方式相近:redis对不同数据类型提供非常方便的操作方式,如使用集合类型储存 ...
- Redis——学习之路四(初识主从配置)
首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...
随机推荐
- Filter的使用及其生命周期介绍
一.Filter 1. Filter简介 > Filter翻译为中文是过滤器的意思. > Filter是JavaWeb的三大web组件之一:Servlet.Filter.Listener ...
- [USACO1.4]等差数列 Arithmetic Progressions
题目描述 一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合(双 ...
- Java基础笔记(十四)——面向对象(续)【构造方法和this关键字】
一.构造函数的规则 1.构造方法是用来在对象实例化时初始化对象的成员变量的,以完成对象的初始化工作. 2.构造方法与类名相同且没有返回值(返回值也不能为void型).如:public 构造方法名( ) ...
- Exadata 上关于SAS盘的小秘密
案例概述 一个X3-2 的Exadata临时客户,ORACLE原厂工程师在进行onecommand初始化的过程中,执行到第6步,calibrate检测存储节点磁盘性能时报错,后续工作无法继续.而由于一 ...
- css奇技淫巧之—多列等高
什么是等高布局? 先来看一个案例: 上图中的页面的主体内容是两列结构,左列是用来导航的,右列是用来显示内容的.我们看到它们有一个共同的边框,中间还有一条分隔线,左右两列的高度都是不固定的.这种情况下就 ...
- return this链式操作
function Fn(){}; Fn.prototype = { constructor:Fn, a:function(){ alert(1); return this; //实现链式操作.即fn. ...
- JS异步解决方案之概念理解-----------阻塞和非阻塞,同步和异步,并发和并行,单线程和多线程
首先记住一句话,JS是单线程的. 单线程意味着什么?单线程意味着 它不能依靠自己实现异步. JS实现的异步,往往都是靠 浏览器.Node 的机制(事件驱动.回调)实现的. 下面让我这个单身狗 以谈恋爱 ...
- 4、kvm相关网卡操作(添加、删除)
查看虚拟机的网卡信息 virsh domiflist privi-server 添加临时网卡 virsh attach-interface privi-server --type bridge --s ...
- Luogu P3223 [HNOI2012]排队 组合
本来做了一道 P4901 排队 后来发现自己做错题了...到也都是数学qwq 这题最恶心的就是两只(雾)老师. 那我们分类讨论: 1.两个老师之间是男生: $ A(n,n)*A(n+1,2)*A(n ...
- Linux--7
一.Nginx.conf主配置文件 Nginx主配置文件conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的.一般,每个区块以一对大括号{}来表示开始与结束. 核心模 ...