Redis基础——随记1

一、NoSQL

1、NoSQL的引言

NoSQL(Not Only SQL),即不仅仅是SQL,泛指非关系型的数据库。NoSQL这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。

2、为什么是NoSQL

随着互联网的兴起,传统的关系型数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以客服的问题。如商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈(音频,视频)存储等相关使用传统的关系型数据库实现就显得非常复杂,虽然能实现响应功能但是在性能上却不是那么乐观。nosql这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是sql。

3、NoSQL的四大分类

3.1、键值(Key-Value)存储数据库

1.说明:
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。

2.特点:

Key/values模型对于IT系统来说优势在于简单、易部署。但是如果DBA只对部分进行查询或更新的时候,Key/value就显得效率低下了。

3.相关产品:

Tokyo Cabinet/Tyrant、Redis、SSDB、Voldemort、Oracle BDB。

3.2、列存储数据库

1.说明:

这部分数据库通常是用来应对分布式存储的海量数据。

2.特点:

键依然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。

3.相关产品:

Cassandra、HBase、Piak

3.3、文档型数据库(document)

1.说明:

文档型数据库的灵感是来自于Lotus Notes办公软件的, 而且它同第一 种键值存储相类似该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。
文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。

2.特点:

以文档形式存储。

3.相关产品:

MongDB、CouchDB、MongDb(4.x),国内的SequoiaDB,已开源。

3.4、图形(Graph)数据库

1.说明:

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。
NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询。
API.

2.特点:

NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。

3.相关产品:

Neo4j、InfoGrid、Infoinite Graph。

4、NoSQL应用场景

数据模型比较简单
需要灵活性更强的IT系统
对数据库性能要求较高
不需要高度的数据一致性(NoSQL产品对于事务支持都不是特别良好)

二、Redis

1、什么是Redis?

在这里插入图片描述
1、redis默认有16个数据库,默认使用的是第0个。
2、可以使用select进行切换数据库。
3、keys* #查看数据库所有的值。
4、清除当前数据库:flushdb。
5、清楚数据库的全部内容:flushall。
6、默认端口号:6379。
7、Redis是单线程的!
官方表示,Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了。
Redis是C语言写的,官方提供的数据位100000+的QPS,完全不比同样使用key-value的Memecache差!
8、Redis为什么单线程还这么快?
(1)误区1:高性能的服务器一定是多线程的?
(2)误区2:多线程(CPU上下文会切换!)一定比单线程效率高!
(3)核心:redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换的!,耗时的操作),对于内存系统来说,如果没有上下文切换效率就是最高的。多次读写都是在一个CPU上的,在内存有限的情况下,这个就是最佳的方案!

2、Redis服务细节

在这里插入图片描述

3、Redis数据库相关指令

3.1、数据库操做指令

1.Redis中库说明:
使用redis的默认配置启动redis服务后,默认会存在16个库,编号0-15。
可以使用select 库的编号来选择一个redis的库。

127.0.0.1:7000> select 1
OK
127.0.0.1:7000[1]> 

2.Redis中操做库的指令:
清空当前的库 FLUSHDB、清空全部的库 FLUSHALL

3.2、操做key相关指令

1.DEL指令
—语法: DEL key [key …]
一作用:删除给定的一一个或多个key 。不存在的key会被忽略。
一可用版本: >= 1.0.0
—返回值: 被删除key的数量。

127.0.0.1:7000> keys *
1) "name"
127.0.0.1:7000> set age 19
OK
127.0.0.1:7000> set bir 2012-12-12
OK
127.0.0.1:7000> set content 北京市海淀区
OK
127.0.0.1:7000> keys *
1) "age"
2) "bir"
3) "name"
4) "content"
127.0.0.1:7000> del age bir
(integer) 2
127.0.0.1:7000> keys *
1) "name"
2) "content"

2.EXISTS指令
语法: EXISTS key
一作用: 检查给定key是否存在。
一可用版本: >= 1.0.0
一返回值: 若key存在,返回1,否则返回0。

127.0.0.1:7000> EXISTS name
(integer) 1
127.0.0.1:7000> EXISTS age
(integer) 0
127.0.0.1:7000> EXISTS age name bir
(integer) 1

3.EXPIRE
一语法: EXPIRE key seconds
一作用:为给定key设置生存时间,当key过期时(生存时间为0 ), 它会被自动删除。
一可用版本: >= 1.0.0
一时间复杂度: 0(1)
一返回值:设置成功返回1。

127.0.0.1:7000> keys *
1) "name"
2) "content"
127.0.0.1:7000> expire name 10
(integer) 1
127.0.0.1:7000> keys *
1) "content"
127.0.0.1:7000> 

4.KEYS
一语法: KEYS pattern
一作用:查找所有符合给定模式pattern的key 。
一语法:
KEYS 匹配数据库中所有key。
KEYS h?l1o 匹配hello, hallo和hxllo等。
KEYS h
1lo匹Eh1lo和heeeeello等。
KEYS h[ae]1lo 匹Ehello和hallo,但不匹Ehi11o。特殊符号用"I" 隔开
-可用版本: > 1.0.0
一返回值: 符合给定模式的key列表。

127.0.0.1:7000> keys *
1) "hllo"
2) "haello"
3) "hello"
4) "content"
127.0.0.1:7000> key h*llo
(error) ERR unknown command 'key'
127.0.0.1:7000> keys h*llo
1) "hllo"
2) "haello"
3) "hello"
127.0.0.1:7000> keys h?lo
1) "hllo"
127.0.0.1:7000> keys h[ae]llo
1) "hello"
127.0.0.1:7000> 

5.MOVE
一语法:MOVE key db
一作用:将当前数据库的key移动到给定的数据库db当中。
一可用版本: 1.0.0
一 返回值: 移动成功返回1,失败则返回8。

127.0.0.1:7000[1]> keys *
(empty list or set)
127.0.0.1:7000[1]> select 0
OK
127.0.0.1:7000> keys *
1) "hllo"
2) "haello"
3) "hello"
4) "content"
127.0.0.1:7000> move content 1
(integer) 1
127.0.0.1:7000> select 1
OK
127.0.0.1:7000[1]> keys *
1) "content"
127.0.0.1:7000[1]> select 0
OK
127.0.0.1:7000> keys *
1) "hllo"
2) "haello"
3) "hello"
127.0.0.1:7000> select 1
OK
127.0.0.1:7000[1]> get content
"\xe5\x8c\x97\xe4\xba\xac\xe5\xb8\x82\xe6\xb5\xb7\xe6\xb7\x80\xe5\x8c\xba"
127.0.0.1:7000[1]> 
[root@loaclhost bin]# ./redis-cli -p 7000 --raw
127.0.0.1:7000> select 1
OK
127.0.0.1:7000[1]> get content
北京市海淀区
127.0.0.1:7000[1]> 

6.PEXPIRE
一语法: PEXPIRE key milliseconds
一作用:这个命令和EXPIRE命令的作用类似,但是它以毫秒为单位设置key的生存时间,而不像EXPIRE 命令那样,以秒为单位。
一可用版本: >= 2.6.0
一时间复杂度:0(1)
一返回值:设置成功,返回1 key不存在或设置失败,返回0
7.PEXPIREAT
一语法: PEXPIREAT key milliseconds-timestamp
一作用:这个命令和EXPIREAT命令类似,但它以毫秒为单位设置key的过期unix时间戳,而不是像EXPIREAT那样, 以秒为单位。
一可用版本: 2.6.0
一返回值:如果生存时间设置成功,返回1。当key 不存在或没办法设置生存时间时,返回0。(查看EXPIRE 命令获取更多信息)
8.TTLI
一语法:TTLkey
一作用:以秒为单位,返回给定key的剩余生存时间(TL,time to live).
一可用版本: = 1.0.0
一返回值:
当key不存在时,返回-2 .
当key存在但没有设置剩余生存时间时,返回-1。
否则,以秒为单位,返回key的剩余生存时间。
一Note :在Redis 2.8以前,当key不存在,或者key没有设置剩余生存时间时,命令都返回-1。
9.PTTL I
一语法:PTTLkey
一作用:这个命令类似于TTL命令,但它以毫秒为单位返回key的剩余生存时间,而不是像TTL命令那样,以秒为单位。
一可用版本: >= 2.6.0
一返回值: 当key不存在时,返回-2。当key存在但没有设置剩余生存时间时,返回-1。
一否则,以毫秒为单位,返回key的剩余生存时间。
一注意:在Redis 2.8以前,当key不存在,或者key没有设置剩余生存时间时,命令都返回-1 。
10. RANDOMKEY
-语法:
RANDOMKEY
一作用:从当前数据库中随机返回(不删除) 一个key。
可用版本:>= 1.0.0
一返回值:当数据库不为空时,返回一个key。当数据库为空时,返回nil.
11. RENAME
一语法:
RENAME key newkey
一作用:将key改名为newkey。当key和newkey相同,或者key不存在时,返回一个错误。当newkey 已经存在时,RENAME命令将覆盖旧值。
一可用版本: >= 1.0.0
一返回值:改名成功时提示0K, 失败时候返回一 个错误。
12.TYPE
一语法: TYPE key
一作用:返回key所储存的值的类型。
一可用版本: >= 1.0.0
一返回值:
none (key 不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)

4、Redis五大数据类型

5.1、String类型

1.内存存储模型:
在这里插入图片描述
2.常用操做指令:
在这里插入图片描述

5.2、List类型

1.内存模型:
在这里插入图片描述
2.常用操做指令:
在这里插入图片描述

127.0.0.1:7000> LPUSH lists zhangsan xiaoming xiaohei zhangsan
4
127.0.0.1:7000> keys *
lists
name
127.0.0.1:7000> LRANGE lists 0 -1
zhangsan
xiaohei
xiaoming
zhangsan
127.0.0.1:7000> 

5.3、Set类型

1.存储模型:
Set集合:无序,不可重复。
在这里插入图片描述
2.基本命令:
在这里插入图片描述

127.0.0.1:7000> SADD sets zhangsan lishi zhangsan win7 win8 zhangsan wangmazi
5
127.0.0.1:7000> keys *
lists
sets
name
127.0.0.1:7000> TYPE sets
set
127.0.0.1:7000> SMEMBERS sets
win8
lishi
win7
wangmazi
zhangsan
127.0.0.1:7000> SMEMBERS sets
win8
lishi
win7
wangmazi
zhangsan
127.0.0.1:7000> SCARD sets
5
127.0.0.1:7000> spop sets
wangmazi
127.0.0.1:7000> 

5.4、Zset类型

特点:可排序的set、不可重复
1.内存模型:
在这里插入图片描述
2.基本命令:
在这里插入图片描述

127.0.0.1:7000> keys *
lists
sets
name
127.0.0.1:7000> ZADD zsets 1 zhangsan 2 lisi 3 wangwu 4 wangyabo 6 lisi
4
127.0.0.1:7000> keys *
lists
zsets
sets
name
127.0.0.1:7000> TYPE zsets
zset
127.0.0.1:7000> ZRANGE zsets 0 -1
zhangsan
wangwu
wangyabo
lisi

5.5、hash类型

特点: value是-个map结构存在key value key 无序的
1.内存模型:
在这里插入图片描述
2.常用命令:
在这里插入图片描述

127.0.0.1:7000> hset maps name zhangsan 
1
127.0.0.1:7000> type maps
hash
127.0.0.1:7000> hget maps name
zhangsan
127.0.0.1:7000> hset maps age 18
1
127.0.0.1:7000> hset maps bir 2012-12-03
1
127.0.0.1:7000> HGETALL maps
name
zhangsan
age
18
bir
2012-12-03
127.0.0.1:7000>

5、Redis远程连接

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值