NoSQL

摘自百度百科

NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

NoSQL数据库的四大分类
1. 键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
2. 列存储数据库。
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
3. 文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
4. 图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph.

因此,我们总结NoSQL数据库在以下的这几种情况下比较适用: 1、数据模型比较简单; 2、需要灵活性更强的IT系统; 3、对数据库性能要求较高; 4、不需要高度的数据一致性; 5、对于给定key,比较容易映射复杂值的环境。

Redis 简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库,也是NoSQL数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

1. 性能极高 – 官方对redis进行测试,50个并发执行100000个请求,Redis读的速度是110000次/s,写的速度是81000次/s 。
2. 丰富的数据类型 redis是基于key/value形式进行存储 redis可以存储五种数据类型(注意:redis中的key/value均区分大小写)
* String 字符串
* Hash 哈希类型 类似Java中的HashMap类型
* List 链表
* Set 集合
* Sorted Set 有序集合 (也称zset)
3. 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

1. Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

2. Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

redis 使用

redis的windows客户端端使用

Redis命令十分丰富,包括的命令组有Cluster、Connection、Geo、Hashes、HyperLogLog、Keys、Lists、Pub/Sub、Scripting、Server、Sets、Sorted Sets、Strings、Transactions一共14个redis命令组两百多个redis命令,如果您有兴趣请上redis官网查看全部的redis命令,在这里我们只针对redis的常用命令以及五种数据类型相关的命令进行操作
1.启动redis-server.exe 服务器端
2.打开redis-cli.exe 客户端

redis的常用命令(redis中的key和value都区分大小写)

String类型的指令

    1. 存储: set key value
127.0.0.1:6379> set username laowang
OK
2. 获取: get key
127.0.0.1:6379> get username
"laowang"
3. 删除: del key
127.0.0.1:6379> del username
(integer) 1 Hash类型的指令
1. 存储: hset key field value
127.0.0.1:6379> hset myhash address beijing
(integer) 1
127.0.0.1:6379> hset myhash level one
(integer) 1
2. 获取:
* hget key field: 获取指定的field对应的值
127.0.0.1:6379> hget myhash level
"one"
* hgetall key:获取所有的field和value
127.0.0.1:6379> hgetall myhash
1) "address"
2) "beijing"
3) "level"
4) "one"
3. 删除: hdel key field
127.0.0.1:6379> hdel myhash level
(integer) 1 List类型的指令
1. 添加:
1. lpush key value: 将元素加入列表左侧
2. rpush key value:将元素加入列表右侧
127.0.0.1:6379> lpush myList 1
(integer) 1
127.0.0.1:6379> lpush myList 2
(integer) 2
127.0.0.1:6379> rpush myList 2
(integer) 3
127.0.0.1:6379> rpush myList 3
(integer) 4
2. 获取:lrange key start end :范围获取 (0 -1 指获取所有)
127.0.0.1:6379> lrange myList 0 -1
1) "2"
2) "1"
3) "2"
4) "3"
3. 删除:
1. lpop key: 删除列表最左边的元素,并将元素返回
2. rpop key: 删除列表最右边的元素,并将元素返回
127.0.0.1:6379> lpop myList
"2"
127.0.0.1:6379> rpop myList
"3" Set类型的指令 set类型的value是唯一的
1. 存储:sadd key value
127.0.0.1:6379> sadd myset one
(integer) 1
127.0.0.1:6379> sadd myset one
(integer) 0
127.0.0.1:6379> sadd myset ONE
(integer) 1
2. 获取:smembers key:获取set集合中所有元素
127.0.0.1:6379> smembers myset
1) "one"
2) "ONE"
3. 删除:srem key value:删除set集合中的某个元素
127.0.0.1:6379> srem myset ONE
(integer) 1 Sorted Set类型的指令
1. 存储:zadd key score value
127.0.0.1:6379> zadd mysort 666 laotie
(integer) 1
127.0.0.1:6379> zadd mysort 66 meimaobing
(integer) 1
127.0.0.1:6379> zadd mysort 6 chenduxiu
(integer) 1
2. 获取:zrange key start end [withscores]
127.0.0.1:6379> zrange mysort 0 -1
1) "chenduxiu"
2) "meimaobing"
3) "laotie" 127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "chenduxiu"
2) "6"
3) "meimaobing"
4) "66"
5) "laotie"
6) "666"
3. 删除:zrem key value
127.0.0.1:6379> zrem mysort laotie
(integer) 1 其他常用的指令 : 1. dbsize :返回当前数据库的 key 的数量。
127.0.0.1:6379> dbsize
(integer) 2 2. Keys pattern:查找所有符合给定模式 pattern 的 key 。
在redis中存值
127.0.0.1:6379> set One1 redis
OK
127.0.0.1:6379> set One2 mysql
OK
127.0.0.1:6379> set One3 oracle
OK
127.0.0.1:6379> set One4 mongodb
OK 127.0.0.1:6379> keys One*
1) "One3"
2) "One4"
3) "One1"
4) "One2" 127.0.0.1:6379> keys * (该指令不建议使用)
1) "myhash"
2) "One3"
3) "One4"
4) "One1"
5) "One2"
6) "mysort" 3. del key [key …] :删除给定的一个或多个key,以及对应的value,不存在的 key 会被忽略,该指令可以将任意数据类型删除
127.0.0.1:6379> del One1 One2
(integer) 2 4. type key :返回 key 所储存的值的类型。
127.0.0.1:6379> type mysort
zset
127.0.0.1:6379> type myhash
hash
127.0.0.1:6379> type One3
string 5. exists key :检查指定key是否存在
127.0.0.1:6379> exists hehe
(integer) 0
127.0.0.1:6379> exists myhash
(integer) 1 6. expire key seconds:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。seconds的单位为秒。
127.0.0.1:6379> expire One3 20
(integer) 1
127.0.0.1:6379> get One3
"oracle"
127.0.0.1:6379> get One3
"oracle"
127.0.0.1:6379> get One3
"oracle"
127.0.0.1:6379> get One3
(nil) 7. ttl key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以秒为单位,返回 key 的剩余生存时间。 127.0.0.1:6379> set myTtl myRedis
OK
127.0.0.1:6379> set myTtl2 myRedis2
OK
127.0.0.1:6379> expire myTtl 30
(integer) 1
127.0.0.1:6379> ttl myTtl
(integer) 20
127.0.0.1:6379> ttl myRedis
(integer) -2
127.0.0.1:6379> ttl myTtl2
(integer) -1 8. flushall:清空整个 Redis 服务器的数据(删除所有数据库的所有 key ),此命令从不失败。
flushdb :清空当前数据库中的所有 key,此命令从不失败。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty list or set) 欢迎各路大神批评指正

redis使用总结(一)(redis客户端使用)的更多相关文章

  1. Redis — CentOS6.4安装Redis以及安装PHP客户端phpredis

    一.安装Redis 1.下载安装包 wget http://download.redis.io/releases/redis-2.8.6.tar.gz 2.解压包 tar xzf redis-2.8. ...

  2. redis集群与分片(1)-redis服务器集群、客户端分片

    下面是来自知乎大神的一段说明,个人觉得非常清晰,就收藏了. 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型 ...

  3. 在linux安装redis单机和集群后,如何在windows上使用redis客户端或者java代码访问错误的原因很简单,就是没有连接上redis服务,由于redis采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问。

    这几天在学习在linux上搭建服务器的工作,可谓历经艰辛.可喜最后收获也不少. 这次是在linux上搭建redis服务器后从windows上缺无法访问,连接不上. 仔细回忆以前搭建nginx和ftp的 ...

  4. 深入Redis客户端(redis客户端属性、redis缓冲区、关闭redis客户端)

    深入Redis客户端(redis客户端属性.redis缓冲区.关闭redis客户端) Redis 数据库采用 I/O 多路复用技术实现文件事件处理器,服务器采用单线程单进程的方式来处理多个客户端发送过 ...

  5. Spring + Jedis集成Redis(集群redis数据库)

    前段时间说过单例redis数据库的方法,但是生成环境一般不会使用,基本上都是集群redis数据库,所以这里说说集群redis的代码. 1.pom.xml引入jar <!--Redis--> ...

  6. Redis设置认证密码 Redis使用认证密码登录 在Redis集群中使用认证密码

    Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用.这在安全性上会有一定的问题,所以需要启用Redis的认证密码,增加Redis服务器的安 ...

  7. 3.用Redis Desktop Manager连接Redis

    Redis Desktop Manager是Redis图形化管理工具,方便管理人员更方便直观地管理Redis数据. 然而在使用Redis Desktop Manager之前,有几个要素需要注意: 一. ...

  8. 4、解析配置文件 redis.conf、Redis持久化RDB、Redis的主从复制

    1.Units单位 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 对大小写不敏感 2.INCLUDES包含 和我们的Struts2配置文件类似,可以通过includes包 ...

  9. redis集群之REDIS CLUSTER

    redis集群之REDIS CLUSTER 时间 2016-04-11 17:05:00  NoSQL_博客园 原文  http://www.cnblogs.com/zhanchenjin/p/537 ...

随机推荐

  1. ab 站点压力测试工具

    ab--压力测试工具 前端时间由于需要测试一个网站的高并发的情况,使用到了一个ab测试工具,下面是我自己的体验及参考网上别人的博客所写,希望对大家有所帮助. ab工具简介 ab 全称:apache b ...

  2. linux中安装python+selenium+chrome

  3. javascript的数组之reduce()

    reduce()方法对累加器和数组中的每个元素(从左到右)应用到一个函数中,最终得到一个值并返回 const array1 = [1, 2, 3, 4]; const reducer = (accum ...

  4. Servlet.service() for servlet [jsp] in context with path [/Healthy_manager] threw exception [Unable to compile class for JSP] with root cause java.lang.IllegalArgumentException: Page directive: inval

    严重: Servlet.service() for servlet [jsp] in context with path [/Healthy_manager] threw exception [Una ...

  5. spring cloud

    如果是一个大型的网站,内部子系统较多.接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http 一样去3次握手什么的,减少了网络开销:其次就是RPC框架一般都有注册 ...

  6. day01 python入门之路

    Python之路,Day1 - Python基础1   本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼 ...

  7. App Store评论优化,让你的APP评论上涨

    App Store评论优化怎么做 App Store评论优化,让你的APP评论上涨 关于「ASO评论优化」,主要分为三块.换评论,买评论,引导用户写评论. 可能有些刚接触ASO的朋友会问,为什么要给A ...

  8. [Day23]IO(字节流、字符流)

    1.字节流 1.1 字节输出流OutputStream-抽象类,表示输出字节流的所有类的超类 (1)void close() 关闭此输出流并释放与此流相关的所有系统资源 (2)void flush() ...

  9. [dev] Go语言查看doc与生成API doc

    类似与javadoc,go也可以自动生成doc文档. 方法有两个: 1. 使用go doc工具 可以查看它的详细文档: go help doc 示例: 在这个目录下,我创建一个api包 ╰─>$ ...

  10. python之str字符串

    字符串是python非常重要的数据类型,它是一个序列(列表和元组也是序列),有下标,可以通过下标遍历字符串序列:同时字符串也是一个不可变数据类型,每次使用"+"拼接字符串时都会产生 ...