Redis基础

redis数据库存的是键值对,是Nosql数据库

1.初识Redis

Redis(Remote Dictionary Server)远程词典服务器,是一个基于内存的键值型NoSQL数据库。

特征:

键值型,value支持多种不同数据结构,功能丰富

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

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

支持数据持久化

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

支持多语言客户端

SQL:关系型数据库(国外叫SEQL)

存储在磁盘上,可垂直扩展,使用场景有:1)数据结构固定2)相关业务对数据安全性、一致性要求较高

(1)结构化(Structeured)

(2)关联的(Relational)

通过外键来连接两个表之间的关系

(3)SQL查询

固定查询,如: SELECT ID FROM USER WHERE ID = 1

好处:只要是关系型数据库都可以使用这个语句

(4)ACID

事务必须满足ACID特性:原子性,一致性,隔离性,持久性

NoSQL:非关系型数据库

存储在内存上,可水平扩展,使用场景有:1)数据结构不固定 2)对一致性、安全性要求不高 3)对性能要求高

(1)非结构化

(2)非关联的

通过JSON文档嵌套的形式来连接

(3)非SQL

语法不统一,如:

Redis :get user:1

MongDB:db.user.find({_id:1})

elasticsearch:GET http://localhost:9200/users/1

优点:使用简单,不需要学习语法

缺点:不统一

(4)BASE

满足基本事务或没有事务

2.Redis基础

2.1 Redis 数据结构

key一般是String类型,value的类型多种多样

2.2 通用命令

通用指令是部分数据类型的,都可以使用的指令,常见的有:

KETS:查看符合模板的所有key,不建议在生产环境设备上使用(redis是一个集群环境)

DEL:删除一个指定的key

EXISTS:判断key是否存在

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

TTL:查看一个KEY的剩余有效期,-2已删除 -1永久有效

2.3 String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型,其value是字符串,不过根据字符串的格式不同,又可以分为3类:

String:普通字符串

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

float:浮点类型,可以做自增、自减操作

String类型常见的命令:

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

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

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

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

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

INCRBY:让一个整型的key自增并指定步长,

Redis的key的存储格式:

[项目名]:[业务名]:[类型]:[id]

2.4 Hash类型

Hash类型,也叫散列,其value是一个无序字典,类似于Java只的hashmap结构。

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

Hash常见命令:基本就是在常见命令前面加上一个'H'

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

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

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

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

2.5 List 类型

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

用在保存对顺序有要求的数据,如:点赞、评论

特征也与LinkedList类似:

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

List常见命令有:

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

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

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

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

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

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

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

先进后出

入口和出口在一起(LPUSH 和 LPOP, RPUSH 和 RPOP)

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

先进先出

入口和出口不在一起(LPUSH 和 RPOP , RPUSH 和 LPOP)

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

入口和出口不在同一边

出队时采用BLPOP或者BRPOP

2.6 Set类型

String的常见命令有:

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的并集

2.7 SortedSet类型

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

他具备如下特性:可排序;元素不重复;查询速度快。

因此经常被用来作为排行榜项目

常见命令:

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:让score值在给定范围内的所有元素的个数;

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

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

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

注:以上排序均为按照score升序排名。如果要降序则在命令的Z后面加上REV

案例:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小劉要努力~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值