Redis基本数据类型和函数

Redis基本命令

1、Redis数据类型

Redis有string(字符串)、hash(哈希)、list(列表)、set(集合)和zset(有序集合)五种数据类型

1.1、String(字符串)

string类型是Redis的最基本的数据类型,string类型的值最大能存储512MB。

可以存储任何数据,结构是一个key对应一个value。

1.1.1、基本语法
COMMAND key_name
1.1.2、基本命令
  1. SET key value

    设置指定key的值。

    服务器:0>set abc 123
    "OK"
    
  2. GET key
    获取指定key的值。

    服务器:0>get abc
    "123"
    
  3. GETSET key value
    修改指定key的值为新值,并返回这个key的旧值。

    服务器:0>getset abc 234
    "123"
    服务器:0>get abc
    "234"
    
  4. GETRANGE key start end

    返回指定key的值从start到end的子字符串

    服务器:0>getrange abc 0 1
    "23"
    
  5. GETBIT key offset

    对于指定的key的字符串,获取指定偏移量上的位。

    通俗意思就是将key对应的字符串转换为二进制0和1,从左往右数,offset为几,就是当前偏移量上的位值,要么0,要么1。

    服务器:0>getbit abc 1
    "0"
    

    参考链接:

  6. SETBIT key offset value
    修改指定key对应字符串指定的位的值,只能修改为0或1,否则报错。

    详解见上条命令GETBIT

    服务器:0>setbit abc 1 1
    "0"
    服务器:0>get abc
    "r34"
    
  7. MGET key1 [key2…]
    获取一个或多个key的值。

    服务器:0>mget abc def
     1)  "r34"
     2)  "567"
    
  8. SETEX key seconds value

    设置或覆盖key的值为value,并设置有效期seconds,秒为单位。

    服务器:0>setex abc 10 789
    "OK"
    服务器:0>get abc
    "789"
    

    十秒后

    服务器:0>get abc
    null
    
  9. SETNX key value
    只有在key不存在的时候设置key的值,意思就是不能覆盖写入!

    服务器:0>set abc 123
    "OK"
    服务器:0>setnx abc 456
    "0"
    服务器:0>get abc
    "123"
    服务器:0>get xyz
    null
    服务器:0>setnx xyz 987
    "1"
    服务器:0>get xyz
    "987"
    
  10. SETRANGE key offset value
    用value覆盖写入key对应的字符串,从偏移量offset开始。

    服务器:0>get abc
    "123"
    服务器:0>setrange abc 1 098
    "4"
    服务器:0>get abc
    "1098"
    
  11. STRLEN key
    返回key对应字符串的长度

    服务器:0>get abc
    "1098"
    服务器:0>strlen abc
    "4"
    服务器:0>strlen def
    "3"
    
  12. MSET key value [key value…]

    同时设置多个key-value对。

    服务器:0>mset abc 123 def 234
    "OK"
    服务器:0>mget abc def
     1)  "123"
     2)  "234"
    
  13. MSETNX key value [key value…]

    同时设置多个key-value对,当且仅当所有的key都不存在。

    服务器:0>mget abc def
     1)  "123"
     2)  "234"
    服务器:0>msetnx abc 567 def 890
    "0"
    服务器:0>mget abc def
     1)  "123"
     2)  "234"
    服务器:0>del xyz
    "1"
    服务器:0>msetnx abc 567 def 890 xyz 009
    "0"
    服务器:0>mget abc def xyz
     1)  "123"
     2)  "234"
     3)  null
    服务器:0>del abc def xyz opt
    "4"
    服务器:0>mget abc def xyz opt
     1)  null
     2)  null
     3)  null
     4)  null
    服务器:0>msetnx abc 123 def 456 xyz 789
    "1"
    服务器:0>mget abc def xyz opt
     1)  "123"
     2)  "456"
     3)  "789"
     4)  null
    
  14. PSETEX key milliseconds value
    和SETEX命令相似,SETEX是以秒为单位设置key的过期时间,PSETEX是以毫秒为单位设置key的过期时间,这里就不举例了。

  15. INCR key

    将key对应的数字值加1,必须为数字,不然报错。

    服务器:0>get abc
    "123"
    服务器:0>incr abc
    "124"
    服务器:0>get abc
    "124"
    服务器:0>set abc qqq
    "OK"
    服务器:0>get abc
    "qqq"
    服务器:0>incr abc
    "ERR value is not an integer or out of range"
    
  16. INCRBY key increment

    将key对应的数字值加上指定的增量(increment),和INCR类似。

    服务器:0>set abc 123
    "OK"
    服务器:0>get abc
    "123"
    服务器:0>incrby abc 10
    "133"
    服务器:0>get abc
    "133"
    
  17. INCRBYFLOAT key increment

    将key对应的数字值加上指定的浮点增量(increment),和INCR类似。

    服务器:0>get abc
    "133"
    服务器:0>incrbyfloat abc 1.1
    "134.10000000000000001"
    服务器:0>get abc
    "134.10000000000000001"
    

    至于为什么是000000001,设计就是这样,可以自行百度0.0。
    建议减少使用此方法!!!会出现精度问题!!!尽量使用INCR。

  18. DECR key

    将key对应的数字值减1,必须为数字,不然报错。

    服务器:0>set abc 123
    "OK"
    服务器:0>decr abc
    "122"
    服务器:0>get abc
    "122"
    
  19. DECRBY key increment

    将key对应的数字值减去指定的减量(increment),和DECR类似。

    服务器:0>get abc
    "122"
    服务器:0>decrby abc 10
    "112"
    服务器:0>get abc
    "112"
    
  20. APPEND key value

    如果key对应的字符串存在,则在当前字符串末尾追加指定的value字符串;如果key对应的字符串不存在,则直接给设置当前key的值为value。

    服务器:0>del abc
    "1"
    服务器:0>get abc
    null
    服务器:0>append abc 123
    "3"
    服务器:0>get abc
    "123"
    服务器:0>append abc 456
    "6"
    服务器:0>get abc
    "123456"
    

1.2、Hash(哈希)

Redis hash是一个string类型的field(字段)和value(值)的映射表,适用于存储对象。

Redis每个hash可以存储232-1键值对(40多亿)

1.2.1、基本命令
  1. HSET key field value

    将哈希表key中的字段filed的值设置为value。

    服务器:0>hset test name jly
    "1"
    服务器:0>hset test age 20
    "1"
    服务器:0>hset test addr "河南"
    "1"
    服务器:0>hgetall test
     1)  "name"
     2)  "jly"
     3)  "age"
     4)  "20"
     5)  "addr"
     6)  "河南"
    
  2. HMSET key field1 value1 [field2 value2…]
    同时将多个field-value对设置到哈希表hkey中

    服务器:0>hmset test1 name zs age 21 addr 河北
    "OK"
    服务器:0>hgetall test1
     1)  "n
### Spring Boot 中整合 Redis 并操作各种数据类型 #### 配置 Redis 连接 在 `application.yml` 文件中配置 Redis 的连接参数,如下所示: ```yaml spring: redis: host: localhost port: 6379 password: database: 10 ``` 此部分配置定义了 Redis 实例的位置、端口以及其他必要的属性[^3]。 --- #### String 类型的操作 对于字符串类型的存储获取,可以使用 `opsForValue()` 方法。以下是具体实现方式: - **设置值** 将一个键值对存入 Redis: ```java @Autowired private StringRedisTemplate redisTemplate; public void setString(String key, String value) { redisTemplate.opsForValue().set(key, value); } ``` - **获取值** 根据给定的键从 Redis 中读取对应的值: ```java public String getString(String key) { return (String) redisTemplate.opsForValue().get(key); } ``` 上述代码展示了如何利用 `redisTemplate.opsForValue().set()` `.get()` 来完成基本的字符串写入与查询功能[^1]。 --- #### Hash 类型的操作 哈希结构允许将多个字段及其关联的值作为一个整体进行管理。下面是如何执行哈希表的增删改查操作的例子: - **批量插入多组键值对** 借助 `putAll()` 函数一次性向某个命名空间下的散列表填充若干条记录: ```java Map<String, Object> map = new HashMap<>(); map.put("field1", "value1"); map.put("field2", "value2"); redisTemplate.opsForHash().putAll("myhash", map); ``` - **单个字段更新/新增** 如果仅需修改某一项,则可单独调用 `put()` 方法来处理特定项的数据变更需求: ```java redisTemplate.opsForHash().put("myhash", "newField", "newValue"); ``` 这些函数提供了灵活的方式来管理维护复杂的嵌套关系中的子节点信息[^2]。 --- #### List 类型的操作 列表是一种有序集合形式,在实际应用中有广泛用途。这里列举几个常用命令说明其工作原理: - **左推入元素至队列头部** 向已存在的链表左侧追加新成员实例演示: ```java redisTemplate.opsForList().leftPush("mylist", "item1"); ``` - **右弹出最后一个项目** 当需要移除并返回最末端的一项时可用以下语句达成目的: ```java String lastItem = (String) redisTemplate.opsForList().rightPop("mylist"); ``` 以上两步分别代表了双向动态调整数组长度的能力体现之一方面[^4]。 --- #### Set 类型的操作 无序不重复集合作为另一种基础抽象模型同样重要。下面是关于它的简单介绍: - **添加唯一元素进入群组之中** 确保每次加入的新实体不会与其他已有者发生冲突: ```java redisTemplate.opsForSet().add("myset", "memberA", "memberB"); ``` - **随机抽取其中的一个样本出来查看** 可以轻松实现概率分布均匀采样的效果: ```java Object randomMember = redisTemplate.opsForSet().randomMember("myset"); ``` 这种特性非常适合用来构建抽奖类业务逻辑场景下所需的功能模块[^5]。 --- #### ZSet(Sorted Set)类型的操作 带权重排序后的集合具备更多高级特性的支持能力。比如按分数高低排列展示排行榜等功能都可以依赖于此种机制得以高效解决: - **增加带有评分等级的信息单元进去体系内部保存起来备用** 结合分值一起录入待检索的目标对象详情资料: ```java redisTemplate.opsForZSet().add("myleaderboard", "playerX", 85.5d); ``` - **依据范围筛选符合条件的结果呈现出来供进一步分析判断所用** 提取出前几名表现优异者的名单清单作为最终输出结果的一部分组成部分: ```java Set<ZSetOperations.TypedTuple<Object>> topPlayers = redisTemplate.opsForZSet() .reverseRangeWithScores("myleaderboard", 0, 2); ``` 这样就可以方便快捷地统计出各个维度上的优胜选手情况一览表[^6]。 --- ### 总结 通过上述描述可以看出,在 Spring Boot 应用程序里集成 Redis 不但能够简化开发流程而且还能极大地提升性能效率水平。无论是简单的 Key-Value 存储还是复杂的关系建模都能找到合适的解决方案予以应对满足不同层次的需求标准。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值