Redis的认识

本文介绍了Redis作为非关系型数据库的特点,包括其非结构化、非关联型和非SQL查询特性。深入探讨了Redis的起源、特点,如键值型、原子性操作和多种数据结构支持。同时,概述了Redis的应用场景,如缓存、计数器、分布式锁等。还详细阐述了Redis的数据类型,包括String、Hash、List、Set和SortedSet,以及它们的常用命令和操作。最后,提到了Redis的启动方法和一些高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、认识nosql

1.1结构化与非结构化

MySQL、Oracle、DB2为关系型数据库,结构化数据库

Redis、memcached等为非关系型数据库,非结构化数据库

1.2关联型

MySQL、Oracle、DB2为关联型数据库

Redis、memcached等为非关联型数据库

1.3SQL查询与非SQL查询

MySQL、Oracle、DB2为SQL查询

Redis、memcached等为非SQL查询

1.4 SQL与nosql对比

SQLnosql
数据结构结构化非结构化
数据关联关联的无关联的
查询方式SQL查询非SQL查询
事务特征ACIDBASE
存储方式磁盘内存
扩展性垂直水平
使用场景(1)数据结构固定 (2)相关业务对数据安全性、一致性要求较高(1)数据结构不固定(2)对一致性、安全性要求不高(3)对性能要求

1.5初识Redis

1.5.1 Redis诞生于2009年全称是Remote Dictionary Server,基于内存操作、键值型、非关系型、非结构化

1.5.2 特征

1.5.2.1 键值型,value支持多种不同数据结构

1.5.2.2 单线程,每个命令具备原子性

1.5.2.3 低延迟,速度快(基于内存,IO多路复用,良好的编码)

1.5.2.4 支持数据持久化

1.5.2.5 支持主从集群,分片集群

1.5.2.6 支持多语言客户端

1.5.3 应用场景

1.5.3.1 缓存[热数据]

1.5.3.2 计数器

1.5.3.3 分工式锁与单线程机制

1.5.3.4 最新列表

1.5.3.5 队列

1.5.3.6 排行榜

1.5.3.7 位操作[大数据处理]

1.5.3.8 session共享

1.5.4 Redis启动

默认启动:Redis -server 会阻塞

指定配置启动:Redis -server Redis.conf

Redis命令行客户端:redis-cli -h 127.0.0.1 -a 123321

二、 Redis数据类型

基本类型 String Hash List Set SortedSet

特殊类型 GEO(坐标类型)BitMap(位图)HyPerLog

三、Redis通用命令

set 增加或修改

get 查询

del 删除

exists 判断key是否存在

TTL 查看一个key的剩余有效期

keys 查看符号模块的所有key

expire 给一个key设置有效期,有效期到期时该key会被自动删除

四、String类型

String:普通字符串

int:整数类型,可以自增,自减操作

float:浮点类型

底层都是字节数组形式存储,最大空间不能超过512M。

常用命令

INCR:让一个整型的key自增1.

SET:添加或者修改已经存在的一个String类型的键值对

MSET:批量添加多个String类型的键值对

GET:根据key获取String类型的value

MGET:根据多个key获取多个String类型的value

INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2

INCRBYFLOAT:让一个浮点类型的数字自增并指定步长

SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

SETEX:添加一个String类型的键值对,并且指定有效期

五、Hash类型

Hash介绍

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD。

Hash常用命令

HSET key field value:添加或者修改hash类型key的field的值

HGET key field:获取一个hash类型key的field的值

HMSET:批量添加多个hash类型key的field的值

HMGET:批量获取多个hash类型key的field的值

HGETALL:获取一个hash类型的key中所有的field和value

HKEYS:获取一个hash类型的key中的所有的field

HVALS:获取一个hash类型的key中的所有的value

HINCRBY:让一个hash类型key的字段值自增并指定步长

HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

六、List类型

List介绍

Redis中list类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

List类型特征

有序 元素可以重复 插入和删除快 查询速度一般

List应用场景

常用来存储一个有序数据

List常见命令

LPUSH key element...:向列表左侧插入一个或多个元素

LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

RPUSH key element ... :向列表右侧插入一个或多个元素

RPOP key:移除并返回列表右侧的第一个元素

LRANGE key star end:返回一段角标范围内的所有元素

l BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

栈、队列

如何利用List结构模拟一个栈?

栈特点:【FILO 先进后出】【入口出口在同一边】

可以使用LPUSH & LPOP | RPUSH & RPOP模拟

如何利用List结构模拟一个队列?

队列特点:【FIFO 先进先出】【入口与出口不在同一边】

可以使用LPUSH & RPOP | RPUSH & LPOP模拟

如何利用List结构模拟一个阻塞队列?

入口和出口在不同边

出队时采用BLPOP或BRPOP

七、Set类型

Set介绍

Redis的set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征。

Set特征

(1)无序

(2)元素不可重复

(3)查找快

(4)支持交集、并集、差集等功能

应用场景

好友列表、共同好友。

常见命令

  • SADD key member...:向set中添加一个或多个元素

  • SREM key member ... : 移除set中的指定元素

  • SCARD key: 返回set中元素的个数

  • SISMEMBER key member:判断一个元素是否存在于set中

  • SMEMBERS:获取set中的所有元素

  • SINTER key1 key2 ... :求key1与key2的交集

  • SDIFF key1 key2 ... :求key1与key2的差集

  • SUNION key1 key2 ..:求key1和key2的并集

八、SortedSet类型

SortedSet介绍

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。

特征

  • 可排序

  • 元素不重复

  • 查询速度快

应用场景

SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

常见命令

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值

  • ZREM key member:删除sorted set中的一个指定元素

  • ZSCORE key member : 获取sorted set中的指定元素的score值

  • ZRANK key member:获取sorted set 中的指定元素的排名

  • ZCARD key:获取sorted set中的元素个数

  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数

  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值

  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素

  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素

  • ZDIFF、ZINTER、ZUNION:求差集、交集、并集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值