Redis–String篇

一、常用命令

1.set <key> <value> [EX seconds] [PX milliseconds] [NX|XX]

设置key对应的value值:

127.0.0.1:6379> set k1 foobar
OK
127.0.0.1:6379> get k1
"foobar"

对同一个key重复set value会覆盖原来的值:

127.0.0.1:6379> set k1 foobar
OK
127.0.0.1:6379> get k1
"foobar"
127.0.0.1:6379> set k1 barbar
OK
#get后可以看到数据被覆盖
127.0.0.1:6379> get k1
"barbar"

可选参数:
EX ${time}:value过期时间(s),可使用ttl <key>查看过期剩余时间,-1表示永不过期,-2表示已过期;
PX ${time}: value过期时间(ms),与EX互斥;
NX:当数据库key不存在时添加数据
XX:当数据库存在key时添加数据

127.0.0.1:6379> set k2 555 xx
(nil)
127.0.0.1:6379> set k2 555 nx
OK

2.get <key>

获取key对应的value

127.0.0.1:6379> get k2
"555"
#不存在时返回null
127.0.0.1:6379> get k3
(nil)

3.append <key> <value>

在key对应的value尾部贫瘠字符串

127.0.0.1:6379> get k2
"555"
127.0.0.1:6379> append k2 666
#返回拼接后新的字符串长度
(integer) 6
127.0.0.1:6379> get k2
"555666"

4.setnx <key> <value>

当key不存在时插入数据,功能与set \<key> \<value> nx一致

127.0.0.1:6379> get k1
"aaa"
127.0.0.1:6379> setnx k1 bbb
(integer) 0
127.0.0.1:6379> get k1
"aaa"
127.0.0.1:6379> setnx k2 111
(integer) 1

5.strlen <key>

获取key对于的value的字符串长度

127.0.0.1:6379> get k2
"555666"
127.0.0.1:6379> strlen k2
(integer) 6

6.incr <key>

key对应的值加一

7.decr <key>

key对应的值减一

127.0.0.1:6379> get k3
"500"
127.0.0.1:6379> incr k3
(integer) 501
127.0.0.1:6379> decr k3
(integer) 500

8.incrby <key> <step>

key对应的值加step

9.decrby <key> <step>

key对应的值减step

127.0.0.1:6379> get k3
"500"
127.0.0.1:6379> incrby k3 100
(integer) 600
127.0.0.1:6379> decrby k3 100
(integer) 500

ps: 由于Redis是单线程的,这些自增减操作都是原子操作。

10.mset <key1> <value1> <key2> <value2>…

设置多个键值对

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK

11.mget <key1> <key2> …

获取多个键值对的值

127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) (nil)

13.msetnx <key1> <value1> <key2> <value2>…

设置多个键值对,若其中一个key在redis中已经存在则会导致全部插入失败

127.0.0.1:6379> msetnx kkk1 vvv1 kkk2 vvv2
(integer) 1
#key kk1已存在,全部插入失败
127.0.0.1:6379> msetnx  aa1 a1 aa2 a2 kk1 aa3
(integer) 0
127.0.0.1:6379> keys *
1) "kkk2"
2) "k2"
3) "k3"
4) "kkk1"
5) "k1"
6) "kk1"
7) "kk2"

14.getrange <key> <start> <end>

获取key对应的value字符串的字串,类似于Java的subString,但它会取到右边界。

127.0.0.1:6379> get key
"abcdefg"
127.0.0.1:6379> getrange key 0 3
"abcd"
127.0.0.1:6379> GETRANGE key 0 1000
"abcdefg"

15.setrange <key> <offset> <value>

在value的第i个位置插入值

127.0.0.1:6379> get key
"abcdefg"
127.0.0.1:6379> setrange key 2 555
(integer) 7
127.0.0.1:6379> get key
"ab555fg"

16.setex <key> <second> <value>

设置带有过期时间的键值对

127.0.0.1:6379> setex key 20 123456
OK
127.0.0.1:6379> ttl key
(integer) 16

17.getset <key> <value>

设置新值并取得旧值:

127.0.0.1:6379> getset key lucy
"jack"

二、Redis中string的底层数据结构:

String的底层数据结构为简单动态字符串(Simple Dynamic String,简写为SDS ),是一种可以修改的字符串。内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
扩容机制: 在底层数据结构中字符数组的容量(capacity)总是要大于实际长度(len),当实际长度等于字符数组容量时,触发扩容,在当前容量小于1M时则扩容为原来两倍,超过1M时则每次扩容只增加1M。需要注意的是,字符串的最大长度为512M。

Redis--String篇相关推荐

  1. Redis数据类型及编码格式——介绍及String篇

    Redis核心对象 reids中定义了一个数据结构用来统一表示各种数据类型,它叫做redisObject typedef struct redisObject {unsigned type:4; // ...

  2. 学Redis这篇就够了!

    作者:王爷科技 https://www.toutiao.com/i6713520017595433485 Redis 简介 & 优势 Redis 数据类型 发布订阅 订阅者的客户端显示如下 事 ...

  3. 内存淘汰算法_「承」Redis 原理篇——Redis 的内存回收机制

    前言 关于 Redis 的"起承转合",我前面已经用五个篇章的长度作了一个 Redis 基础篇--"起"篇的详细阐述,相信大家无论之前有没有接触过 Redis, ...

  4. Redis入门篇(安装与启动)

    Redis入门篇(安装与启动) 一.Redis介绍 Redis是NoSql的一种,在弄清楚Redis是个什么玩意之前,先了解下NoSql是什么. 1.什么是NoSql NoSql,全名:Not Onl ...

  5. 【Redis】Redis入门篇(1)

    Redis入门篇(1):涉及到Redis概念.Redis下载安装.命令行操作.Redis数据结构.持久化操作 Redis入门篇(2):了解使用Java客户端操作Redis.Redis连接池.实际应用案 ...

  6. Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

    码老湿,阅读了你的巧用数据类型实现亿级数据统计之后,我学会了如何游刃有余的使用不同的数据类型(String.Hash.List.Set.Sorted Set.HyperLogLog.Bitmap)去解 ...

  7. Redis 实战篇:GEO 助我邂逅附近女神

    码老湿,阅读了你的巧用数据类型实现亿级数据统计之后,我学会了如何游刃有余的使用不同的数据类型(String.Hash.List.Set.Sorted Set.HyperLogLog.Bitmap)去解 ...

  8. Redis高级篇-多级缓存

    Redis高级篇资料下载 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat ...

  9. 【承】Redis 原理篇——关于 Redis 中的事务

    前言 关于 Redis 的"起承转合",我前面已经用五个篇章的长度作了一个 Redis 基础篇--"起"篇的详细阐述,相信大家无论之前有没有接触过 Redis, ...

  10. Redis实战篇--优惠券秒杀

    文章目录 Redis实战篇--优惠券秒杀 全局唯一ID 实现优惠券秒杀下单 超卖问题 一人一单 分布式锁 基于redis的分布式锁 Redis实战篇–优惠券秒杀 全局唯一ID 为什么需要全局唯一id? ...

最新文章

  1. win10服务器权限修改时间,win10系统修改时间显示没权限的解决方案
  2. JS-获取class类名为某个的元素-【getClass】函数封装
  3. 建立数组并写入数据_Visual Studio 2010--C#跟西门子1200通讯(Sharp7)⑥--数据写入
  4. python zlib字符串压缩
  5. mysql的ps.setmaxrows_mysql自定义函数实现表的指定列进行数据脱敏(PS:来自mysql小白的提问)...
  6. oneproxy mysql_在OneProxy的基础上实行MySQL读写分离与负载均衡
  7. 容器技术Docker K8s 47 服务网格(ASM)-阿里云服务网络概述
  8. jersey 过滤_Jersey
  9. 360无线网卡驱动 linux驱动,小度Wifi、360Wifi Windows、linux驱动
  10. 做1.84亿用户的“知己”,网易云音乐携手飞桨让推荐系统更“贴心”
  11. Swagger API文档Responses中Object类型无法显示,求指引
  12. 【大学生辩论赛】如何练习自己的辩论口才
  13. SQL语句——处理函数
  14. uni-app图片上传(位置固定)
  15. 程序员口中的demo是什么意思_怎样让5分钟的曲子不重样播放450天?程序员:用马尔可夫链...
  16. AI识别PS篡改图像
  17. java宠物之王-龙灵传说,《宠物之王-龙灵传说》的流程攻略(上)
  18. 魔趣吧致力于为中文站长提供助力
  19. vim 显示和隐藏行号
  20. echarts实现多个y轴

热门文章

  1. 今晚开播|两把吃鸡的时间,撸一个自动驾驶系统
  2. android 真机dev tools,移动端手机调试的几种方法
  3. 苹果三星小心了!传微软正开发智能手表
  4. QQ截图的这些功能你知道吗?可以提高工作效率
  5. Springboot项目启动后自动弹出页面
  6. eclipse开发Android app的一些问题及解决方法
  7. ajax中解决乱码的问题,关于Ajax请求中传输中文乱码问题的解决方案
  8. android蓝牙传输文件时的文件格式限制及其解决方法
  9. Unity灯光、烘焙小结(一)Unity灯光烘焙教程
  10. 如何设置浏览QQ空间时的默认浏览器