Redis基础
Redis基础
Redis是一个开源的Key-Value存储系统。它支持存储的value类型相对较多,包括String(字符串)、List(链表)、Set(集合)、Zset(Sorted Set,有序集合)和Hash(哈希类型)。
这些数据都支持push/pop、add/remove以及取交集、并集和差集等更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。
为了保证效率,数据都缓存在内存中。同时Redis会周期性地把更新的数据写入磁盘或者把修改该操作写入追加的记录文件中。
1.Redis的优势
(1)性能极高:Redis读取数据的速度课达到110000次/s,写的速度可达到81000次/s。
(2)丰富的数据类型:Redis支持String、List、Zset、Set、Hash五大数据类型。
(3)原子性:Redis的所有操作都是原子性的。
(4)丰富的特性:Redis还有支持publish/subscrible、通知Key过期等特性。
2.关于Key的相关命令
Redis是一个Key-Value存储系统,所以对于Key的操作尤为重要,下面是关于Key的常用操作命令:
命令 |
备注 |
keys * |
查询当前库的所有键 |
exists <key> |
判断某个键是否存在,返回1代表存在,返回0代表不存在 |
type <key> |
查看键的类型 |
del <key> |
删除某个键 |
expire <key> <seconds> |
为键值设置过期时间,单位为秒 |
ttl <key> |
查看某个键的过期时间,-1表示永不过期,-2表示已过期 |
dbsize |
查看当前数据库的Key的数量 |
flushdb |
清空当前库 |
flushall |
清空全部库 |
二、Redis的五大数据类型
1.String类型命令操作
String类型是Redis数据库最基本的数据类型,在一个Redis中,字符串value最多可以是512M。
命令 |
备注 |
get <key> |
获取对应键的值 |
set <key> <value> |
设置键值对 |
append <key> <value> |
将给定的value值追加到原值的末尾 |
strlen <key> |
获取对应键的值的长度 |
setnx <key> <value> |
只有在Key不存在时设置Key的值 |
incr <key> |
将Key的值加1,只能对数字值进行操作,如果初始值为空,新增值为1 |
decr <key> |
将Key的值减1,只能对数字值进行操作,如果初始值为空,新增值为-1 |
incrby <key> <值> |
将Key的值以自定义的值增加 |
decrby <key> <值> |
将Key的值以自定义的值减少 |
mset <k1> <v1> <k2> <v2> ... |
设置一个或多个键值对 |
mget <k1> <k2> <k3> ... |
获取一个或多个键的值 |
msetnx <k1> <v1> <k2> <v2> ... |
所有的键Key不存在时,设置一个或多个键值对 |
getrange <key> <begin> <end> |
获取值的范围 |
setrange <key> <begin> <value> |
从起始位置开始,使用value覆写键Key中的字符串值 |
setex <key> <second> <value> |
设置键值的同时设置过期时间 |
getset <key> <value> |
设置新值的同时获得旧值 |
2.List类型命令操作
Redis中的List列表是简单的字符串列表,按照插入顺序进行排序,可以添加一个元素到头部或者尾部。List列表的底层实际上是个双向列表,对两端的操作性能要求很高,通过索引下标操作中间的节点性能会较差。
命令 |
备注 |
lpush/rpush <k1> <v1> <k2> <v2> ... |
从左边/右边插入一个或多个值 |
lpop/rpop <key> |
从左边/右边吐出一个值 |
rpoplpush <key1> <key2> |
从<key1>列表右边吐出一个值,插到<key2>列表左边 |
lrange <key> <start> <stop> |
按照索引下标范围获得元素(从左到右) |
lindex <key> <index> |
按照索引下标获得元素(从左到右) |
llen <key> |
获得列表长度 |
linsert <key> before|after <value> <newvalue> |
在<value>的前面或后面插入<newvalue> |
lrem <key> <n> <value> |
从左边删除n个value |
3.Set类型命令操作
Redis中的Set类型同List类型类似,特殊之处在于Set是可以自动排重的,当需要存储一个列表数据又不希望出现重复数据时,Set是一个很好的选择。它的底层其实是一个value为null的Hash表,对于添加、删除以及查找的操作比较方便。
命令 |
备注 |
sadd <key> <v1> <v2> ... |
将一个或多个元素加入到集合Key中,已经存在于集合的元素将被忽略 |
smembers <key> |
取出该集合的所有值 |
sismember <key> <value> |
判断集合key是否含有该值,有则返回1,没有则返回0 |
scard <key> |
返回该集合的元素个数 |
srem <key> <v1> <v2> ... |
删除集合中的某个元素 |
spop <key> |
随机从该集合中吐出一个值 |
srandmember <key> <n> |
随机从该集合中取出n个值,取出的值不会被删除 |
sinter <key1> <key2> |
返回两个集合的交集元素 |
sunion <key1> <key2> |
返回两个集合的并集元素 |
sdiff <key1> <key2> |
返回两个集合的差集元素 |
4.Hash类型命令操作
Redis中的Hash类型的数据是一个String类型的filed和value的映射表,其特别适合用于存储对象,类似于Java里面的Map<String, Object>集合。
命令 |
备注 |
hset <key> <field> <value> |
给集合中的field键赋值value |
hget <key1> <field> |
获取集合中field键对应的值 |
hmset <k1> <f1> <v1> <f2> <v2> ... |
批量设置集合中的键值对 |
hexists key <field> |
判断哈希表中给定field键是否存在 |
hkeys <key> |
列出该集合的所有field |
hvals <key> |
列出该集合的所有value |
hincrby <key> <field> <increment> |
为哈希表中的field键对应的值加上increment值 |
hsetnx <key> <field> <value> |
当前仅当field键不存在时,将哈希表中的field键对应的值设置为value |
5.Zset类型命令操作
Redis中的有序集合Zset与集合Set非常相似,它们都是一个没有重复元素的字符串集合。不同之处在于有序集合的所有成员都关联了一个评分(score),这个评分被用来按照从从最低分到最高分的方式给集合中的成员排序。集合的成员是唯一的,但是评分可以是重复的。
因为元素是有序的,所以可以很快地根据评分来获取一个范围中的元素。访问有序集合的中间元素效率也很高,因此开发者能够使用有序集合作为一个没有重复成员的智能列表。
命令 |
备注 |
zadd <key> <s1> <v1> <s2> <v2> ... |
将一个或多个元素及其评分值加入到有序集合中 |
zrange <key> <start> <stop> [withscore] |
返回有序集合中下标在start和stop之间的元素,带withscores,可以让分数和值一起返回到结果集 |
zrangebyscore key min max [withscores] [limit offset count] |
返回有序集合中score值介于min和max之间的所有成员。有序集合成员按score值递增的次序排列 |
zrevrangebyscore key min max [withscores] [limit offset count] |
返回有序集合中score值介于min和max之间的所有成员。有序集合成员按score值递减的次序排列 |
zincrby <key> <increment> <value> |
为有序集合中的元素的score值加上指定数值 |
zrem <key> <value> |
删除有序集合下的指定值 |
zcount <key> <min> <max> |
统计有序集合分数区间内的元素个数 |
zrank <key> <value> |
返回该值在集合中的排名,从0开始 |
本文来自博客园,作者:爱吃糖的橘猫,转载请注明原文链接:https://www.cnblogs.com/sglblog/p/15229112.html