#Redis基础
Nosql:的发展史
Nosql是泛指非关系型sql存储数据,我们创建个.txt文件写完之后是不是需要CTL+S
去进行到存取磁盘中的过程,但是现在大部分开发工具都是自动去保存,想象一下
辛苦写的程序,突然断电导致笔记本关机,再次开机的情况下没有自动保存到电脑磁盘中
你的内心一定是崩溃的,
NOSQL的出现就是为了处理大量数据的访问,把一些常用的数据存储在电脑磁盘中,
想象一下这个读写速度是很快的,为了处理高并发而提出的观点
比如一些大型的项目为了简化数据库的压力可以把常用的数据去存储在NOSQL中
常见的NOSQL技术有:
Redis,mongoDB,Memcache
Redis,可支持的数据类型很多,能满足大部分需求,不过Redis,只能支持单线程,不过最新发布的Linux版本的Redis现在已经满足多线程了
MongoDB:插入数据速度非常快,
Memcache:只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。
Springboot默认的缓存框架就是Memcache缓存
redis中进入服务命令
cd到redis安装目录下的bin目录执行./redis-cli方法
Redis中库的概念
库:database:用来存放数据的一个基本单位,一个库可以存放多个key(只能是Srting类型)-value,库默认有16个库,库的编号:0-15
##value类型
String
List
Set
Zset
Hash
默认添加的value都是保存在磁盘中而不是内存中内存容易丢失数据比如
记事本中写完代码没有CTL+S
存储在磁盘中的数据理论上是永久保存的
切换库命令:select {库id} <库与库之间的关系互不影响>
–reids清除库的指令 :
flushDB {清除当前操作的库所有数据}
flushALL {清除所有库默认16个}
操作key的命令
DEL命令
语法: DEL key{key参数 ....} 作用: 删除给定的一个或者多个key。不存在的key会被忽视掉 返回值:被删除key的数量 nuber
EXISTS命令
语法:EXISTS {key参数}
作用: 检查制定key是否存在
返回值: 如果存在则返回1,否则返回0
EXPIRE命令
语法:EXPIRE Key {seconds} nuber单位秒
作用:为制定key设置有效保存时间,当key时间过期,他会被自动删除掉前提是设置存储过得
key值
返回值:成功就返回1,
KEYS命令
语法:keys pattern
作用:查询所有符合给定模式patten的key
语法:
keys * 查询当前库中的所有key 跟mysql中同理
剩余语法可以参考?条件,条件遵守正则表达式
返回值:符合查询条件的列表
MOVE命令
语法: hove key db{}
作用:讲当前数据库的key移动裁剪到制定的库中
返回值:操作成功返回1,否则0
PEXPIRE命令
语法: pexpire key milliseconds nuber单位毫秒
作用:这个命令和expire命令用法一样就是参数不一样
返回值:true:1 flase:0
TTL命令
语法: ttl key
作用:去查询这个key单位剩余时间{类型 秒}
返回值:不存在返回-2,存在但按照默认存储永久则返回-1,否则都是返回的nuber已秒为单位
PTTL命令
语法: pttl key
作用:去查询这个单位剩余时间 类型{毫秒}
返回值:不存在返回-2,存在但按照默认存储永久则返回-1,否则都是返回的nuber已毫秒为单位
RANDOMKEY命令
语法:RANDOMKEY (RANDOM任意的,随机的)
作用:从当前库中返回一个随机的key
返回值:当数据库不为空时返回key,否则返回nil(无,零)
RENAME命令
语法:RENAME key newkey (RENAME 重命名)
作用:将key重命名newkey
返回值:当key重命名的名字和newkey一样或者key不存在的时候,返回一个错误。
当newkey已经存在,rename命令将重命名
TYPE命令
语法:type key
作用:根据key返回所存储的数据类型(Sting,List,Set,Zset,Hash)
返回值 none(没有)
Sting,List,Set,Zset,Hash
Sting:
Sting类型的常用命令
命令 | 描述 |
---|---|
set | 设置一个key/value |
get | 根据key获取对应的value |
mset | 一次设置多个key/value |
mget | 一次获取多个key的value |
getset | 获取原始的key值,同时 |
strlen | 获得对应的key存储的value长度 |
append | 为对应的key的value追加内容 |
getrange索引0开始 | 截取value的内容 |
setex | 设置一个key存放的有效期单位:(秒) |
psetex | 设置一个key存放的有效期单位:(毫秒) |
setnx | 有点话就查询没有的话就添加,等于先做了查询操作又做了添加 |
msetnx原子操作(只要存在一个都不会去做任何操作) | 可以同时设置多个key,只有一个存在都不会去保存 |
decr | 进行数值类型的-1操作 返回值number类型 |
decrby | 根据提供的kye去进行制定的number |
incr | 进行数值类型的+1操作 |
incrby | 根据提供的key去进行指定的number |
incrbyfloat | 根据提供的key去进行制定的number 单位:float |
List跟java中的list集合很相似都是从左往右存储
支持数据重复性
List类型的常用命令
命令 | 说明 | 示例 |
---|---|---|
lpush | 将摸一个值加入到一个key列表最顶部top | lpush list top |
lpushx | 跟lpush,但是必须要保证这个key存在 | lpush list top1 |
rpush | 讲某个值加入到一个key列表末尾 | rpush list button |
rpushx | 桶rpush一样但是这个key必须要存在 | rpushx list button-1 |
lpop | 返回和已出列表左边的第一个元素就是第一个元素top | lpop list |
rpop | 返回和已出列表右边{参考上图list存储结构}的第一个元素,就是最后一元素 | rpop list |
lrange | 获取某一个下标区间内的元素 | lrange list 0 -1{表示最后} |
llen | 获取key的个数 | llen list |
lset | 设置某一个制定索引的值索引必须存在相当于在list数组找到已经开辟的空间update操作 | lset list [索引] value |
lindex | 获取某一个制定索引位置的元素相当于get[索引] | lindex list 0 |
lrem | 删除重复元素 | lrem list [number代表要删除的size]2 18 |
ltrim | 保存列表中特定区间内的元素只保留[top],[button]和中间的值其他的全部删掉 | ltrim list 0 8 |
linsert | 在某一个元素之前,之后插入新元素 两个可选参数bofore(之前),after(之后) | linsert list after newtop |
SET类型的常用命令
Set类型可以理解为一个集合,可以放多个元素,元素无序,zset则是有序的,set里边
value不能够重复
特点:无序列表
命令 | 说明 | 示例 |
---|---|---|
sadd | 为集合添加元素 | sadd set{key} xiaohei xiaobai zhangsan lisi wangwu zhaoliu |
smembers | 显示集合中所有元素 无序的 | smembers set{key} |
scard | 返回集合中元素的个数 | scard set{key} |
spop | 随机返回一个元素,并将元素在集合中删除 | s |