Redis数据类型

本文详细介绍了 Redis 中的 String、List、Hash、Set 和 Sorted Set 五种数据类型的操作,包括常用命令如 SET、GET、APPEND、INCRBY、LPOP、RPOP、SADD、ZADD 等,以及如何进行批量操作、设置过期时间、修改元素等,展示了 Redis 对于不同数据结构的强大支持。
摘要由CSDN通过智能技术生成

一、String数据类型

1. set/get/append/strlen

127.0.0.1:6379> keys *  //查看当前数据库所有键
(empty list or set)
127.0.0.1:6379> exists k1  //判断键值是否存在
(integer) 0
127.0.0.1:6379> append k1 "hello"   //不存在,则相当于创建
(integer) 5
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> append k1 " world"  //存在,则追加
(integer) 11
127.0.0.1:6379> get k1
"hello world"
127.0.0.1:6379> set k1 "hw"  //覆盖操作
OK
127.0.0.1:6379> get k1
"hw"
127.0.0.1:6379> strlen k1  //获取指定key的字符长度
(integer) 2

2.INCR DECR INCRBY DECRBY

127.0.0.1:6379> exists k2   //判断k2是否存在
(integer) 0
127.0.0.1:6379> incr k2     //自增1,从0开始(key值必须位整数)
(integer) 1
127.0.0.1:6379> incr k2
(integer) 2
127.0.0.1:6379> incr k2
(integer) 3
127.0.0.1:6379> decr k2      //自减1
(integer) 2
127.0.0.1:6379> decr k2
(integer) 1
127.0.0.1:6379> decr k2
(integer) 0
127.0.0.1:6379> decr k2
(integer) -1
127.0.0.1:6379> incrby k2 5   //增加指定的整数
(integer) 4
127.0.0.1:6379> decrby k2 5   //减少指定的整数
(integer) -1
127.0.0.1:6379> 

3.getset

127.0.0.1:6379> set k3 1   //设定新键值
OK
127.0.0.1:6379> getset k3 2   //对存在的键值获取,然后赋值
"1"
127.0.0.1:6379> get k3
"2"
127.0.0.1:6379> getset k4 1   //不存在的获取为空,然后赋值 
(nil)
127.0.0.1:6379> get k4
"1"
127.0.0.1:6379> 

4. setex

setex  key  seconds  value
设置指定key的过期时间为seconds
127.0.0.1:6379> set k1 test  //设定新键值
OK
127.0.0.1:6379> setex k11 10 test   //设置k11的过期时间为10s
OK
127.0.0.1:6379> ttl k11
(integer) 5
127.0.0.1:6379> ttl k11    //-2表示已经过期
(integer) -2
127.0.0.1:6379> ttl k1     //-1表示永不过期
(integer) -1

5.setnx

127.0.0.1:6379> del k1  //删除前面的键
(integer) 0
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> setnx k1 1  // k1不存在则创建
(integer) 1
127.0.0.1:6379> setnx k1 2   // k1存在则放弃操作
(integer) 0
127.0.0.1:6379> get k1
"1"

6. mset mget msetnx

127.0.0.1:6379> mset k1 1 k2 2 k3 3  //批量设置键值
OK
127.0.0.1:6379> mget k1 k2 k3  //批量获取键值
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> msetnx k1 1 k4 4 k5 5 //因为k1存在,则失败
(integer) 0
127.0.0.1:6379> mget k1 k2 k3 k4 k5
1) "1"
2) "2"
3) "3"
4) (nil)
5) (nil)
127.0.0.1:6379> msetnx k4 4 k5 5  //k4 k5不存在,则成功
(integer) 1
127.0.0.1:6379> mget k1 k2 k3 k4 k5
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> 

二、List数据类型

列表的元素类型为string,按照插入顺序排序,在列表的头部或者尾部添加元素

1.lpush lpushx lrange

127.0.0.1:6379> lpush k1 a b c d  //每次在头部插入
(integer) 4
127.0.0.1:6379> lrange k1 0 -1    //取链表中的全部元素,0为第一个,-1为最后一个
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lpushx k2 e   //不存在k2则不插入
(integer) 0
127.0.0.1:6379> lpushx k1 e  //存在k1 则插入
(integer) 5
127.0.0.1:6379> lrange k1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> 

2.lpop llen

127.0.0.1:6379> lrange k1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> lpop k1   //移除头部的元素
"e"
127.0.0.1:6379> lpop k1
"d"
127.0.0.1:6379> llen k1    //获取表中元素数量
(integer) 3
127.0.0.1:6379> lrange k1 0 -1
1) "c"
2) "b"
3) "a"

3 lrem lset lindex ltrim

127.0.0.1:6379> lpush k1 a b c d a c  //准备列表
(integer) 6
127.0.0.1:6379> lrem k1 2 a       //删除两个值等于a的元素
(integer) 2
127.0.0.1:6379> lrange k1 0 -1
1) "c"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> lindex k1 1    //查看索引值为1的元素
"d"
127.0.0.1:6379> lset k1 1 b    //设置索引值为1的元素的值
OK
127.0.0.1:6379> lindex k1 1
"b"
127.0.0.1:6379> lset k1 5 b    //索引值不能超过列表
(error) ERR index out of range
127.0.0.1:6379> ltrim k1 0 2   //仅保留索引值0-2
OK 
127.0.0.1:6379> lrange k1 0 -1
1) "c"
2) "b"
3) "c"

4. linsert

127.0.0.1:6379> lpush k1 a b c d e   //准备列表
(integer) 5
127.0.0.1:6379> linsert k1 before a a1  //在a前插入a1
(integer) 6
127.0.0.1:6379> lrange k1 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a1"
6) "a"
127.0.0.1:6379> linsert k1 after e e2   //在e后插入e2
(integer) 7
127.0.0.1:6379> lrange k1 0 -1
1) "e"
2) "e2"
3) "d"
4) "c"
5) "b"
6) "a1"
7) "a"

5.rpush rpushx rpop rpoplpush

127.0.0.1:6379> rpush k1 a b c d   //在尾部插入元素
(integer) 4
127.0.0.1:6379> LRANGE k1 0 -1    //查看所有元素
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> rpushx k1 e   //插入e
(integer) 5
127.0.0.1:6379> lindex k1 4
"e"
127.0.0.1:6379> LRANGE k1 0 -1  
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> rpoplpush k1 k2   //将k1的尾部元素弹到k2
"e"
127.0.0.1:6379> LRANGE k1 0 -1    
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> LRANGE k2 0 -1
1) "e"
127.0.0.1:6379> rpoplpush k1 k2  //再弹一次
"d"
127.0.0.1:6379> LRANGE k1 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpop k2   //移除尾部元素
"e"
127.0.0.1:6379> rpop k2
"d"
127.0.0.1:6379> LRANGE k2 0 -1
(empty list or set)
127.0.0.1:6379> LRANGE k1 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpoplpush k1 k1  //将尾部数据移到头部
"c"
127.0.0.1:6379> LRANGE k1 0 -1
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> 

三、Hash数据类型

1.hset hget hdel hexists hlen hsetnx

127.0.0.1:6379> 
127.0.0.1:6379> hset h1 field1 zhangsan  //字段为field1,值为zhangsan
(integer) 1
127.0.0.1:6379> hget h1 field1  //获取键值为h1,字段为field1的值
"zhangsan"
127.0.0.1:6379> hset h1 field2 lisi
(integer) 1
127.0.0.1:6379> hget h1 field2
"lisi"
127.0.0.1:6379> hlen h1   //获取h1的字段数量
(integer) 2
127.0.0.1:6379> hexists h1 field1  //判断h1的field1是否存在,1为存在,0为不存在
(integer) 1
127.0.0.1:6379> hdel h1 field1  //删除
(integer) 1
127.0.0.1:6379> hexists h1 field1
(integer) 0
127.0.0.1:6379> hsetnx h1 field1 zhangsan //因为不存在则设置
(integer) 1
127.0.0.1:6379> hsetnx h1 field1 zhangsan  //因为存在则不执行操作
(integer) 0
127.0.0.1:6379> 

2.hincrby

127.0.0.1:6379> hset myhash field 5  //设置字段为field1的值为5
(integer) 1
127.0.0.1:6379> hincrby myhash field 5  //使其增加5
(integer) 10
127.0.0.1:6379> hincrby myhash field 5
(integer) 15
127.0.0.1:6379> hincrby myhash field -20  //使其减少20
(integer) -5
127.0.0.1:6379> 

3.hgetall hkeys hvals hmget hmset

127.0.0.1:6379> hmset hash f1 hello f2 world  //批量设置多个字段
OK
127.0.0.1:6379> hmget hash f1 f2 f3  //批量获取多个字段
1) "hello"
2) "world"
3) (nil)
127.0.0.1:6379> hgetall hash   //获取全部字段
1) "f1"
2) "hello"
3) "f2"
4) "world"
127.0.0.1:6379> hkeys hash   //获取字段名
1) "f1"
2) "f2"
127.0.0.1:6379> hvals hash   //获取字段值
1) "hello"
2) "world"
127.0.0.1:6379> 

四、set数据类型(无序集合)

无序集合,元素类型为string,元素具有唯一性,不允许存在重复的成员

1.sadd smembers scard sismember

127.0.0.1:6379> sadd set a b c  //插入数据
(integer) 3
127.0.0.1:6379> sadd set a d e  //a存在,插入d e
(integer) 2
127.0.0.1:6379> SMEMBERS set    //查看数据
1) "a" 
2) "c"
3) "d"
4) "b"
5) "e"
127.0.0.1:6379> SISMEMBER set a   //查看a在 返回1
(integer) 1
127.0.0.1:6379> SISMEMBER set f   //f不在 返回0
(integer) 0
127.0.0.1:6379> SMEMBERS set     //再次查看数据,无序
1) "d"
2) "b"
3) "e"
4) "c"
5) "a" 
127.0.0.1:6379> SCARD set     //获取集合中元素数量
(integer) 5
127.0.0.1:6379> 

2. spop srem srandmember smove

127.0.0.1:6379> sadd set a b c d  //插入数据
(integer) 4
127.0.0.1:6379> SMEMBERS set   //查看数据
1) "a"
2) "c"
3) "d"
4) "b"
127.0.0.1:6379> SRANDMEMBER set  //随机返回一个元素
"a"
127.0.0.1:6379> SRANDMEMBER set
"a"
127.0.0.1:6379> SRANDMEMBER set
"d"
127.0.0.1:6379> spop set        //随机删除一个元素
"d"
127.0.0.1:6379> SMEMBERS set
1) "a"
2) "c"
3) "b"
127.0.0.1:6379> SREM set a b f   //移除三个元素,f不存在,则成功两个
(integer) 2
127.0.0.1:6379> SMEMBERS set
1) "c"
127.0.0.1:6379> SMOVE set set2 c  //将set里的c移到set2
(integer) 1
127.0.0.1:6379> SMOVE set set2 c   //set中无c
(integer) 0
127.0.0.1:6379> SMEMBERS set2
1) "c"


五、Sortcd Set数据类型(有序集合)

元素类型为string,元素具有唯一性,不能重复,每个元素都会关联一个double类型的分数,可以通过权重的大小排序,元素的score可以相同

1.zadd zcrad zcount zrem zincrby zrange zrank

127.0.0.1:6379> zadd zset 1 one   //添加一个分数为1的成员
(integer) 1
127.0.0.1:6379> zadd zset 2 two 3 three  //新加两个成员
(integer) 2
127.0.0.1:6379> ZRANGE zset 0 -1 withscores  //查看数据
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> zrank zset one  //获取索引值
(integer) 0
127.0.0.1:6379> zrank zset four  //不存在返回nil
(nil)
127.0.0.1:6379> zcard zset   //获取成员数量
(integer) 3
127.0.0.1:6379> zcount zset 1 2  //满足分数在1-2的成员
(integer) 2
127.0.0.1:6379> zrem zset one two  //删除成员
(integer) 2 
127.0.0.1:6379> zcard zset     //获取成员数量
(integer) 1
127.0.0.1:6379> zscore zset three  //获取成员分数
"3"
127.0.0.1:6379> zscore zset two   //不存在 返回nil
(nil)
127.0.0.1:6379> ZINCRBY zset 2 one   //将成员one的分数+2,不存在从0开始
"2"
127.0.0.1:6379> ZINCRBY zset -1 one
"1"
127.0.0.1:6379> ZRANGE zset 0 -1 withscores  //满足分数在1-2的成员  
1) "one"
2) "1"
3) "three"
4) "3"

2. zrangebyscore zrembyrank zremrangebyscore

127.0.0.1:6379> zadd zset 1 one 2 two 3 three //添加几个成员
(integer) 3
127.0.0.1:6379> ZRANGEBYSCORE zset 1 2  //获取分数在1-2的成员
1) "one"
2) "two"
127.0.0.1:6379> ZRANGEBYSCORE zset (1 2  //获取分数在大于1小于等于2的成员
1) "two"
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf limit 2 3  //获取在2-3的全部成员
1) "three" 
127.0.0.1:6379> ZREMRANGEBYSCORE zset 1 2  //删除索引值在1-2的成员
(integer) 2
127.0.0.1:6379> zrange zset 0 -1   //查看所有成员
1) "three"
127.0.0.1:6379> ZREMRANGEBYRANK zset 0 1  //删除索引值在0-1的成员
(integer) 1
127.0.0.1:6379> ZREMRANGEBYRANK zset 0 1
(integer) 0
127.0.0.1:6379> zcard zset   //查看成员数量
(integer) 0
127.0.0.1:6379> 

3.zrevrange zrevrangebyscore zrevrank

127.0.0.1:6379> zadd zset 1 one 2 two 3 three 4 four   //添加成员
(integer) 4
127.0.0.1:6379> ZREVRANGE zset 0 -1 withscores  //以索引值从高到低返回成员
1) "four"
2) "4"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> ZREVRANGE zset 1 3 //返回索引值在1-3的成员
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrevrank zset one  //返回one的索引值
(integer) 3
127.0.0.1:6379> zrevrank zset four
(integer) 0
127.0.0.1:6379> ZREVRANGEBYSCORE zset 3 0  //分数从高到低
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> ZREVRANGEBYSCORE zset 4 0 limit 1 2 //满足分数4-0,且索引值从1开始的两位成员
1) "three"
2) "two"
127.0.0.1:6379> ZREVRANGEBYSCORE zset +inf -inf limit 1 3  //全部成员在索引值为1开始的后三位成员
1) "three"
2) "two"
3) "one"

小结

redis:存/取

  • list列表查询
    lrange key start stop (0 -1)

  • string字符串
    get 单个获取
    mget 批量获取

  • hash散列类型
    hget 查询指定hash的指定字段的值
    hgetall 查询指定hash的所有字段的值
    hmget 批量查询指定hash的指定字段的值
    hkeys 查询指定hash的字段名
    hvals 查询指定hash的值

  • set无序集合
    smembers key

  • zset有序集合
    zrange key start stop (0 -1)

Redis支持多种数据类型,包括string、hash、list、set和sorted set等。其中,string是最基本、最简单的数据类型,用于存储字符串。 Hash是用于存储键值对的数据结构,其中的value只能存储字符串,不允许存储其他数据类型,也不存在嵌套现象。每个hash可以存储232 - 1个键值对,并可以灵活添加或删除对象属性。但需要注意的是,hash类型并不适合存储大量对象,也不应该将hash作为对象列表使用,因为遍历整体数据的效率可能会较低。 除了string和hash类型,Redis还支持list、set和sorted set等数据类型。List是一个有序的字符串列表,可以进行插入、删除和查找等操作。Set是一个无序的字符串集合,可以进行元素的添加、删除和查找操作,并且不允许重复元素的存在。Sorted Set是一个有序的字符串集合,每个元素都有一个对应的score,可以根据score进行排序和范围查找。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Redis 数据类型](https://blog.csdn.net/weixin_52851967/article/details/122670564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值