NoSQL介绍
Nosql = not onlysql, 09年发展高涨,指非关系型数据库,在超大规模和高并发的sns类网站有优势;
Nosql是以key-value形式存储,和传统的数据库不一样;不需要遵守关系型数据库的一些要求,如sql标准,acid属性,表机构等等;
特点:非关系型的,分布式的,开源的,水平可扩展的;
1、处理超大量的数据
2、运行在便宜的PC服务器集群上
3、击碎了性能瓶颈
适用场景:
1、对数据高并发读写
2、对海量数据的高效率存储和访问
3、对数据的高可扩展性和高可用性
Redis介绍
Redis is an opensource, advanced key-value store.It is often referred to as a data structureserver since keys can contain strings,hashes, lists,sets and sorted sets.
Redis 支持存储的value类型包括string/list/set/zset。都支持push/pop,add/remove及交集和并集及更丰富的操作,Redis支持各种不同方式的排序,为了保证效率,数据都是缓存在内存中,但是可以周期性的把更新的数据写到磁盘或者把修改操作写入追加的记录文件。
Redis提供的API语言:c c++ c# java js python php ruby Go lua
目前全球最大的Redis用户是新浪微博。
Redis的使用场合
在新浪的2中部署场景:
1、应用程序直接访问Redis数据库
Application---> Redis
2、应用程序直接访问Redis,只有当Redis访问失败再访问Mysql。
Redis数据库提供多种灵活的数据结构和数据操。
A、去最新的N个数据操作
B、排行应用,去TOP N操作
C、需要精确设定过期时间的应用
D、计数器应用
E、Uniq操作,获取排重数据
F、实时系统,反垃圾
G、Pub/Sub构建实时消息系统
H、构建队列系统
I、缓存
Redis 和 mysql的区别
|
| redis | mysql | mongodb |
| 数据库 | 有 | 有 | 有 |
| 表结构 | 无 | 有 | 集合 |
| 字段 | 无 | 有 | 无 |
Redis的安装与部署
1、下载安装包
2、编译安装
Make
Cd src & make install
配置项
启动
Redis的后台启动
使用redis.conf配置文件,把daemonize改成yes;daemonize表示后台启动。
redis-server /usr/local/redis/etc/redis.conf -- 启动redis服务
./redis-cli -- 启动客户端
关闭redis服务
1、pkillredis-server
2、./redis-clishutdown
点击redis-server.exe文件启动服务,不用关闭该窗口
Redis数据类型
strings类型及操作
A、Set
设置key对应的值为string类型的value
B、Setnx
C、Setex
D、Setrange
E、Mset
F、Msetnx
如果有一个键未设置成功,则都不成功;
G、Get
H、Getset
I、Getrange
J、Mget
K、Incr
L、Decr
M、Append
N、Strlen
hashes类型
Redis hash 是一个string类型的field和value的映射表,他的添加、删除操作都是o(1)。Hash特别适合存储对象。相较于将对象的每个字段存成单个string类型,将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
Hset和hget
Hsetnx
Hmset
Hget
Hmget
Hincr
Hexists
Hlen
Hdel
Hkeys
hvals
Hgetall
Lists类型
List是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字,redis的list类型其实就是一个每个子元素都是string类型的双向链表。可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以做栈也可以做队列。
Lpush
Rpush
Linsert
Lset
Lrem
Ltrim
Lpop
rpoplpush
lindex
Llen
Sets类型
Sadd
查看所有set成员使用 smembers
srem
Spop
Sdiff
sdiffstore
sinter
Sinterstore
Sunion
Sunionstore
smove
Scard
Sismember
srandmember
有序集合sorted set
Zadd
Zrem
Zincrby
Zrank
Zrevrank
Zrevrange
Zrangebyscore
Zcount
Zcard
Zremrangebyrank
安索引删除
Zremrangebyscore
按顺序号删除
Redis常用命令
键值相关命令
1、Keys
2、Exists
3、Del
4、Expire
5、Move
6、Persist
7、Randomkey
8、Rename
9、Type
服务器相关命令
1、Ping
2、Echo
3、Select
4、Quit
5、Dbsize
6、Info
7、Config get
8、Flushdb
9、Flushall
Redis的高级应用
安全性
设置密码:
修改配置文件redis.conf
requirepass hello
如下截1图
设置完成后,重启redis
每次进入时使用密码进入,#> redis-cli -a 密码
主从复制
事务处理
持久化机制
1、Snapshoting方式
2、aof方式
发布订阅消息
虚拟内存的使用
Php使用redis
https://github.com/phpredis/phpredis php redis
API
示例代码:
Python使用redis
https://github.com/andymccurdy/redis-py
Redis-py介绍
The Pythoninterface to the Redis key-value store.
1、Installation
redis-pyrequires a running Redis server.
To installredis-py ,
$> sudo pipinstall redis
Or
$> sudoeasy_install redis
API: http://redis-py.readthedocs.org/en/latest/
2、简单使用
3、
Java使用redis
https://github.com/xetorthio/jedis
Redis所有命令
http://redis-py.readthedocs.org/en/latest/
Strings
Redis管道
请求/响应协议和RTT
Redis是一个使用客户端/服务器模型(也被称作请求/响应协议)的TCP服务器。
这说明通常来讲一个一个请求的实现有以下步骤:
· 客户端发送请求到服务器,并从socket中以堵塞的方式读取服务器的响应数据。
服务器对发动的命令进行处理并把响应数据发回客户端。
比如发送连续四个命令就会像这样:
- 客户端: INCR X
- 服务端: 1
- 客户端: INCR X
- 服务端: 2
- 客户端: INCR X
- 服务端: 3
- 客户端: INCR X
- 服务端: 4
客户端和服务端通过网络连接。这个连接可能非常快(本地回环接口)也可能非常慢(互联网上相隔很多跳数的两台主机)。不论网络延迟是多少,数据包从客户端发到服务端并从服务端返回客户端都有一个时间。
这个时间被称作环路时间。显而易见,当客户端需要一次发送很多请求时(比如一次向一个List添加很多元素,或者向一个数据库添加很多Key),这个环路时间会对性能造成非常大的影响。如果环路时间是250毫秒(在网络连接非常慢的情况下),即使服务端能每秒处理10万个请求,我们一秒最大也只能处理四个请求。
即使我们用的是本地回环接口,本地环路时间会短得多(比如在我本机上用ping测试是0.044毫秒),但是如果你要一次进行大量写操作,这个时间依然不少。
幸运的是我们有一种方法来优化这种使用场景。
Keys * 查看所有的key值, type $key 查看某个key的类型;
本文介绍了NoSQL数据库的概念及其在高并发场景下的优势,并详细解析了Redis的特点、数据类型、安装部署过程及应用场景。
4891

被折叠的 条评论
为什么被折叠?



