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. [LeetCode] Expressive Words 富于表现力的单词

    Sometimes people repeat letters to represent extra feeling, such as "hello" -> "he ...

  2. LeetCode Monotone Stack Summary 单调栈小结

    话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...

  3. linux学习:文件处理相关命令用法整理(正则表达式)

    指令:ls.cat.du.rename.dirname.basename.sort.diff.seq.head.tail.tree.chmod.cut.paster.正则 一:统计文件大小,行数,字符 ...

  4. textarea 中的换行符

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. java字符串实现正序和倒序输出

    ##一共4种方式 /*         * string倒序输出          * 利用String类的toCharArray(),再倒序输出数组的方法         * 2018-5-18 1 ...

  6. XML自学笔记

    1.    xml指可扩展标记语言,(extensible markup language),该语言被设计用来传输和存储数据,HTML被设计用来显示数据 XML标签没有被预定义,需要自定义标签:XML ...

  7. 19个实例学会plsql

    --p1 begin dbms_output.put_line('你好 世界'); end; --p2 引入变量 declare age ; height ; begin dbms_output.pu ...

  8. 【C++】链表回环检测

    //链表回环检测问题 #include<iostream> #include<cstdlib> using namespace std; ; struct node { int ...

  9. FSPageContentView这个库需要修改源码才能用,否则有黑屏bug

    去掉 - (instancetype)initWithFrame:(CGRect)frame childVCs:(NSArray *)childVCs parentVC:(UIViewControll ...

  10. Linux 的umask详解

    1.由权限得到umask的值 umask是一个系统变量,是一个由3个八进制数字组成的值,具体含义见表:每个数字都是八进制值1.2.4的OR操作结果. 作用:当文件被创建时,为文件的访问权限设定一个掩码 ...