文章目录
Redis简介
Redis(Remote Dictionary Server)远程字典服务,是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,可以用来做缓存,举个例子,当我们要从数据库查询数据的时候,我们可以首先通过Redis,如果Redis中存在,那么就直接读取Redis中的数据,如果不存在,再去数据库中查询,并把查询的结果放到Redis中,以方便下次直接访问,这样一来就减轻了数据库的压力,而且提高了查询效率,因为Redis数据是在内存中的,所以速度比数据库快。
Redis常用命令
- 设置键值对
set myKey abc - 获取键值对
get myKey - 查看所有的key
keys * - 删除key,可以删除多个
del key [key ...] - 判断某个key是否存在
exists key - 查看key剩余多久有效时间,-1代表永久,-2代表失效
ttl key - 给key设置有效时间,单位是秒
expire key seconds - 设置key为永久有效
persist key - 查看符合条件的key,“*”代表所有,“?”代表一个字符
keys pattern - 切换数据库,redis中默认有16个数据库,其下标是从0到15,默认是在0数据库中
select index - 从当前数据库中随机返回一个key
randomkey - 修改key的名称
rename key newkey - 将当前数据库中的key移动到指定的数据库中
move key db - 查看key的类型
type key
Redis五大数据类型
String
String类型是Redis最基本的数据类型一个键最大能存储512MB
- set用于给key设定值,如果key已经有值了set会复写旧值
set key value - 获取指定key的值,如果key不存在返回nil,如果key存储的不是字符串类型,返回一个错误
get key - 只有key不存在时设置key的值
setnx key value - 获取指定key中的字符串的子字符串
getrange key start end - 返回key所存储的字符串的长度
strlen key - 将key中存储的数字值增加1,如果key不存在,那么key的值会被先初始化为0,然后加1
incr key - 将指定的key自增自定义值
incrby key increment - 将key中存储的数字值减1
decr key - 将指定的key自减自定义值
decrby key decrement
Hash
Hash特别适合存储对象也就是我们的JavaBean,每个hash可以存储2^32 - 1个键值对,可以看成是一个key和value的map容器
- 为指定的key设定field/value,key可以理解为是数据库表中的一行数据,field可理解为是字段,value就是值
hset key field value - 同时可以设置多个,对应hash表中的key
hmset key field value[filed value ...] - 获取存储在hash中中的值,根据field获取value
hget key field value - 获取当前key的多个field
hmget key field value - 获取该hash表中所有字段
hkeys key - 获取hash表中字段的数量
hlen key - 获取该key对应的所有字段和值
hgetall key - 删除一个或多个域(也就是我们数据库中的字段)
hdel key field - 只有字段field不存在时,设置hash域的值
hsetnx key field value - 为hash表中指定域的整数值加上增量increment
hincrby key field increment - 查看hash表中指定的域是否存在
hexists key field
List
Redis中List列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部或尾部,一个列表最多可以包含2^32 - 1个元素,其类似于Java中的LinkedList
- 将一个或多个值插入到列表的头部,从左侧添加
lpush key value1 [value2] - 将一个或多个值插入到列表的尾部,从右侧添加
rpush key value1 [value2] - 遍历一个列表,从起始下标到中止下标,-1代表最后一个
lrange key start stop - 获取列表的长度
llen key - 通过索引获取列表元素的值
lindex key index - 从左删除列表的第一个元素,返回被删元素的值
lpop key - 从右删除列表的第一个元素
rpop key - 移除并获取列表的第一个元素,如果列表中没有元素,会阻塞列表直到等待超时或者发现可弹出元素,单位是秒
blpop key timeout - 移除并获取列表的最后一个元素,如果列表中没有元素,会阻塞列表直到等待超时或者发现可弹出元素
brpop key timeout - 对列表进行修剪,只保留指定区间的元素
ltrim key start stop - 通过索引设置指定元素的值
lset key index value - 在指定元素前或后插入值
linsert key before | after privot value - 将第一个列表中最后一个元素移除,并添加到第二个列表中第一个位置
rpoplpush source destination - 将本列表的最后一个元素移动到第一个位置
rpoplpush source destination
Set
Redis的Set是String类型的无序集合,集合成员是唯一的,不能重复,底层是intset和hashtable两种数据结构,intset我们可以理解为数组,该数组是有序的,查找时通过二分,hashtable就是普通的哈希表
- 给指定集合添加值
sadd key member - 获取集合的大小
scard key - 获取集合的所有值,无序的
smembers key - 判断member元素是否是集合key的成员
sismember key member - 返回一个或多个随机set值,count可以不写默认返回一个
srandmember key [count] - 移除集合中一个或多个成员
srem key member1 [member2] - 随机移除count个元素,并返回这count个元素,不写默认为1
spop key [count] - 将第一个集合中的元素移动到第二个集合
smove source destination member - 第一个集合和第二个集合的差集,以第一个集合为准
sdiff key [key...] - 集合的交集
sinter key [key...] - 并集
sunion key [key...]
ZSet
Redis中ZSet集合和普通集合一样,也是String类型元素的集合,也不能重复,不同的是每个元素都会关联一个float类型的分数,redis正是通过分数来为集合中的成员进行从小到大排序的,该分数是可以重复的
- 添加一个或多个有序集合,该集合有一个分数,用来排序
zadd key score member - 获取有序集合中的成员数
zcard key - 获取指定范围集合的值,默认从低到高
zrange key start stop - 获取指定范围分数的集合元素的个数
zcount key min max - 返回指定元素的下标
zrank key member - 获取指定范围集合的值,从高到低
zrevrange key start stop - 移除集合中的指定的一个或多个元素
zrem key member [member...] - 移除有序集合中给定的排名区间的所有成员,默认是从低到高排名,第一名是0
zremrangebyrank key start stop - 移除有序集合中分数区间的成员
zremrangebyscore key min max