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