💛任职要求中的熟系Redis,你真的熟悉吗?💛

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

1.JPG


一、NoSQL



1.1、NoSQL引言



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



1.2、为什么是NoSQL


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

告诉了世界不仅仅是sql。


1.3、NoSQL的四大分类


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


1.3.1.1、说明


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


1.3.1.2、特点


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


1.3.1.3、相关产品


  1. Tokyo Cabinet/Tyrant,
  2. Redis
  3. SSDB
  4. Voldemort
  5. Oracle BDB


1.3.2、列存储数据库


1.3.2.1、说明


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


1.3.2.2、特点


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


1.3.2.3、相关产品


  1. Cassandra
  2. HBase
  3. Riak.


1.3.3、文档型数据库


1.3.3.1、说明


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


1.3.3.2、特点


   以文档形式存储。


1.3.3.3、相关产品


  1. MongoDB
  2. CouchDB
  3. MongoDb(4.x)
  4. SequoiaDB(国内)


1.3.4、图形(Graph)数据库


1.3.4.1、特点


   图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。


1.3.4.2、相关产品


  1. Neo4J
  2. InfoGrid
  3. Infinite Graph


1.4、NoSQL应用场景


  • 数据模型比较简单
  • 需要灵活性更强的IT系统
  • 对数据库性能要求较高
  • 不需要高度的数据一致性


二、Redis入门


2.1、概述


2.JPG


redis是一个内存型的数据库


2.2、Redis特点


  1. Redis是一个高性能key/value内存型数据库。
  2. Redis支持丰富的数据类型 。
  3. Redis支持持久化 。
  4. Redis单线程,单进程。


2.3、Redis的安装(Linux版)


2.3.1、下载Redis源码包


下载地址直达

3.JPG


2.3.2、上传并解压


tar -zxvf redis-4.0.10.tar.gz
复制代码

4.JPG


2.3.3、安装gcc


yum install -y gcc
复制代码


2.3.4、进入解压缩目录


make MALLOC=libc
复制代码


2.3.5、编译完成后执行如下命令


make install PREFIX=/usr/redis
复制代码


2.3.6、进入/usr/redis目录启动redis服务


./redis-server
复制代码

5.JPG

 

  一旦出现这个页面就代表Redis启动了!


2.3.7、进入bin目录执行客户端连接操作


./redis-cli –p 6379        (终端不展示中文)
/redis-cli –p 6379 --raw  (终端展示中文)
复制代码


2.4、Redis安装的细节


redis启动服务的 细节

   

如果直接使用./redis-server方式启动使用的是redis-server这个shell设置,我们在启动的时候,要先启动服务器 ./redis-server 然后克隆窗口(不可以按ctrl+c暂停),在新窗口中启动客户端 ./redis-cli –p 6379


如何在启动redis时指定配置文件启动

 

 默认在reidis安装完成之后在安装目录没有任何配置文件,需要在源码目录中复制redis.conf配置文件到安装目录,具体操作:


  1. 进入源码目录,复制文件
cp redis.conf /usr/redis
复制代码


  1. 进入/usr/redis的安装目录查看复制配置文件
cd /usr/redis
 ls
复制代码


  1. 进入bin目录加载配置启动
./redis-server ../redis.conf
复制代码


redis中库的概念

   库是database 用来存放数据的一个基本单元,一个库可以存放key-value键值对,redis中每一个库都有一个唯一名称(编号),从0开始,默认库的个数是16个库,库的编号0-15,默认使用的是0号库。     我们可以使用命令来切换库,每个库是相互隔离的,每个库都可以有相同或者不同的key和value,互不影响。


# 切换库
select dbid(库编号)
# 清空当前库
flushDB   
# 清空所有库 
flushAll 
复制代码


开启Redis远程连接

  1. 修改配置文件开启远程连接
vim redis.conf
复制代码


  1. 修改配置,按两下键盘上的g到文章的第一个字母,然后在ntework章节中找到bind属性,默认:bind 127.0.0.1 只允许本机访问,修改为:
# 允许一切客户端访问
bind 0.0.0.0 
复制代码


  1. 以配置文件的方式重启Redis
./redis-server ../redis.conf
复制代码


  1. 可以在客户端中关闭Redis
# (切记前面有一个空格)
hutdown
复制代码


三、Redis数据库相关指令


3.1、数据库操作指令


3.1.1、库的说明


   Rsdis默认配置器动Redis服务后,默认会存在16个库,编号从0-15,可以使用select 库的编号 ,来选择一个Rsdis的库。


seelect 库编号
复制代码


3.1.2、清空库


# 清空当前的库 
FLUSHDB
# 清空全部的库 
FLUSHALL
复制代码


3.1.3、redis客户端显示中文


./redis-cli  -p 7000 --raw
复制代码


3.2、操作key的相关指令


3.2.1、DEL指令


3.2.1.1、语法


DEL key [key ...] 
复制代码


3.2.1.2、作用


   删除给定的一个或多个key 。不存在的key 会被忽略。


3.2.1.3、返回值


   被删除key的数量。


3.2.2、EXISTS指令


3.2.2.1、语法


EXISTS key
复制代码


3.2.2.2、作用


   检查给定key是否存在。


3.2.2.3、返回值


   若key 存在,返回1 ,否则返回0。



3.2.3、EXPIRE指令


3.2.3.1、语法


EXPIRE key seconds
复制代码


3.2.3.2、作用


   为给定key设置生存时间,当key 过期时(生存时间为0 ),它会被自动删除。他的时间复杂度为O(1)。


3.2.3.3、返回值


   设置成功返回1。


3.2.4、PEXPIRE指令


3.2.4.1、语法


PEXPIRE key milliseconds
复制代码


3.2.4.2、作用


   这个命令和EXPIRE 命令的作用类似,但是它以毫秒为单位设置key 的生存时间,而不像EXPIRE 命令那样,以秒为单位。他的时间复杂度也是 O(1)


3.2.4.3、返回值


   设置成功,返回1  key 不存在或设置失败,返回0


3.2.5、KEYS指令


3.2.5.1、语法


KEYS pattern
复制代码

   

他的pattern是一种通配符,可以进行匹配:


  1. KEYS * :匹配数据库中所有key 。
  2. KEYS h?llo:匹配hello ,hallo 和hxllo 等。
  3. KEYS h*llo:匹配hllo 和heeeeello 等。
  4. KEYS h[ae]llo:匹配hello 和hallo ,但不匹配hillo 。特殊符号用 "\" 隔开。


3.2.5.2、作用


   查找所有符合给定模式pattern 的key 。


3.2.5.3、返回值


   符合给定模式的key列表。


3.2.6、MOVE指令


3.2.6.1、语法


MOVE key db
复制代码


3.2.6.2、作用


   将当前数据库的key 移动到给定的数据库db 当中。


3.2.6.3、返回值


   移动成功返回1 ,失败则返回0


3.2.7、TTL指令


3.2.7.1、语法


TTL key
复制代码

3.2.7.2、作用


以秒为单位,返回给定key 的剩余生存时间(TTL, time to live)。


3.2.7.3、返回值


  1. 当key 不存在时,返回-2 。
  2. 当key 存在但没有设置剩余生存时间时,返回-1 。
  3. 否则,以秒为单位,返回key 的剩余生存时间。
  4. 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。


3.2.8、PTTL指令


3.2.8.1、语法


PTTL key
复制代码


3.2.8.2、作用


    这个命令类似于TTL 命令,但它以毫秒为单位返回key 的剩余生存时间,而不是像TTL 命令那样,以秒为单位。


3.2.8.3、返回值


  1. 当key 不存在时,返回-2 。当key 存在但没有设置剩余生存时间时,返回-1 。
  2. 否则,以毫秒为单位,返回key 的剩余生存时间。
  3. 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。


3.2.9、RANDOMKEY指令


3.2.9.1、语法


RANDOMKEY
复制代码


3.2.9.2、作用


   从当前数据库中随机返回(不删除) 一个key 。


3.2.9.3、返回值


   当数据库不为空时,返回一个key 。当数据库为空时,返回nil 。


3.2.10、RENAME指令


3.2.10.1、语法


RENAME key newkey
复制代码


3.2.10.2、作用


   将key 改名为newkey 。当key 和newkey 相同,或者key 不存在时,返回一个错误。当newkey 已经存在时,RENAME 命令将覆盖旧值。


3.2.10.3、返回值


   改名成功时提示OK ,失败时候返回一个错误。


3.2.11、TYPE指令


3.2.11.1、语法


TYPE key
复制代码


3.2.11.2、作用


返回key 所储存的值的类型。
复制代码


3.2.11.3、返回值


  1. none (key 不存在)
  2. string (字符串)
  3. list (列表)
  4. set (集合)
  5. zset (有序集)
  6. hash (哈希表)


四、Redis中的数据类型


4.1、String类型


4.1.1、内存模型


6.JPG


4.1.2、常用操作命令


命令 说明
set 设置一个key/value
get 根据key获得对应的value
mset 一次设置多个key value
mget 一次获得多个key的value
getset 获得原始key的值,同时设置新值
strlen 获得对应key存储value的长度
append 为对应key的value追加内容
getrange 截取value的内容,-1可以代表末尾(索引0开始)
setex 设置一个key存活的有效期(秒)
psetex 设置一个key存活的有效期(毫秒)
setnx 存在不做任何操作,不存在添加
msetnx 可以同时设置多个key,原子操作,只要有一个存在都不保存
decr 进行数值类型的-1操作
decrby 根据提供的数据进行减法操作
Incr 进行数值类型的+1操作
incrby 根据提供的数据进行加法操作
Incrbyfloat 根据提供的数据加入浮点数


4.2、List类型


   Redis中的List类型相当于java中list 集合,他的特点是元素有序且可以重复


4.2.1、内存模型


7.JPG


4.2.2、常用操作指令


命令 说明
lpush 将某个值加入到一个key列表头部(从左添加)
lpushx 同lpush,但是必须要保证这个key存在
rpush 将某个值加入到一个key列表末尾(从右边开始放元素)
rpushx 同rpush,但是必须要保证这个key存在
lpop 返回和移除列表左边的第一个元素,并且返回
rpop 返回和移除列表右边的第一个元素,并且返回
lrange 获取某一个下标区间内的元素(遍历,默认从0开始,最后的可以用-1)
llen 获取列表元素个数
lset 设置某一个指定索引的值(索引必须存在)
lindex 获取某一个指定索引位置的元素
lrem 删除重复元素 lerm lists 3 zhangsan(删除lists集合中3个zhangsan)
ltrim 保留列表中特定区间内的元素
linsert 在某一个元素之前,之后插入新元素


4.3、Set类型


4.3.1、内存模型


8.JPG


4.3.2、常用命令


命令 说明
sadd 为集合添加元素
smembers 显示集合中所有元素,实际上是无序
scard 返回集合中元素的个数
spop 随机返回一个元素 并将元素在集合中删除
smove 从一个集合中向另一个集合移动元素 ,必须是同一种类型
srem 从集合中删除一个元素
sismember 判断一个集合中是否含有这个元素
srandmember 随机返回元素
sdiff 去掉第一个集合中其它集合含有的相同元素
sinter 求交集
sunion 求和集


4.4、ZSet类型


   他是一个可排序的set集合 且不可重复 ,又称作sortSet 。


4.4.1、内存模型


网络异常,图片无法展示
|


4.4.2、常用命令


命令 说明
zadd 添加一个有序集合元素
zcard 返回集合的元素个数
zrange 升序 zrevrange 降序 返回一个范围内的元素
zrangebyscore 按照分数查找一个范围内的元素
zrank 返回排名
zrevrank 倒序排名
zscore 显示某一个元素的分数
zrem 移除某一个元素
zincrby 给某个特定元素加分


4.5、Hash类型


    value中放一个map结构,存在key和value,key是无序的


4.5.1、内存模型

10.JPG


4.5.2、常用命令


命令 说明
hset 设置一个key/value对
hget 获得一个key对应的value
hgetall 获得所有的key/value对
hdel 删除某一个key/value对
hexists 判断一个key是否存在
hkeys 获得所有的key
hvals 获得所有的value
hmset 设置多个key/value
hmget 获得多个key的value
hsetnx 设置一个不存在的key的值
hincrby 为value进行加法运算(实现自增)
hincrbyfloat 为value加入浮点值(最多保留17位)



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
存储 消息中间件 NoSQL
redis入门到精通系列(一):入门redis看这一篇就够了
如果你是计算机专业学生 ,那么一定使用过关系型数据库mysql。在请求量小的情况下,使用mysql不会有任何问题,但是一旦同时有成千上万个请求同时来访问系统时,就会出现卡顿甚至系统崩溃的情况。最典型的例子就是早期的12306购票网站,一旦到了购票高峰期,12306肯定崩溃。造成这个原因的罪魁祸首就是关系型数据库。
1459 0
redis入门到精通系列(一):入门redis看这一篇就够了
|
3月前
|
存储 NoSQL Redis
redis入门学习
redis入门学习
26 0
|
3月前
|
存储 自然语言处理 NoSQL
Redis学习基础
【1月更文挑战第6天】 一、Redis介绍 二、Redis各种常用命令 1.Redis服务启动命令: 2.Redis通用命令 3.Redis字符串类型常用命令: 4.Redis哈希操作命令 5.Redis列表操作命令 6.Redis集合操作命令 7.Redis有序集合操作命令 三、Redis在JAVA中的使用步骤 1.Redis在JAVA中的配置 2.Redis在JAVA中的具体使用 1.字符串类型的使用 2.哈希类型的使用 3.列表类型的使用 4.集合类型的使用 5.有序集合类型的使用
48 1
|
4月前
|
存储 NoSQL Linux
【Redis入门】 —— 关于Redis的一点儿知识
【Redis入门】 —— 关于Redis的一点儿知识
|
8月前
|
存储 JSON 自然语言处理
Redis基础学习
Redis基础学习
71 0
|
9月前
|
存储 缓存 监控
Redis进阶指南:如何更高效地熟悉和运用Redis?
Redis是一种强大的缓存和数据存储系统,熟悉和灵活运用Redis对于开发者来说至关重要。本文将为你提供一些实用的方法和建议,帮助你更高效地熟悉和运用Redis。从阅读官方文档、进行实际项目实践,到掌握常用命令和功能,以及性能优化和监控等方面,我们将一步步引导你提升Redis的技能水平。让我们一起深入了解Redis,发挥其优势,提升开发效率吧!
117 0
|
9月前
|
存储 消息中间件 缓存
|
存储 NoSQL 安全
【Redis】回顾下Redis基础知识点,还记得哪些?
回顾下Redis基础知识点,还记得哪些?Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 的数据类型都是基于基本数据结构的,比如支持它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型 ,同时对程序员透明,无需进行额外的抽象,使用方便。
103 0
|
存储 NoSQL 算法
redis基础知识
redis基础知识
168 0
redis基础知识
|
NoSQL Redis 开发者
redis 入门-redis 基础操作| 学习笔记
快速学习 redis 入门-redis 基础操作
93 0
redis 入门-redis 基础操作| 学习笔记