目录
一、Redis简介
什么是Redis?
Redis简介
Redis(Remote Dictionary Sever):远程字典服务,是一个开源的、采用ANSIC语言编写的,基于内存且支持持久化,高性能的Key-Value的NoSQL数据库(非关系型的数据库)。
Redis将数据写入内存,不通过I/O流读取数据,效率较高。区别于关系型数据库,Redis不存储数据之间的关系,存储数据简单,只关心如何存取,而不去维护数据之间的关系。
Redis官网:Redis
Redis的特点
在项目中使用Redis,主要是从两个角度去考虑:性能和并发,这是当前互联网发展过程中首要考虑的两个重难题。
性能
Redis是基于内存级别的缓存,能使请求快速从缓存中得到相应。相比传统请求数据库,响应速度大幅度提高。
并发
在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常的情况。由于Redis是基于内存级别的缓存,通过使用Redis进行缓冲操作,请求优先访问到redis请求数据,从而避免高并发情况下直接访问数据库。
安装部署Redis
Redis官方只开发了基于Linux平台的Redis服务,是没有支持Windows系统的,但是微软自己就做了一个支持win64位系统的,并将其发布到了Github;
Redis Windows版本下载地址:Releases · microsoftarchive/redis · GitHub
Redis命令介绍
下载好Redis,我们将其解压:
1.启动Redis服务:
redis-server.exe redis.windows.conf
也可以在cmd使用语句启动。
2.双击redis-cli打开客户端窗口
Redis服务常用配置
常用命令控制:
port:指定端
database:数据库的数量
logfile:Redis的日志文件名
dir:设定当前服务文件保存位置,包含日志文件、持久化文件等
requirepass:设置当前Redis服务的密码
timeout:客户端连接的超时时间,单位:秒
Redis客户端配置
常用配置命令:
-h:服务器的地址
-p:服务器的端口
-a:服务器的密码
1)使用默认连接配置
./redis-cli
2)指定参数启动
./redis-cli -h 服务器的地址 ./redis-cli -p 服务器的端口 ./redis-cli -h 服务器的地址 ./redis-cli -p 服务器的端口 -a 服务器的密码
RDM可视化工具
Redis Desktop Manager:简称RDM;是一款支持跨平台的可视化数据库管理工具。
使用RDM连接Redis服务:
Redis服务默认有16个数据库 。
二、Redis数据类型
String数据类型
String基本操作
String类型数据结构:
set:存数据
格式:set key value
示例:
set name wangming
get:取数据
格式:get key
示例:
get name
del:删除数据
格式:del key [key …]
示例:
del name2 name3
mset:一次存储多个key
格式:mset key value [key value …]
示例:
mset name wangming name2 lihua name3 dilireba name4 zhaoliying
mget:一次取多个key
格式:mget key [key…]
示例:
mget name name2 name3 name4
strlen:获取字符个数
格式:strlen key
示例:
strlen name3
append:追加字符串(如果没有则新增)
格式:append key value
示例:
append name3 .dilimulati
setnx:存入key,如果这个key存在则返回0(false),代表存入失败,如果不存在则返回1(true),代表存入成功;
格式:setnx key value
示例:
自增自减操作
自增:incr
语法:incr key
控制步长自增:incrby
语法:incrby key increment
float类型自增:incrbyfloat (自增小数)
语法:incrbyfloat key increment
自减:decr
语法:decr key
控制步长自减:
语法:decrby key increment
控制时效性
setex key seconds value # 秒
psetex key milliseconds value # 毫秒
String总结:
String基本操作:
set:存储值
get:获取值
del:删除数据(可以删除多个)
mset:一次存储多个值
mget:一次获取多个值
strlen:获取字符个数
append:追加字符串(如果没有则新增)
setnx:存入key,如果这个key存在则返回0(false),代表存入失败,如果不存在则返回1(true),代表存入成功
自增自减操作:
incr:自增
incrby:控制步长自增
incrbyfloat:自增小数
decr:自减
decrby:控制步长自减
控制时效性:
setex key seconds value # 秒
psetex key milliseconds value # 毫秒
Hash数据类型
hash类型的存储结构:
hash类型的数据结构,底层采用hash表存储
hash基本操作
hset:添加/修改数据
格式:hset key filed value
hget:添加/修改数据
格式:hget key field
hdel:删除数据
格式:hdel key filed [filed…]
hmset:一次性添加/修改多个字段
格式:hmset key filed value [filed value ...]
hmget:一次性取多个数据
格式:hmget key filed [filed ...]
获取指定key的field的数量
格式:hlen key
hexists:判断指定的key中是否包含有指定的field(返回1[有]或0[没有])
格式:hexists key filed
hash扩展操作
hkeys:获取key中所有的field
语法:hkeys key
hvals:获取key中所有的value
语法:hvals key
hgetall:获取指定key中所有的field以及value值
语法:hgetall key
hsetnx:如果指定key中有对应的field则返回0(false),如果没有则存对应的值进去
语法:hsetnx key filed value
Hash总结:
hash基本操作:
hset:添加/修改数据
hget:添加/修改数据
hdel:删除数据
hmset:一次性添加/修改多个字段
hmget:一次性取多个数据
hlen:获取指定key的field的数量
hexists:判断指定的key中是否包含有指定的field(返回1[有]或0[没有])
hash扩展操作:
hkeys:获取key中所有的field
hvals:获取key中所有的value
hgetall:获取指定key中所有的field以及value值
hsetnx:如果指定key中有对应的field则返回0(false),如果没有则存对应的值进去
List数据类型
在Redis中,List类型是按照插入顺序排序的字符串链表。Redis中的list类型采用的是双向链表。
list基本操作
添加/修改数据:lpush/rpush
语法:
lpush key value [value…] 添加到队列左侧
rpush key value [value…] 添加到队列右侧
获取数据:lrange
语法:lrange key start stop 从左边开始读取数据,从start索引查询到stop索引
根据指定的索引查询(从0开始):lindex
语法:lindex key index
Tips:lindex不支持反向查询
获取并移除数据:lpop/rpop
语法:
lpop key 从队列左边移除一个元素并返回
rpop key 从队列右边移除一个元素并返回
删除前
删除后
list扩展操作
规定时间内获取并移除数据:blpop
语法:blpop key [key …] timeout 在timeout时间内取出key中的值
规定时间内移除list右边的一个元素到另一个list的左边,并将此元素返回:brpoplpush
语法:brpoplpush source destination timeout
移除指定数据:lrem
语法:lrem key count value 从list左边开始移除元素
count:移除多少个
value:移除什么元素
list总结:
list基本操作:
添加/修改数据:lpush/rpush
获取数据:lrange
根据指定的索引查询(从0开始):lindex
获取并移除数据:lpop/rpop
list扩展操作
规定时间内获取并移除数据:blpop
规定时间内移除list右边的一个元素到另一个list的左边,并将此元素返回:brpoplpush
移除指定数据:lrem
Set数据类型
我们可以将Set类型看作为没有排序的字符集合,和List类型不同的是,Set集合中不允许出现重复的元素。多个Sets之间的聚合计算操作,如sinter
、sdiff
、sunion
等操作。
set基本操作
添加数据:sadd
语法:sadd key member [member …]
sadd nums 1 2 3 4 5 6 7
读取全部数据:smembers
smembers key
smembers nums
删除数据:srem
srem key member [member …]
srem nums 1 3 5 7
获取集合中元素的个数:scard
scard key
scard nums
判断集合中是否包含指定的数据:sismember
sismember key member
sismember nums 1
set扩展操作
在指定的key中随机获取几个个值
格式:srandmember key [count]
srandmember nums 3
在指定的key中随机获取几个值,并将这几个值移除
spop key [count]
spop nums 3
获取两个集合的交、并、差集
sinter key [key ...] # 交集
sunion key [key ...] # 并集
sdiff key [key ...] # 差集
sinter num1 num2
sunion num1 num2sdiff num1 num2
获取两个集合的交、并、差集存储到指定集合中
sinterstore destination key1 [key2] # 交集
sunionstore destination key1 [key2] # 并集
sdiffstore destination key1 [key2] # 差集
sinterstore temp1 num1 num2
sunionstore temp2 num1 num2
sdiffstore temp3 num1 num2
移动集合中的指定元素到另一个集合
格式:smove source destination member
source:源集合
destination:目标集合
member:移动的元素
smove num1 num2 2
Set总结
set基本操作:
添加数据:sadd
读取全部数据:smembers
删除数据:srem
获取集合中元素的个数:scard
判断集合中是否包含指定的数据:sismember
set扩展操作:
在指定的key中随机获取几个个值
格式:srandmember key [count]
在指定的key中随机获取几个值,并将这几个值移除
spop key [count]
移动集合中的指定元素到另一个集合
格式:smove source destination member
Sorted_set数据类型
sorted_set基本操作
添加数据:zadd
zadd key score1 member1 [score2 member2]
zadd students 90 zs
zadd students 80 ls 85 ww 60 zl 70 tq
读取数据:zrange/zrevrange
zrange key start stop [WITHSCORES]
zrevrange key start stop [WITHSCORES]
withscores:是否显示分值
zrevrange:将查询结果反转
zrange students 0 -1
zrevrange students 0 -1 withscores
删除数据:zrem key member [member ...]
zrem students zs zl
根据分值筛选:zrangebyscore/zrevrangebyscore
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
min:最小值(包含)
max:最大值(包含)
limit:限定查询结果(分页查询)
offset:起始索引(从0开始)
count:查询几条数据
zrevrangebyscore:根据分值反转查询
zrange students 0 -1 withscores
zrangebyscore students 60 95 withscores
查询集合总数量:zcard
zcard key
zcard students
根据分值范围查询集合总数量:zcount
zcount key min max
zcount students 60 80
sorted_set扩展操作
取多个集合中的交集、并集:zinterstore/zunionstore
zinterstore destination numkeys key [key ...]
zunionstore destination numkeys key [key ...]
zinterstore temp1 3 num1 num2 num3
zinterstore首先取并集,然后把分数累加。
通用指令
key基本操作
删除key
del key
判断key是否存在
exists key
获取key的类型
type key
key 改名
rename key newkey
控制key的时效性
为指定key设置有效期
expire key seconds
pexpire key milliseconds
获取key的有效时间
ttl key # 返回key的有效时间,单位秒
pttl key # 返回key的有效时间,单位毫秒
如果key没有设置有效期(永久存在),返回-1
如果key不存在返回-2
· 如果key存在返回key的有效时间
切换key从时效性转换为永久性
persist key
key的查询操作
查询key
keys pattern
查询匹配规则:
*
:匹配任意数量的任意符号
?
:匹配任意一个符号
[]
:匹配一个指定符号
key排序
对所有key排序:只能对集合进行排序(list、sort、sorted-set)
SORT key [BY pattern] [LIMIT offset count] [ASC|DESC] [ALPHA] [STORE destination]
list排序示例:
set排序示例:
zset排序示例:
数据库通用操作
切换数据库
select num
select 0 # 切换到0数据库
select 1 # 切换到1数据库
数据清除
dbsize # 查看当前数据库共有多少个key
flushdb # 清除当前数据库的所有数据
flushall # 清除所有数据库的所有数据