Redis --- 学习 NoSQL 五大类型

一,什么是NoSQL

 

NoSQL                

NoSQL = Not Only SQL (不仅仅是SQL)

关系型数据库:表格,行,列

泛指非关系型数据库,随着web 2.0 互联网的诞生!传统的关系型数据库很难对付 web 2.0 时代 !

尤其是超大规模的高并发的社区!暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,而且是我们当下必须要掌握的一个技术!

很多的数据类型 用户的个人信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式!不需要多月的操作就可以横向扩展的!Map<String,Object> 使用键值对来控制!


NoSQL 特点

解耦!

1,方便扩展(数据之间没有关系,很好扩展!)

2,大数据最高性能(Redis 一秒写8万次,读取11万,NoSQL的缓存记录级,是一种细粒度的缓存,性能会比较高!)

3,数据类型是多样型的!(不需要事先设计数据库!随取随用!如果是数据量十分大的表,很多人就无法设计了!)

4,传统 RDBMS 和 NoSQL

传统的 RDBMS 数据库

- 结构化组织

- SQL

- 数据和关系都存在单独的表中

- 操作操作,数据定义语言

- 严格的一致性

- 基础的事务

- .......

 NoSQL

- 不仅仅是数据

- 没有固定的查询语言

- 键值对存储,列存储,文档存储,图形数据库(社交关系)

- 最终一致性

- CAP定理和BASE (异地多活)初级架构师!

- 高性能,高可用,高可扩

- .........

 了解:3V+3高 ???  分布式文件系统 FastDFS

二,NoSQL的四大分类

        1,键值对存储  2,列存储  3,文档存储   4,图形数据库

KV键值对:

  •  新浪:Redis
  •  美团:Redis + Tair
  •  阿里,百度:Redis + memecache

文档型数据库(bson格式 和json一样):

  • MongoDB(一般必须要掌握)
  •   。MongoDB 是一个基于分布式文件存储的数据库,C++ 编写,主要用来处理大量的文档!
  •   。MongoDB 是一个介于 关系型数据库和非关系型数据中中间的产品!MongoDB 是非关系型数据库中功能最丰富,最像关系型数据库的!
  • ConthDB

列存储数据库:

  • HBase
  • 分布式文件系统

 图关系数据库:

        

  •  他不是存图形,放的是关系,比如:朋友圈社交网络,广告推荐!
  •  Neo4j , lnfoGrid;

了解非关系数据库

三,Redis 入门 

       概念 

Redis 是什么?

Redis (Remote Dictionary Server),即远程字典服务!

是一个开 源的使用 ANSI C语言编写,支持网络,可基于内存亦可持久化的日志型,Key-Value数据库,并提供多种语言的API。

Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!

Redis 能干嘛?

1,内存存储,持久化,内存中是断电即失,所以说持久化很重要(rdb,aof)

2,效率高,可以用于高速缓存

3,发布订阅系统

4,地图信息分析

5,计时器,计数器(浏览量!)


特性:                       

1,多样的数据类型  2,持久化   3,集群   4,事务 。。。。。

 注意:Wdinow 在Github上下载(停更很久了!)

==Redis推荐都是在Linux服务器上搭建的,我们是基于Linux学习!==

测试链接

Window 操作

 

 记住一句话,Window 下使用确实简单,但是Redis 推荐我们使用Linux去开发使用!

基础的使用

 Redis 默认有16个数据库

Redis 是单线程的!

 明白Redis 是很快的,官方表示,Redis是基于内存操作,CPU不是Redis 性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!所有就使用单线程了!

Redis 为什么单线程还这么快?

核心:redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU 上下文会切换:耗时的操作!!!),对于内存系统来说,如果没用上下文切换就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!

Redis  五大数据类型:

Redis -key

keys *           #查看所有的key

set  name  liu   # set key

EXISTS  name  #判断当前的key是否存在

move name 1     #移除当前key

EXPIRE name  10  #设置key的过期时间,单位是秒

ttl   name   #查看过期时间

type    name   #查看当前key的一个类型

String (字符串)

set  key1  v1        #设置值

get  key          #获取值

keys *        #获取所有的key

EXISTS  key1        #判断某一个key是否存在

APPEND key "hello"         #追加字符串,如果当前 key 不存在,就相当于setkey

STRLEN  key1         #获取字符串的长度

i++ 操作

set  views  0         # 初始化浏览量为0

incr  views          #自增 1

decr  views        #自减 1

INCRBY  views  10        #设置自增数量

 字符串范围  renge

set  key 1"liu"          #设置 key1 的值

GETRANGE  key1   0  3          #截取字符串 【0,3】

GETRANGE  key1   0  -1         #获取全部的字符串

替换 、

SETRANGE   key2  1  xx         #替换指定位置开始的字符串!

setex  (set   with  expire)        #设置过期时间

setnx  (set   not    exist)        #不存在  在设置

mset    k1 k2 k3 k4        #同时设置多个值

mget   k1  k2  k3           #同时获取多个值

msetnx   k1  k2   k3        # msetnx   是一个原子性的操作,要么一起成功,要么一起失败!

String类似的使用场景:value 除了是我们的字符还可以是我们的数字!

  • 计数器
  • 统计多单位的数量 uid:1 是id
  • 粉丝数
  • 对象缓存存储!

List :(数据类型)


基本的数据类型,列表

 

 在Redis 里面,我们可以把List玩成,栈,队列,阻塞队列!

所有的List命令都是以L开头的

LPUSH  list   xxx           #将一个值或者多个值,插入到列表头部

LRANGE  list  0  -1         # 获取list中值!也可以区分获取值

RPUSH list  righr           #将一个值或多个值,插入到列表位部 (右)

LPOP  list          # 移除list 的第一个元素

RPOP  list        #移除list的最后一个元素

Lindex   list  1         #获取下班的第一个值  

Lpush   list  xxx           # 添加值

Lrem  list   1 xxx           #移除  这个 1 是移除几个 可以重复

Ltrim  mylist  12          #通过下标截取指定的长度,这个list已经被改变了 ,截断了只剩下截取的元素!

 Set  (集合)

set 中的值是不能重读的 

sadd  myset "hello"        # set 集合中添加

SMEMBERS  myset        # 查看指定set的所有值

SISMEMBER   myset   hello        # 判断某一个值是不是在set集合中

scard  myset        #获取set集合中的内容元素个数!

srem  myset  hello        # 移除set 集合中的指定元素

SRANDMEMBER  myset        #随机抽选出一个元素

spop   myset        #随机删除一些 set 集合中的元素!

 

 Hash(哈希)

Map集合,key -<key-vlaue> 时候这个值是一个map集合!本质和String类型没有太大区别,还是一个简单的 key-vlaue!

hset  myhash  field1  liu        #set 一个具体 key -vlaue

hget  myhash   field1          #获取一个字段值

hmset  myhash  field1  hello  field2   world          #获取多个字段值

hgetall   myhash            #获取全部的数据

hdel  myhash field         # 删除hash指定 key字段!对应的vlaue值也就消失了!

hlen  myhash        #获取myhash表的字段数量

HEXISTS   myhash field1        #判断hash中指定字段是否存在!

hkeys    myhash        #只获取所有field

hvals   myhash          #只获取所有value

 Zset(有序集合)

zadd  myset  1   noe         #添加一个值

zadd  myset   2   two  3  three           #添加多个值

-----    排序如何实现 --------

zadd  salary  2500  xiaohong        #添加三个用户

ZRANGEBYSCORE  salary  -inf  +inf        #显示全部的用户  从小到大

ZRANGEBYSCORE  salary   -inf  +inf   withscores        #显示全部的用户并且附带成绩

ZRANGEBYSCORE  salary  -inf  2500  withscores   # 显示工资小于2500 员工的降序排序

zrem salary   liu        #移除有序集合中的指定元素

zcard  salary        #获取有序集合中的个数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值