Redis的数据类型

简介

  Redis是现在最受欢迎的NoSQL数据库之一,它是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库。

  如何安装Redis?https://www.cnblogs.com/liuqingzheng/p/9831331.html

  一般Redis可以存储的数据类型是,String、Hash、List、SortedSet(zSet)、Set。

一.字符串String ---- String Key-Value

  字符串是Redis中最常用的类型,是一个由字节组成的序列,它在Redis中是二进制安全的,这意味该类型可以接受任何格式的数据。Value最多可以容纳的数据长度是512MB。

//命令

//添加元素
//ex:秒级过期时间,nx:键不存在时才能设置成功,xx键存在时才能设置成功
set key value [ex seconds] [px milliseconds] [nx|xx]

//获取值
get key

//批量设置值
mset key value [key value ...]

//加法    对应的key值自增1,如果没有这个key值,自动给你创建并赋值1
//对应key值不是数字,会报错((error) ERR value is not an integer or out of range)
incr key

//减法    对应的key值自减1,如果没有这个key值,自动给你创建并赋值-1
//对应key值不是数字,会报错((error) ERR value is not an integer or out of range)
decr key

//获取key对应value的字符串长度
strlen key

//设置并返回原值
getset key value

//设置指定位置的字符
setrange key offeset value
//例子
 set redis pest
 setrange redis 0 b
 get redis
 结果:"best"
 
//获取部分字符串
getrange key start end 

二.散列Hash ---- key-field-value

  相当于是一个key存在多个map。Redis中的散列可以看成具有String key和String value的map容器,可以将多个key-value存储到一个key上。每一个Hash可以存储4294697295个键值对。

//命令

//设置值
hset key field value

//获取值
hget key field

//删除field
hdel key field [field ...]

//计算field个数
hlen key

//批量设置或获取field-value
hmset key field value [field value ...]
hmget key field [field ...]

//判断field是否存在
hexists key field

//获取所有field
hkeys key

//获取所有value
hvals key

//获取所有的field-value
hgetall key

//以某种形式自增(Int) increment为增量
//对应value必须为int,否则报错((error) ERR hash value is not an integer)
hincrby key field increment


//以某种形式自增(Float) increment为增量
//对应value必须为float,否则报错((error) ERR hash value is not a valid float)
hincrbyfloat key field increment

//计算value的字符串长度
hstrlen key field

 三.集合Set

  Redis的集合是无序不可重复的,此处的无序是数据不能重复。和列表一样,在执行插入和删除以及判断是否存在某元素时,效率是很高的。集合最大的优势在于可以进行交集并集差集操作。Set可包含的最大元素数量是4294967295。

//命令

//添加元素
sadd key element ...

//删除元素
srem key element [element ...]
//返回成功删除元素个数//计算元素个数
scard key

//判断元素是否在集合中
sismember key element

//随机从集合返回指定个数元素
srandmember key [count]

//从集合随机弹出元素(可以理解为随机删除元素)
spop key [count]

//获取所有元素
smembers key

//多个集合求交集
sinter key [key ...]

//多个集合求并集
sunion key [key ...]

//求多个集合的差集(前面key对应value比后面key对应value多出的值)
sdiff key [key ...]

//将交集、并集、差集的结果保存(得到的结果另存为到一个新的set中)
sinterstore destination key [key ...]
suionstore destination key [key ...]
sdiffstore destination key [key ...]

四.列表List

  Redis的列表允许用户从序列的两端推入和弹出元素,列表由多个字符串值组成的有序可重复的序列,是链表结构,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是较快的。List可以包含的最大元素数量是4294967295。

//命令

//从右边插入元素
rpush key value [value ...]

//从左边插入元素
lpush key value [value ...]

//向某个元素前或者后插入元素
linsert key before|after pivot value

//获取指定范围内的元素列表
lrange key start end

//获取列表指定索引下标的元素
lindex key index

//获取列表长度
llen key

//从列表左侧弹出元素(即删除,返回被弹出的值)
lpop key

//从列表右侧弹出(即删除,返回被弹出的值)
rpop key

//删除指定元素,count>0从左到右,count<0从右到左,count=0,删除所有
//value是指定要删除的值,会有重复的值,所以要判断是从左边开始找删除的值还是右边开始找或者所有都删
lrem key count value

//按照索引范围修剪列表
ltrim key start end

五.SortedSet(zSet)

  有顺序不能重复。此处的不能重复是索引是唯一的,数据却可以重复。和Set很像,都是字符串的集合,都不允许重复的成员出现在一个set中。他们之间的差别在于有序集合中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。尽管有序集合中的成员必须是唯一,但是分数(score)却可以重复。

//命令

//添加成员
zadd key score member

//计算成员个数
zcard key

//计算某个成员的分数,如果成员不存在,则返回nil
zscore key member

//计算成员的排名,zrank是分数从低到高,zrevrank从高到低
zrank key member
zrevrank key member

//删除成员
zrem key member

//增加成员的分数
zincrby key increment member

//返回指定排名范围的成员
//从低到高返回
zrange key start end [withscores]
//从高到低返回
zrevrange key start end [withscores]

//返回指定分数范围的成员
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]

//返回指定分数范围成员个数
zcount key min max

//删除指定排名内的升序元素
zremrangebyrank key start end

//删除指定分数范围的成员
zremrangebyscore key min max

//求两个集合交集 (destination:得到的结果另存为的新zSet名字)
zinterstore destination numkeys key [key ...] [weights weight [weight ...]]
[aggregate sum|min|max]

//求并集(destination:得到的结果另存为的新zSet名字)
zunionstore destination numkeys key [key ...] [weights weight [weight ...]]
[aggregate sum|min|max]

 

posted @ 2021-03-01 15:47  shine声  阅读(284)  评论(0编辑  收藏  举报