Redis复习大纲

目录

基础篇

一.认识NoSQL

1.关系型数据库(SQL)是指采用了关系模型来组织数据的数据库,关系就是表。

优点:

缺点:

2.非关系型数据库(NoSQL)是指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。

优点:

缺点:

二.Redis命令

1.Redis的数据结构介绍

2.KEY的层级格式

3.位操作

4.String类型

5.Hash类型

6.List类型

7.Set类型

8.SortedSet类型


基础篇

一.认识NoSQL

数据库分为关系型数据库(SQL)和非关系型数据库(NoSQL)

1.关系型数据库(SQL)是指采用了关系模型来组织数据的数据库,关系就是表。

优点:

(1)易理解,表是根据现实世界创建的,贴近现实

(2)使用方便,sql语句通用

(3)易维护,丰富的完整性大大减少了数据冗余和数据不一致的问题。并且全部由表结构组成,  文件格式一致

(4)提供对事务的支持,能保证系统中事务的正确执行,同时提供事务的恢复、回滚、并发控制   和死锁问题的解决

缺点:

(1)高并发读写能力差,对于网站来说,网站的并发量非常高,数据库的连接数有限,I/O硬盘有限,不能满足大量的用户连接

(2)海量数据情况下读写效率低,读取时间长,对于大数据的表来说,查询需要很长的时间

(3)可扩展性不足,无法像web server和app server可以通过添加硬件和服务节点来拓展性能和负荷工作能力

(4)数据模型灵活度低,关系型数据库的数据模型定义严格,需要提前知道需要存储什么类型的模型,无法快速容纳新的数据类型

2.非关系型数据库(NoSQL)是指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。

优点:

  (1) 使用灵活应用场景广泛,非关系型数据库存储数据的格式可以是 key-value 形式(键值对)、文档形式、图片形式等。而关系型数据库则只支持基础类型。

  (2) 速度快,效率高,NoSQL 可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。

  (3) 海量数据的维护和处理非常轻松,成本低。

  (4) 与关系型数据库(SQL)相反,非关系型数据库(NoSQL)具有扩展简单、高并发、高稳定性、成本低廉的优势。

  (5) 可以实现数据的分布式处理。

缺点:

  (1) 非关系型数据库暂时不提供 SQL 支持,学习和使用成本较高。

  (2) 非关系数据库没有事务处理,无法保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。

  (3) 功能没有关系型数据库完善。

  (4) 复杂表关联查询不容易实现。

二.Redis命令

1.Redis的数据结构介绍

redis是一个key-value的数据库,key的类型一般是String,value的类型多种多样

基本类型:String Hash List Set SortedSet

特殊类型:BitMap GEO HyperLog

2.通用命令

KEYS:查看匹配给定pattern的KEY

//查找含有n的KEY
KEYS *n*

//查询所有的KEY
KEYS *

//查询a开头的KEY
KEYS a*

DEL:删除KEY

//删除name
DEL name  
//(后面跟多个KEY可以删除多个KEY)

EXISTS:查询KEY是否存在

//查询age是否存在
EXISTS age 

EXPIRE:给KEY设置一个有效期,过期自动删除,单位秒

//给age设置180秒的有效期
EXPIRE age 180  

TTL:查看KEY的剩余有效时间

//查询age的有效时间
TTL age 

返回 -1表示永久有效

返回 -2表示已经过期 

2.KEY的层级格式

redis中并没有类似MySQL中的table概念,我们要如何区分不同类型的KEY呢?

eg:存储id同为1的用户信息和商品信息到Redis中,这样两个相同的id就会起冲突

KEY的结构:

Redis的KEY允许有多个单词形成层级结构,多个单词用':'隔开,列如:

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

//设置项目名为com业务名为user的KEY
SET com:user:1 '{"id":1,"name":"jack","age":18}'
SET com:user:2 '{"id":2,"name":"rose","age":20}'
//设置项目名为com业务名为user的KEY
SET com:product:1 '{"id":1,"name":"荣耀9","price":1000}'
SET com:product:2 '{"id":2,"name":"小米6","price":300}'

在图形界面客户端查看

3.位操作

设置指定位(bit)的值,返回此位(bit)原来的值

SETBIT key offset value

offset为二进制值的第几位,从0开始

value为offset位的值,只能是1或者0

//添加str 值为 a,a的asc码为97,转换成进进制为01100001
set str a

//修改第7位的值为1,使修改后的二进制数为01100011,对应asc码为99,为字母c
setbit str 6 1

//返回 c
get str

获取指定位的值 

KEYBIT key offset

//获取第7位(bit)的值
getbit str 6

获取为1的位(bit)数

    获取指定范围内的值为1的位(bit)的数量

BITCOUNT key[start end [byte | bit]]

strat为开始统计的位置,从0开始计算,可以为负数,-1为最后一个位置

end为结束统计的位置,从0开始计算,可以为负数,-1为最后一个位置

byte为strat 和end的单位为字节,如果不设置默认为byte,比如a,按byte计算长度只有1,所以-1表示第1个字节

bit为start和end的单位为位,比如a,按bit计算长度为8,所以-1表示第8位

//str的值为a,长度为1个字节, start为1表示从第二个字节开始,-1表示最后一个字节,因此返回结果为0
bitcount str 1 -1

//str的值为a,长度为8位,start为1表示从第二个bit开始,-1表示最后一个字节,因此返回结果为4
bitcount str 1 -1 bit

获取字符串里面第一个被设置为1或者0的bit位

BITPOS key value

//获取第一个1开始的位置位
bitpos str 1

对位进行批量操作

 用于从指定位置开始获取或替换指定数量的位(bit),可是在指定位进行增量操作

1)从指定位(bit)开始获取指定长度的位(bit),返回获取的二进制的十进制表示

BITFIELD key get [len] [offset]

其中

len为要获取的长度,u开头的表示无符号,i开头的表示有符号,即当第一位为1时,返回的值为负数

offset为从此指定的位开始向后获取

BITFIELD key get [len] [offset]

//修改str的值为abcd
set str abcd
//获取第二个字符的编码,结果为98
bitfield str get u8 8

2)从指定位(bit)开始替换指定数量位(bit)的值,如果超出总长度,超出度部为追加

BITFIELD key set [len] [offset] value

//为str添加第四个字符为d
bitfield str set u8 24 100

//返回结果为abcd
get str

3)从指定位开始把指定长度的位的值都加上0或是1,此处要注意的是,加0表示不改变,加1表示把对应位的值改为0,即加1的时候不会进位

BITFIELD key INCRBY len offset value

//设置str的值为c, 二进制为01100011
set str c

//最后一位加1,二进制为01100010
bitfield str incrby u1 7 1

//返回b
get str

对多个key的值进行二进制位元运算

BITOP oper destkey key1 key2

其中

destkey为用于保存计算结果的key

key1和key2为参与计算的key

oper为位元计算方式,有 AND(与) 、 OR(或) 、 NOT(非) 、 XOR(异或)运算

//a的二进制值为01100001
set str1 a

//b的二进制值为01100010
set str2 b

//进行与运算(同位的值都为1时结果为1),把结果保存到str3中,计算结果为01100000
bitop and str3 str1 str2

//返回`
get str3

//进行或运算(同位的值只在有一个为1,结果为1),把结果保存到str3中,计算结果为01100011
bitop or str3 str1 str2

//返回结果为c
get str3

//进行异或运算(同位的值相同结果为0,不同结果为1),把结果保存到str3中,计算结果为00000011
bitop xor str3 str1 str2

//返回结果为\x03
get str3

4.String类型

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

string 普通字符串

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

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

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m。

                        KEY                                                                        VALUE

                     massage                                                                 Hello world

                        num                                                                            10

                       score                                                                         99.99

String类型的常见命令:

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

GET:根据KEY来获取对于的value

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

MGET:获取多个KEY的值

SETNX:添加一个String类型的键值对,如果不存在就执行,反之不执行

SETXX:添加一个String类型的键值对,如果存在就执行

SETEX:添加一个String类型的键值对,并设置有效期(单位:秒)

SETPX:添加一个String类型的键值对,并设置有效期(单位:毫秒)

INCR:让一个整型或浮点类型自增

INCRBY:让一个整型或浮点类型按照指定步长自增

INCRBYFLOAT:让一个整型或浮点类型按照指定小数步长自增

5.Hash类型

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

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

                                KEY                                                        VALUE

                            com:user:1                                       {name:"Jack",age:21}

                            com:user:2                                       {name:"Rose",age:18}

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

KEYVALUE
fieldvalue
com:user:1nameJack
age20
com:user:2nameRose
age18

Hash类型的常见命令:

HSET KEY field value :添加或修改Hash类型KEY的field的值

HMSET:批量添加多个Hash类型KEY的field的值

HGET KEY field:获取一个Hash类型KEY的field的值

HMGET:批量获取多个Hash类型KEY的值

HGETALL:获取一个Hash类型的KEY中所有的field和value

HKEYS:获取一个Hash类型KEY中所有的field

HVALS:获取一个Hash类型KEY中所有的value

HINCRBY:让一个Hash类型的KEY的字段值按指定步长自增

HINCRBYFLOAT:让一个Hash类型的KEY的字段值按指定小数步长自增

HSETNX:添加一个Hash类型的KEY的field值,不存在就执行,反之不执行

HEXISTS:查询指定的字段是否存在

HLEN:查询字段的数量

6.List类型

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

特征也与LinkedList相似

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

List类型的常见命令:
LPUSH key element:从左侧添加一个或多个元素

LPUSHX:仅在元素存在时从左侧添加一个或多个元素

LPOP key:移除并返回左侧第一个元素,没有则返回NULL

RPUSH key element:从右侧添加一个或多个元素

RPUSHX:仅在元素存在时从右侧侧添加一个或多个元素

RPOP key:移除并返回右侧第一个元素,没有则返回NULL

LRANGE key start end:获取(start,end)范围的所有元素

BLPOP:移除并返回左侧第一个元素,没有就等待指定时间,而不是直接返回NULL

BRPOP:移除并返回左侧第一个元素,没有就等待指定时间,而不是直接返回NULL

LINSERT:在指定的元前面或后面插入一个新值

LINSERT key before|after previous element

//在土家族前面添加苗族
LINSERT nation before "土家族" "苗族"

LSET:修改指定下标的元素

LSET key index element

//修改第三个元素为傣族
LSET nation 2 "傣族"

RPOPLPUSH:将右侧第一个元素删除并添加到左侧

RPOPLPUSH source destination

RPOPLPUSH nation nation

BRPOPLPUSH:将右侧第一个元素删除并添加到左侧,如果没有值就会等待指定时间

LREM:从左侧开始计数,删除指定count数量的值,如果不够,则删除实际数量的值

LREM key count element

//删除前两个"傣族"
LREM nation 2 "傣族"

LTIRM:将(start,stop)范围之外的值全部删除

LTIRM key start stop

//只保留第二个值
LTIRM nation 1 1

LINDEX:查询指定下标的值

LINDEX key index

//查询第3个元素
LINDEX nation 2

LLEN:查询key中元素的数量

LLEN key

LLEN nation

7.Set类型

Redis的SET类型与Java中的HashSet类似,可以看做是一个value为null的HashMap,因为也是一个hash表,因此具备与HashSet类似的特性:
无序

  • 元素不可重复
  • 查询速度快
  • 支持交集,并集,差集等功能

SET类型的常见命令:

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

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

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

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

SMEMBER:获取set中所有的元素

8.SortedSet类型

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

SrotedSet特征:

  • 可排序
  • 元素不重复
  • 查询速度快

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

SortedSet的常见命令:

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

ZREM key member:删除SortedSet中的一个指定元素

ZSCORE key member:获取指定元素的score值

ZRANK key member:获取指定元素的排名

ZCARD key:获取SortedSet中元素的个数

ZCOUNT key min max:获取SortedSet中在(min,max)范围的元素个数

ZINCRBY key increment member:让SorterdSet中的指定元素安装increment值自增

ZRANGE key min max:按照score排序后,获取SortedSet中在(min,max)范围中的元素

ZRANGEBYSCORE key min max:按照score排序后,获取SortedSet中在socre(min,max)范围中的元素

ZDIFF ZINTER ZUNION:求差集 交集 并集

在Z后面添加REV表示降序

更新中。。。

有问题欢迎指出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值