目录
一、Redis简介
1.键值型
2.NoSQL
2.1关联和非关联
2.2查询方式
2.3事务
2.4总结
二、Redis常见命令
2.1 通用命令
2.2 String 命令
2.3 Hash范例
2.4 List类
2.5 Set集合
2.6 SortedSet范例
一、Redis简介
Redis是一种键值型的NoSql数据库,这里有两个关键字:
1.键值型
所谓的键值型就是Redis中存储数据是以key、value的形式存储的,key 的值唯一,但value的值各种各样,可以是字符串、数值、集合以致是一长串的JSON。
而NoSql则是相对于传统关系型数据库而言,有很大差别的一种数据库。
2.NoSQL
NoSQL的含义并非是“不是SQL”的意思,它更接近于“Not Only SQL”(不光仅是SQL)大概黑白SQL数据库,是相对于传统关系型数据库而言有很大差别的一种数据库,同时也被称作黑白关系型数据库。
传统关系型数据库是结构化数据,每一张表都有严酷的约束信息:字段名、字段数据范例、字段约束等等信息,插入的数据必须遵守这些约束:
而NoSql则对数据库格式没有严酷约束,每每形式松散,自由。
可以是键值型:
也可以是文档型
以致还可以是图格式
2.1关联和非关联
在关系型数据库当中,为了表示两张表之间多对多的关系,我们每每会创建第三张表作为他们之间的关系表,关系表的字段作为外键指向两张表的主键。
而非关系型数据库之间不存在关联关系,那如何表示他们之间的关系呢?一般是通过代码逻辑大概数据之间的耦合所表示,以下就是数据耦合的例子:
- {
- id: 1,
- name: "张三",
- orders: [
- {
- id: 1,
- item: {
- id: 10, title: "荣耀6", price: 4999
- }
- },
- {
- id: 2,
- item: {
- id: 20, title: "小米11", price: 3999
- }
- }
- ]
- }
复制代码 此处要维护“张三”的订单与商品“光彩”和“小米11”的关系,不得不冗余的将这两个商品保存在张三的订单文档中,不够优雅。还是建议用业务来维护关联关系。
2.2查询方式
传统关系型数据库有一套同一的语言去操纵数据库,也就是SQL语言,而非关系型数据库则是没有一套同一的语言
2.3事务
关系型数据库每每能够满足事务的四大特性(ACID)分别是原子性、划一性、隔离性、长期性。
而非关系数据库每每不支持事务,只能实现基本的划一性。
2.4总结
除了上述四点以外,在存储方式、扩展性、查询性能上关系型与非关系型也都有着显著差别,总结如下:
二、Redis常见命令
2.1 通用命令
通用指令是部分数据范例的,都可以使用的指令,常见的有:
- KEYS:查看符合模板的全部key
- DEL:删除一个指定的key
- EXISTS:判定key是否存在
- EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
- TTL:查看一个KEY的剩余有效期
通过help [command] 可以查看一个命令的详细用法,例如:
- # 查看keys命令的帮助信息:
- 127.0.0.1:6379> help keys
- KEYS pattern
- summary: Find all keys matching the given pattern
- since: 1.0.0
- group: generic
复制代码 2.2 String 命令
String范例,也就是字符串范例,是Redis中最简单的存储范例。
其value是字符串,不外根据字符串的格式差别,又可以分为3类:
- string:普通字符串
- int:整数范例,可以做自增、自减操纵
- float:浮点范例,可以做自增、自减操纵
不管是哪种格式,底层都是字节数组形式存储,只不外是编码方式差别。字符串范例的最大空间不能凌驾512m.
String的常见命令有:
- SET:添加大概修改已经存在的一个String范例的键值对
- GET:根据key获取String范例的value
- MSET:批量添加多个String范例的键值对
- MGET:根据多个key获取多个String范例的value
- INCR:让一个整型的key自增1
- INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
- INCRBYFLOAT:让一个浮点范例的数字自增并指定步长
- SETNX:添加一个String范例的键值对,条件是这个key不存在,否则不执行
- SETEX:添加一个String范例的键值对,而且指定有效期
key的结构有:
Redis没有类似MySQL中的Table的概念,我们该如何区分差别范例的key呢?
例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?
我们可以通过给key添加前缀加以区分,不外这个前缀不是随便加的,有肯定的规范:
Redis的key答应有多个单词形成层级结构,多个单词之间用':'隔开,格式如下:
这个格式并非固定,也可以根据本身的需求来删除或添加词条。这样以来,我们就可以把差别范例的数据区分开了。从而避免了key的冲突问题。
例如我们的项目名称叫 shop,有user和product两种差别范例的数据,我们可以这样定义key:
- user相关的key:shop:user:1
- product相关的key:shop:product:1
如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:
KEYVALUEshop:user:1{"id":1, "name": "Jack", "age": 21}shop:product:1{"id":1, "name": "小米11", "price": 4999} 而且,在Redis的桌面客户端中,还会以雷同前缀作为层级结构,让数据看起来条理分明,关系清楚:
2.3 Hash范例
Hash范例,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
在String范例中,我们偶然候想在value中存放多个属性值,每每是通过JSON去存储,这时候要去修改某一个属性值就显得格外麻烦,这时候我们就可以去使用Hash范例去存储这个数据。
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
- HINCRBY:让一个hash范例key的字段值自增并指定步长
- HSETNX:添加一个hash范例的key的field值,条件是这个field不存在,否则不执行
2.4 List类
Redis中的List范例与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。
特性也与LinkedList类似:
常用来存储一个有序数据,例如:朋友圈点赞列表,批评列表等。
List的常见命令有:
- LPUSH key element ... :向列表左侧插入一个或多个元素
- LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
- RPUSH key element ... :向列表右侧插入一个或多个元素
- RPOP key:移除并返回列表右侧的第一个元素
- LRANGE key star end:返回一段角标范围内的全部元素
- BLPOP和BRPOP:与LPOP和RPOP类似,只不外在没有元素时等候指定时间,而不是直接返回null
2.5 Set集合
Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特性:
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
Set的常见命令有:
- SADD key member ... :向set中添加一个或多个元素
- SREM key member ... : 移除set中的指定元素
- SCARD key: 返回set中元素的个数
- SISMEMBER key member:判定一个元素是否存在于set中
- SMEMBERS:获取set中的全部元素
- SINTER key1 key2 ... :求key1与key2的交集
例如两个集合:s1和s2:
求交集:SINTER s1 s2
求s1与s2的差别:SDIFF s1 s2
2.6 SortedSet范例
Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。
SortedSet具备下列特性:
因为SortedSet的可排序特性,常常被用来实现排行榜这样的功能。
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:求差集、交集、并集
注意:全部的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:
- 升序获取sorted set 中的指定元素的排名:ZRANK key member
- 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |