一、Redis的五大数据类型
1.1、String(字符串)
String 是redis最基本的类型,一个key对应一个value。它是二进制安全的,即Redis的string可以包含任何数据,比如JPG图片或者序列化的对象。一个Redis中字符串value最多可以是512M。
1.2、Hash(哈希,类似Java中的Map)
Redis hash是一个键值对 集合。是一个String 类型的fieId和value的映射表,hash特别适合存储对象。类似Java中的Map<String,Object>。
1.3、List(列表)
Redis列表是简单的字符串列表,按照超如顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层实际是个链表。
1.4、Set(集合)
Redis的Set是String类型的无序集合,是通过HashTable实现的。
1.5、Zset(sorted set:有序集合)
Redis Zset 和 Set一样也是String类型元素的集合,且不允许重复的成员。不同的是Zset中,每个元素都会关联一个double类型的分数,以此进行排序。Redis正是通过分数来为集合中的成员进行从小到达的排序。Zset的成员是唯一的,但分数(score)却可以重复。
常用命令可以查看官网常用命令
二、Redis 键(key)
keys * --查看当前数据库中所有的key值
exists key的名字 --判断某个key是否存在
move key db --从当前库移除某个key
expire key 秒钟 --为给定的key设置过期时间
ttl key --查看key还有多少秒过期,-1表示永不过期,-2表示已过期
type key --查看某个key是什么类型
可参考下图:
三 、Redis字符串(String)
Redis 中的String 数据类型是单值单value,即一个key对应一个value.
set/get/del/append/strlen
--设置key和value/获取key对应的值/del删除key及对应的值/追加内容/获取key的值的长度
Incr/decr/incrby/decrby
--一定要是数字才能进行加减,字符串之类的将会报错
自增1/自减1/自增一定的增量值/自减一定的增量值
getrange/setrange
--getrange:获取指定区间范围内的值,类似between...and的关系,从0 到 -1 表示全部
setrange:设置指定区间范围内的值,格式是setrange key值 具体值
setex(set with expire)键秒值/setnx(set if not exist)
--setex:设置带过期时间的key,动态设置,setex 键 秒值 真实值
setnx:只有在key不存在时,设置key的值
mset/mget/msetnx
--mset:同时设置一个或多个key-value对。
mget:获取所有(一个或多个)给定的key的值。
msetnx:同时设置一个或多个key-value对,当且仅当所有给定的key都不存在才设置key-value对。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200504083220416.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MTk2MjY1,size_16,color_FFFFFF,t_70#pic_center)
getset(将给定的key的值设为新的value值,并返回key的旧值(old value))
--先get然后立即set,即,先把old vlaue get获取到,再立即set 设置key的新的value。
可参考下图:
四、Redis列表(List)
单值多value,一个key对应多个value。
LPUSH/RPUSH/LRANGE
--将一个或多个值插入到表头部/在列表中添加一个或多个值/获取列表指定范围内的元素
LPOP/RPOP
--移除并获取列表的第一个元素/移除并获取列表最后一个元素
LINDEX
--按照索引 下标 获得元素(从上到下)
LLEN
--获取列表长度
LREM key
--删除n个value
LTRIM key
--开始index 结束index,截取指定范围的值后再赋值给 key
RPOPLPUSH 源列表 目的列表
--移除源列表的最后一个元素,并将该元素添加到另一个(目的)列表并返回
LSET key index value
--通过索引设置列表元素的值
LINSERT key before/after value1 value2
--在list某个已有值的前后再添加具体值
可参考下图:
性能总结:list是一个字符串列表,left、right都可以插入添加;如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了;链表的操作无论是头和尾效率都极高,但如果是对中间元素进行操作,那效率就会非常低。
五、Redis集合(Set)
单值多value,一个key对应多个value。
sadd/smembers/sismember
--向集合添加 一个或多个成员/返回集合中的所有成员/判断member元素是否是集合key的成员
scard
--获取 集合里面元素的个数
srem key value
--删除集合中元素
srandmember key
--某个整数(随机出几个数),如果超过最大数量就会全部取出,如果写的值是负数,则表示需要取出3个,但可能会有重复
spop key
--随机出栈
smove key1 key2 在key里某个值
--将key1里的某个值赋给key2
数学集合类
--差集:sdiff --在第一个set里面,但不在后面任何一个set里面的元素;
--交集:sinter --在第一个set里面,并且也在后面的set里面的元素,即两个set中相同的元素;
--并集:sunion --两个set中所有的元素
可参考下图:
六、Redis哈希(Hash)
key-value模式不变,不过hash中的value是一个键值对(key-value)。
hset/hget/hmset/hmget/hgetall/hdel
--将hash表key中的字段field的值设为value/获取存储在hash表中指定字段的值/同时将多个field-value(域-值)对设置到哈希表的key中/获取所有给定字段的值/删除一个或多个哈希表字段
hlen
--获取hash表中字段的数量
hexists key 在key里面的某个值的key
--查看hash表key中,指定的字段是否存在
hkeys/hvals
--获取所有hash表中的字段/获取哈希表中所有值
hincrby/hincrbyfloat
--为hash表key中的指定字段的整数值加上增量increment/为hash表key中指定字段的浮点数值加上增量increment
hsetnx
--只有在字段field不存在时,设置hash表字段的值
可参考下图:
七、Redis有序集合Zset(Sorted set)
在set基础上,多加一个score值。例如:之前set 为:k1 v1 v2 v3…现在zset为:k1 score1 v1 score2 v2…
zadd/zrange
--向有序集合添加一个或多个成员(或者更新已存在成员的分数)/通过索引区间返回有序集合成指定区间内的成员
zrangebyscore key 开始score 结束score
--通过分数返回有序集合指定区间内的成员
zrem key 某score下对应的value值,作用是删除元素
--移除有序集合中的一个或多个成员
zcard/zcount key score 区间/zrank key values值作用是获得下标值/zscore key 对应值,获得分数
--获取有序集合的成员数/计算在有序集合中指定区间分数的成员数/返回有序集合中指定成员的索引/返回有序集合中,成员的分数值
zrevrank key values值
--逆序获得下标值
zrevrange
--返回有序集合中指定区间内的成员,通过索引,分数从高到低
zrevrangebyscore key 结束score 开始score
--返回有序集合中指定分数区间内的成员,分数从高到低排序
可参考下图: