Redis

目录

关系数据库

非关系型数据库(NoSQL)

Redis

概述

特点

数据类型

全局哈希表

String

Hash

List

Set

ZSet

设置失效时间


关系数据库

使用标准的SQL语句进行操作,不能被代替,基本数据还是存储在关系型数据库中。

优点:易于理解;

​ 使用方便,通用的SQL语言;

​ 易于维护,丰富的完整性大大降低了数据冗余和数据不一致的概率。

缺点:有IO瓶颈(硬盘I/O 是并发的瓶颈),

​ 海量数据查询效率较低。

非关系型数据库(NoSQL)

Not only SQL 泛指非关系型数据库

以键值对形式存储(key-value),没有固定的关系。

优点:高性能:有非常高的读写性能,得益于它的无关系性,数据库的结构简单;

​ 易于扩展:数据之间无关系;

​ 数据类型灵活: 无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。

缺点:只适合存放简单数据;

​ 不适合复杂数据的查询;

​ 不适合持久存放海量数据。

Redis

概述

redis主要用于数据存储;

redis运行在内存中,数据也保存在内存中;

它可以用作数据库、缓存和消息中间件(缓存:让数据离程序更近)。

特点

以键值对形式存储在内存中,也可以存储在硬盘上;

存储结构简单,性能高,易于扩展,支出多语言,保证操作的原子性(因为resdis执行命令是单线程;redis本身提供的所有API都是原子操作,redis中的事务其实是要保证批量操作的原子性);

支持多种数据类型。

数据类型

redis是键值对,键的类型是string;

有五种基本类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(sorted set:有序集合)

底层的数据结构有六种:简单动态字符串、双向链表、压缩列表、哈希表、跳表和整组数组。

在这里插入图片描述

全局哈希表

Redis 用一个全局哈希表来保存所有的键值对,这样既能满足应用存取哈希型结构的数据需求,又能提供快速查询功能。

在这里插入图片描述

​ 底层是 hash 结构,可以在 O(1)的时间内计算出 hash 值并且找到对应的 entry 位置(通过key计算位置),entry里面是一个一个 key 指针和 value 指针,其实还有其他信息,这也是 redis 之所以性能高的原因之一。

哈希冲突问题:

​ 提供两块内存空间,相当于扩容,将原来的映射渐进式的复制到扩容后的哈希表中,然后释放之前的空间。

String

redis最基本的数据类型,一个key对应一个value;

String类型是二进制安全的(可以包含任何数据,如jpg图片或序列化对象)。

单值缓存:只存储一个值,如手机号/邮箱验证码

​ set key value ;get key ;del key

对象缓存:建议是值不再改变(不对对象中数据操作时可以使用)

​ set user1: value(json 格式数据)

计数器: 如文章访问量

set key:1 0 设置文章访问量

incr key:1 值自增1,要求值是数字(文章访问量+1)

decr key:1 值自减1(文章访问量-1 )

get key:1 获得值

Web 集群 session 共享

session + redis 实现 session 共享

Hash

是一个 string 类型的 field(属性) 和 value 的映射表;

适合存储对象数据(适合存储对象属性值需要改变的场景,如电商购物车以用户 id 为 key、商品 id 为 field、商品数量为 value )。

hset key field value 存储一个哈希表 key 的键值

hmset key field1 value1 [field2 value2 …] 存储多个键值对

hget key field 获取哈希表 key 对应的 field 键值

hmget key field1 [field2 …] 批量获取哈希表 key 中多个 field 键值

hdel key field1 [field2 …] 删除哈希表 key 中的 field 键值

hlen key 返回哈希表 key 中的 field 的数量

hgetall key 返回哈希表 key 中所有的键值

hincrby key field 增加的值(减少给负数)

List

是简单的字符串列表,按照插入顺序排序;

实现栈、队列,可以将元素添加到列表的头部(左边)或尾部(右边);

常见用法:Stack= LPUSH + LPOP = FILO ;Queue = LPUSH + RPOP;

使用场景:可以用来存储接收到的消息数据。

lpush key value[value…] 将一个或多个值插入到 key 列表的表头(最左边)

rpush key value[value…] 将一个或多个值插入到 key 列表的表尾(最右边)

lpop key 移除并返回 key 列表的头元素

rpop key 移除并返回 key 列表的尾元素

lrange key start stop 返回列表key中指定区间内的元素,区间以及偏移量start和stop

Set

无序集合

sadd key member[member…] 往集合 key 中存入元素,元素存在则忽略,若 key 不存在则新建

srem key member[member…] 从集合 key 中删除元素

smembers key 获取集合 key 中所有元素

scard key 获取集合 key 的元素个数

ZSet

不允许重复的成员,但是是有序的;

每个元素都会关联一个 double 类型的分数,redis通过分数来为集合中的成员进行从小到大的排序;

zset 的成员是唯一的,但分数可以重复;

使用场景:记录微信朋友圈记录点赞用户。

zadd key score member[[score member]…] 往有序集合 key 中加入带分值元素

zrem key member[member…] 从有序集合 key 中删除元素

zscore key member 返回有序集合 key 中元素 member 的分值

zincrby key increment member 为有序集合 key 中元素 member 的分值加上 increment

zcard key 返回有序集合 key 中元素个数

zrange key start stop[withscores] 正序获取有序集合 keyastart 下标到 stop下标的元素

设置失效时间

EX 表示以秒为单位;PX 表示以毫秒为单位;EX,PX 不区分大小写。

set name jim EX 30 设置失效时间为 30 秒

ttl 键 查看剩余时间(秒)

pttl 键 查看剩余时间(毫秒)

设置值后设置有效时间

expire 键 时间(秒)

pexpire 键 时间(毫秒)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值