Redis之五大数据类型

Redis数据类型

本仙鱼最近在学Linux,然后就学了Redis,感觉很有意思,来做一下分享.

  • Redis是一种典型的Nosql(非关系)型数据库,存储方式不再是关系型数据库中的表(table)的形式,而是"Key-Value"的存储方式;
  • 对于数据量多,数据交互效率要求高的场景,可以考虑使用redis;
  • 数据类型一共有五大类:String,List,Set,ZSet,Hash,下面我们一个一个介绍一下:

1 String

1 这个String可不是你想当然的字符串,而是一个一个Key-Value;注意这里的映射关系的一对一,即一个Key对应一个Value,如下表:
Key Value
id 1
username xiaoming
age 18
gender boy
2 在Linux中操作的相关指令及描述
指令 示例 描述
set set username mingming 设置一个Key为username,Value为mingming(同一个Key重复此操作将覆盖前面设置的Value)
get get username 获取Key为username的Value值
mset mset age 18 gender boy 同时设置多个Key-Value:age-18,gender-boy
mget mget username age boy 同时获取多个Key对应的Value值
getset getset username xiaming 获取Key为username的value值并修改为xiaoming
strlen strlen username 获取Key为username对应的Value值得长度
append append username aaa 为Key为username得Value追加aaa,前提是这个Key是存在得
getrange getrange username 3 5 截取Key为username的Value对应的下标为3-5之间的内容,对原始的值没有影响
setex setex username 8 zhangsan 对Key设置存活期,对,就是你让他或多长时间,单位是秒
psetex psetex username 8000 zhangsan 和上面的这个一样,只是单位为毫秒
setnx setnx username mingming 这个操作和set一样都是设置Key-Value,只是若Key存在时,set会覆盖Value的值,而setnx不会覆盖,只有当Key是不存在时才会生效
msetnx msetnx username ming age 19 gender boy 这个操作和mset类似都是设置多个Key-Value,当设置的Key已存在时,mset覆盖Key对应的Value值,msetnx不会覆盖,只有当Key不存在时才生效
decr/incr decr age /incr age 对Key为age的Value进行加一/减一的操作,这里只能操作Value为integer类型的Key
decrby/incrby decrby age 5/incrby age 5 对Key为age的Value进行加减5的操作,这里只能操作Value为integer类型的Key
incrbyfloat incrbyfloat age 10.6 根据提供的数据加入浮点数(若想减的话加一个负的浮点数就可以啦)
keys * keys * 查看所有的Key
ttl ttl username 查看Key为username的剩余存活时间
del del username 删除Key为username的Key-Value
flushDB flushDB 删除当前库中的所有数据(Redis默认是有0-15,一共16个库)
select select 5 选择Redis的第六个库(库为0-15)
后面的三个后面的同样适用哇,如此细致到位的指令,贴心不,点个赞哇~

2 List

1 List不就是集合嘛,这里的List是一个Key对应了多个Value值,可以理解为是一对多的Key-Value,这里的Value是有序的┗|`O′|┛ 嗷~~
Key Value
username xiaoming,zhangsan,lisi
age 18,19,20,21
2 在Linux中操作的相关指令及描述
指令 示例 描述
lpush lpush username mingming lisi zhangsan 将某个(几个)值加入到一个key列表头部
lpushx lpush username lisi 同lpush,但是必须要保证这个key存在
rpush rpush username haha hehe heihei 将某个(几个)值加入到一个key列表末尾
rpushx rpushxusername lala tuitui 同rpush,但是必须要保证这个key存在
lpop lpop username 返回和移除列表的第一个元素
rpop rpop username 返回和移除列表的最后一个元素
lrange lrange username 0 5 获取某一个下标区间内的元素(下标从0开始)
llen llen username 获取列表元素个数
lset lset username 4 yyyy 设置某一个位置的元素(替换已有的某个值)
lindex lindex username 2 获取某一个位置的元素
lrem lrem username 2 mmnn 从列表头起,删除对应位置开始的指定元素
ltrim ltrim username 2 6 保留列表中特定区间内的元素,将其他的元素删除
linsert linsert username after/before oldvalue newvalue 在某一个元素之前,之后插入新元素

3 Set

1 Set也是一个一对多的Key-Value,与List不同的是这里的Key对应的Values们是无序的

Redis之五大数据类型

2 在Linux中操作的相关指令及描述
指令 示例 描述
sadd sadd username lisi wangwu 为集合添加元素
smembers smembers username 显示集合中所有元素 无序
scard scard username 返回集合中元素的个数
spop spop username 随机返回并移除一个元素
smove smove oldset newset hahah 从一个集合中向另一个集合移动元素
srem srem username mingming 从集合中删除一个元素
sismember sismember username mingming 判断一个集合中是否含有这个元素
srandmember srandmember username 2 随机返回元素,对原始数据没有影响
sdiff sdiff username1 username2 减去两个集合*有的元素
sinter sinter username1 username2 求交集
sunion sunion username1 username2 求并集

4 ZSet

1 说到ZSet你可能会有一个疑问,上面已经介绍了Set,这个ZSet是个什么鬼?Set集合的Key对应的Values是无序的,那么ZSet就是加了一些规则,使Set好像变的有序了,实际上还是无序的…你能转过来不?

Redis之五大数据类型

2 话不多说,直接上指令吧(简略的一写,累啊~)
指令 示例 描述
zadd zadd username 1 a 2 b 3 c 添加一个有序集合元素,根据元素的score排序,这里的1, 2,3emmm,你理解为权重吧,越小越靠前
zcard zcard username 返回集合的元素个数
zrange zrange username 1 5 返回一个范围内的元素
zrangebyscore zrangebyscore key min max 按照分数查找一个范围内的元素
zrank zrank key xx 返回对应元素的排名
zrevrank zrevrank key xx 返回对应元素倒序排名
zscore zscore key xxx 显示某一个元素的分数
zrem zrem key 4 移除某一个元素
zincrby zincrby key score xx 给某个特定元素加分

5 Hash

1 Hash哈希,说到这里我想起来了二叉树,老兔子生小兔子的故事,哈哈算是比较形象的比喻吧,前面的四种数据类型都是Key对应Value,注意了,Hash中的Key对应的是一个一个的Key-Value,如下图:

Redis之五大数据类型

2 在Linux中操作的相关指令及描述
指令 示例 描述
hset hset user username xiaoming 设置一个key/value对
hget hget user username 获得一个key对应的value
hmset hmset user age 18 school qh 设置多个key/value
hmget hmget user age school 获得多个key的value
hgetall hgetall user 获得所有的key/value对
hdel hdel user username age 删除某一个key/value对
hexists hexists user username 判断一个key是否存在
hkeys hkeys user 获得所有的key
hvals hvals user 获得所有的value
hsetnx hsetnx key filed value 设置一个不存在的key的值
hincrby hincrby key filed 2 为value进行加法运算
hincrbyfloat hincrbyfloat key filed 2.2 为value加入浮点值
到这里你学会了吗?反正我是会咯
有问题请在留言中给出,给孩子点个赞吧~
仙鱼提前祝您端午节快乐~