Redis前置知识
Redis 是什么?
MySql数据库在磁盘当中,相较于主存,磁盘的访问速度太慢了,因此就有了一个中间件(在主存当中),它以键值对的形式存储MySql中的常用数据,其访问速度比直接访问MySql要快很多 ,这就是Redis (相当于计组当中的Cache与主存的关系)。
当要访问mysql数据库时,程序会先到Redis当中去访问,Redis当中没有,才到mysql中去访问,并将访问到的数据写入Redis中去 (下次访问该数据时就能直接在Redis中直接访问到)。
Redis (NoSql非关系型类型数据库) 如下:
因为Redis 在内存当中,一旦断电,数据就全部丢失了,因此为了避免这种情况,Redis会定期的将数据自动写入磁盘,实现数据持久化。
Redis 下载与安装(windows 版)
- 通过以下地址
redis 5.0.14获取到redis的windows安装包。
- 下载完成后,点击安装包,进行安装
- 一路next,但注意以下两个部分
- 安装完成后,打开windows的cmd,进入你的redis安装地址,输入命令
redis-server
,结果如下图,则表明安装成功。
注意:上图表示redis服务已开始执行,若关闭该cmd,则redis服务停止。
- 若输入命令
redis-server
,结果如下图,则表示redis服务已经自启动了,此时可以打开任务管理器,找到redis服务强制关闭,然后在执行第4步操作。
- 开启redis服务后,打开一个新的cmd,输入命令
redis-cil
,即可进入redis 对应的一个客户端,其可以通过各种redis命令来访问redis 的服务端,而服务端就会根据客户端的命令来操作(增删改查 )一块固定的主存空间即redis数据库。
上图便是获取redis数据库当中的键"name"对应的值"yuan"(作者提前写入该键值对)
Redis常用命令
Redis 当中是按键值对来进行存储的,键固定为字符串类型,但值的类型却不固定。值可以是字符串(String )类型,哈希(Hash )类型,数组(List )类型,集合(Set )类型,有序集合(Zset)类型共5种类型,根据这5种类型,可以将Redis命令分为5类。
针对键的相关操作
keys *
//该指令作用是查看当前redis数据库当中的所有键名
keys * a *
//该指令作用是查看当前redis数据库当中的所有的包含"a"的键名
keys a *
//该指令作用是查看当前redis数据库当中的所有的以"a"开头的键名
keys * _1
//该指令作用是查看当前redis数据库当中的所有以"_1" 结尾的键名
exists 键名
//判断当前redis数据库当中是否存在该键名,存在返回1,不存在返回0
type 键名
//判断该键名对应的值的类型
del 键名1 键名2 键名3
//删除redis当中对应的键值对
ttl 键名
//查看当前键值对还有多少时间过期(单位s),返回剩余时间。//-1表示该数据永不过期, -2 表示该数据已过期,查看一个不存在的数据,返回值就是-2
expire 键名 过期时间
//重新设置该键值对的过期时间
rename 旧键名 新键名
//为对应的键值对的键重命名
flushall
//清空该redis数据库的所有键值对
redis 数据库的配置文件中,默认有0~15共16个数据库,默认操作的是0号数据库
select 数据库号数
//指令作用:切换数据库
字符串类型(最常用)
即值的类型是字符串。
set 键名 值
//其中这个值可以加引号,也可以不加,默认是字符串类型//该命令作用是向redis数据库中插入一个新的字符串类型的键值对。
若该键已存在,则该命令会覆盖掉键对应的原来的值。
get 键名
//该命令作用是获取该键在redis数据库中对应的值
setnx 键名 值
//其中这个值可以加引号,也可以不加,默认是字符串类型//其与上面的set命令区别在于该命令插入的值不可覆盖(即不可修改),该命令设置成功返回(integer) 1,失败返回(integer) 0。
setex 键名 过期时间 值
//其中这个值可以加引号,也可以不加,默认是字符串类型//该命令与上面的set的区别在于,当该键值对在redis数据库当中的存在时间超过了过期时间(单位s),redis就会自动将该键值对清除掉。
mset 键名1 值1 键名2 值2
//批量设置键值对,键值对一一对应,可以同时设置多个键值对
mget 键名1 键名2 键名3
//批量查询多个键各自对应的值,并一一对应返回
append 键名 拼接的值
//在键对应的值后面进行拼接append 键名 " " //拼接空格
incr 键名
//该指令作用是将键名对应的值自动+1,要求键名对应的值必须是字符串整数
decr 键名
//该指令作用是将键名对应的值自动-1,要求键名对应的值必须是字符串整数
incrby 键名 数字k
//该指令作用是将键名对应的值自动+k,要求键名对应的值必须是字符串整数
decrby 键名 数字k
//该指令作用是将键名对应的值自动-k,要求键名对应的值必须是字符串整数
strlen 键名
//获取键名对应的字符串(值)的长度
字符比特流操作
针对一个字符比特位(8bit)进行的操作。
setbit 键名 偏移量 值
//该指令作用是设置键名对应的值的一个比特位上的值,未设置的比特位默认为0。//偏移量是从左往右开始算的(从高位到低位),下标为0~7
//值为对应比特位上的值(只能是1或0)
setbit mybit 6 1 //该指令相当于设置键值对 mybit:00000010(十进制为2)
getbit 键名 偏移量 值
//该指令作用是获取键名对应的值的一个比特位上的值
bitcount 键名
//该指令作用是计算该键名的8个bit位共有多少位的值被设置为1
bitpos 键名 要查找的值p
//返回该键对应的值的8个bit位中p第一次出现的位置(从左往右算,位置下标0~7)
数组类型
该类型当中的子元素必须都是字符串类型(string),且允许有重复元素
redis
键名:[值1,值2,值3]
lpush 键名 值1 值2 值3 值4
//创建一个数组类型的键值对,并且其值依次从左插入
rpush 键名 值1 值2 值3 值4
//创建一个数组类型的键值对,并且其值依次从右插入
linsert 键名 after 值1 值2
//从左向右找,将值2插入到值1第一次出现的位置后面(值1已存在在键名对应的数组当中)
linsert 键名 before 值1 值2
//从左向右找,将值2插入到值1第一次出现的位置的前面(值1已存在在键名对应的数组当中)
lindex 键名 下标
//从左向右找,查找到键名对应的数组的对应下标的元素
lrange 键名 开始下标 结束下标
//从左向右找,遍历到键名对应的数组的对应下标之间的元素(包括起始下标的元素)
llen 键名
//获取键名对应的数组(值)的长度
lrem 键名 count 值k
//删除键名对应的数组对应的值k//当count=0时,删除数组中所有的k值,当count>0时,删除从左向右数,前count个k值,当count<0时,删除从右向左数,前count个k值
lset 键名 下标 值
//修改键名对应数组的对应下标的值
lpop 键名
//从左往右,删除键名对应数组的第一个元素
rpop 键名
//从右往左,删除键名对应数组的第一个元素
在实际开发中,常用 rpush ,lpop来实现一个队列数据结构
哈希类型
该类型的键值对对应的值又是一组键值对,即字典套字典(map套map)
hset 键名 字段名1 值1 字段名2 值2 字段名3 值3
//设置一个hash类型的键值对
redis
键名:{
字段名1:值1,
字段名2:值2,
字段名3:值3,
}
hget 键名 字段名1
//获取键名对应的一个字段名对应的值
hgetall 键名
//获取该键名下的所有字段和对应的值
redis
//hgetall返回结果:
字段名1
值1
字段名2
值2
字段名3
值3
hmget 键名 字段名1 字段名2 字段名3
//依次获取字段名1,字段名2,字段名3的值
hvals 键名
//获取该键名下的所有字段的所有的值(不要对应的字段)
hkeys 键名
//获取该键名下的所有字段(不要各自对应的值)
hdel 键名 字段名
//删除该键名下的对应字段
hexists 键名 字段名
//判断当前键名下是否存在该字段名,存在返回1,不存在返回0
hincr 键名 字段名
//该指令作用是将键名对应的字段名的值自动+1,要求键名对应的值必须是字符串整数
hdecr 键名 字段名
//该指令作用是将键名对应的字段名的值自动-1,要求键名对应的值必须是字符串整数
hincrby 键名 字段名 数字k
//该指令作用是将键名对应的字段名的值自动+k,要求键名对应的值必须是字符串整数
hdecrby 键名 字段名 数字k
//该指令作用是将键名对应的字段名的值自动-k,要求键名对应的值必须是字符串整数
集合类型
集合类型的特点是去重和无序。
sadd 键名 值1 值2 值3
//设置一个集合类型的键值对
redis
键名:{值1,值2,值3}
smembers 键名
//获取该键名对应的整个集合
scard 键名
//获取该键名对应的集合中的元素个数
spop 键名 [count=k]
//随机删除键名对应的集合的k个元素,后面count是可选参数,默认删一个
srem 键名 值
//删除该键名对应集合的指定的值
sinter 键名1 键名2
//获取键名1和键名2各自对应的集合的交集
sunion 键名1 键名2
//获取键名1和键名2各自对应的集合的并集
sdiff 键名1 键名2
//获取键名1和键名2各自对应的集合的差集(键名1-键名2)
有序集合类型
有序集合(Zset),其内部的元素去重且根据score权重值(权重值必须是数字)来进行排序,从小到大排序。
zadd 键名 权重值1 值1 权重值2 值2 权重值3 值3
//设置一个有序集合类型的键值对,集合内的元素顺序根据各自对应的权重值自动排序,从小到大排序
zrangbyscore 键名 权重值1 权重值2
//获取权重值1与权重值2之间的所有元素,并将它们按从小到大的顺序排列输出
zrevrangbyscore 键名 权重值2权重值1
//获取权重值1与权重值2之间的所有元素,并将它们按从大到小的顺序排列输出
zrange 键名 开始下标 结束下标
//从低到高获取集合当中开始下标与结束下标之间的所有元素(集合元素已自动根据权重值排序好)
zrevrange 键名 开始下标 结束下标
//从高到低获取集合当中开始下标与结束下标之间的所有元素
zcard 键名
//获取有序集合长度
zscore 键名 值
//获取该键对应的有序集合下的制定值的权重值
zrank 键名 值
//获取对应值在有序集合中的排名(从小到大的排名,即排在第几)
zrevrank 键名 值
//获取对应值在有序集合中的排名(从大到小排序)
zcount 键名 权重1 权重2
//获取权重值1与权重值2之间的元素个数
zincrby 键名 数字k 值
//对有序集合下的该值的权重值进行加k
zrem 键名 值1 值2 值3
//删除有序集合下的各个值
zpopmin 键名 count
//从最低权重值删除共count个元素
zpopmax
键名 count //从最高权重值删除共count个元素