目录
前言:为什么要学Redis?
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. 翻译为:Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存等。
官网:https://redis.io
中文网 Redis中文网
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到10万+的QPS(Queries-per-second每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。
Redis的数据类型
Redis是一种高级的key-value的存储系统,其中key(键)是String类型,value支持5种数据类型即:String,hash,list,set,zset。
关于key(键)的数据类型有以下规则:
一:value的第一种数据类型:String
更多命令可以参考Redis中文网:Redis中文网
字符串类型是Redis中最为基础的数据存储类型,它在Redis中以二进制保存。无论存入的是字符串、整数、浮点类型都会以字符串写入。String为value时,最大存储容量为512M
String的常用命令如下:
命令 | 功能 |
---|---|
set 键 值 | 添加或修改一个键和值,键不存在就是添加,存在就是修改 |
get 键 | 获取值,如果存在就返回值,不存在返回nil(就是C语言中NULL) |
del 键 | 删除指定的键和值,返回删除的个数 |
SETEX key seconds value | 设置指定key的值,并将 key 的过期时间设为 seconds 秒。此处的value是指key对应的value值。等价于:SET key value ex seconds |
EXPIRE key seconds | 如果一个key已经存在,要设置一个过期时间 |
SETNX key value/set key value nx | 保存键值对,如果key存在则不保存,不存在则保存 |
String作为value的常见的使用场景:
二:value的第二种数据类型:hash
可以将hash理解为在JavaSE学习的map一样,hash作为value时,最大存储容量为:4G个键值对
hash的常用指令如下:
命令 | 功能 |
---|---|
hset 键 字段 值 | 添加键,字段,值 |
hget 键 字段 | 通过键,字段得到值 |
hmset 键 字段 值 字段 值 | multiply多个,一次添加多个字段和值 |
hmget 键 字段 字段 | 通过键,获取多个字段和值 |
hdel 键 字段 字段 | 删除一个或多个字段的值 |
hgetall 键 | 得到这个键下所有的字段和值 |
HKEYS 键 | 获取哈希表中所有字段 |
HVALS 键 | 获取哈希表中所有值 |
例如:创建hash类型的键为person,并且添加一个字段为name,值为zhangsan
hash的常用场景:
三:value的第三种数据类型:list
在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4G个。
list常用命令:
命令 | 行为 |
---|---|
lpush 键 元素 元素... | left 从左边向指定的键中添加1个或多个元素,返回列表中元素的个数 |
rpush 键 元素 元素... | right 从右边向指定的键中添加1个或多个元素 |
lpop 键 | 从左边删除一个元素,返回被删除的元素 |
rpop 键 | 从右边删除一个元素,返回被删除的元素 |
lrange 键 开始 结束 | 得到键中指定范围的元素的数据 每个元素都有一个索引号,从左向右0~n 从右向左索引号:-1~-(n+1),每个元素有2个索引号 如果要取出整个列表中所有的元素,索引号应该是:0~-1 |
lindex 键 索引值 | 查询指定索引的元素 |
llen 键 | 获取列表的长度 |
BRPOP key1 [key2 ] timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,超时时间单位默认是秒 |
LREM key 删除元素个数 value值 | 从表头删除指定个数的元素 |
list的图示:
list的常用场景:
四:value的第四种数据类型:set
在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是4G,和List类型不同的是,Set集合中不允许出现重复的元素。
set常用命令:
命令 | 行为 |
---|---|
sadd 键 元素 元素... | 向一个键中添加1个或多个元素 |
smembers 键 | 得到这个集合中所有的元素 |
sismember 键 元素 | 判断指定的元素在集合中是否存在,存在返回1,不存在返回0 |
srem 键 元素 元素... | 通过键删除一个或多个元素 |
sinter key1 [key2] | 返回给定所有集合的交集(集合中都共有的部分) |
set常用场景:
五:value的第五种数据类型:zset
Redis 有序集合(sorted set)和set集合一样也是无序不可以重复。不同的是每个元素都会关联一个分数(排序因子)。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员。
zset的常用命令:
命令 | 行为 |
---|---|
zadd 键 分数 值 分数 值 | 添加1个或多个元素,每个元素都有一个分数 |
zrange 键 开始索引 结束索引 | 获取指定范围的元素,得到所有的元素,索引是0到-1 |
zrange 键 开始索引 结束索引 withscores | 查询指定的元素和对应的分数 |
zrevrange 键 开始索引 结束索引 withscores | 按照分数倒叙获取指定的元素和对应的分数 |
zrem 键 值 值 | 删除一个或多个值 |
zcard 键 | 得到元素个数 |
zrank 键 值 | 得到元素的索引号 |
zscore 键 值 | 得到元素的分数 |
zset的图示:
zset的常用场景:
六:Redis的其他操作
以下操作命令也可以用来操作redis的其他操作,如下:
命令 | 功能 |
---|---|
keys 匹配字符 | 查询所有的键,可以使用通配符 * 匹配多个字符 ? 匹配1个字符 |
del 键1 键2 | 删除任何的值类型,而且可以同时删除多个键 |
exists 键 | 判断指定的键是否存在,不存在返回0 存在返回1 |
type 键 | 判断指定的键,值的类型。返回是类型的名字 |
select 数据库编号 | 选择其它的数据库 |
move 键 数据库编号 | 将当前数据库中指定的键移动到另一个数据库中 |
TTL key | 返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位 从Redis2.8开始:如果key不存在或者已过期,返回-2;如果key存在并且没有设置过期时间(永久有效),返回-1 |
flushall | redis的flushall命令用来清空redis所有的库,测试可以使用,开发中最好不要用。 |
因此,基于以上的一些命令是操作redis的基础命令,同时redistribution,还具有以下优点