redis基本操作

2023-11-02

1、redis基本数据类型

    string

    list

    set

    sort set

    hash

2、数据类型的基本操作

    (1)string

  
  
  1. 127.0.0.1:6379> set name "lck"
  2. OK
  3. 127.0.0.1:6379> get name
  4. "lck"
  5. 127.0.0.1:6379> append name "jaca"
  6. (integer) 7
  7. 127.0.0.1:6379> get name
  8. "lckjaca"
   
   
  1. 127.0.0.1:6379> set counter 1000
  2. OK
  3. 127.0.0.1:6379> get counter
  4. "1000"
  5. 127.0.0.1:6379> incr counter
  6. (integer) 1001
  7. 127.0.0.1:6379> decr counter
  8. (integer) 1000

    (2)list

  
  
  1. 127.0.0.1:6379> lpush lists redis #左添加
  2. (integer) 1
  3. 127.0.0.1:6379> lpush lists mongo #左添加
  4. (integer) 2
  5. 127.0.0.1:6379> lrange lists 1:-1 #有错误
  6. (error) ERR wrong number of arguments for \'lrange\' command
  7. 127.0.0.1:6379> lrange lists 1 -1 #获取1到最后所有数据
  8. 1) "redis"
  9. 127.0.0.1:6379> lrange lists 0 -1 #获取所有数据
  10. 1) "mongo"
  11. 2) "redis"
  12. 127.0.0.1:6379> rpush lists python #右添加数据
  13. (integer) 3
  14. 127.0.0.1:6379> lrange lists 0 -1
  15. 1) "mongo"
  16. 2) "redis"
  17. 3) "python"
  18. 127.0.0.1:6379> lpop lists #左取数据,取出后数据就没有了
  19. "mongo"
  20. 127.0.0.1:6379> lrange lists 0 -1
  21. 1) "redis"
  22. 2) "python"
  23. 127.0.0.1:6379> rpop lists #右边取数据
  24. "python"
  25. 127.0.0.1:6379> lrange lists 0 -1
  26. 1) "redis"
  27. 127.0.0.1:6379> llen lists
  28. (integer) 1

    (3)set

  
  
  1. 127.0.0.1:6379> sadd sets a
  2. (integer) 1
  3. 127.0.0.1:6379> sadd sets bb
  4. (integer) 1
  5. 127.0.0.1:6379> sadd sets bb
  6. (integer) 0
  7. 127.0.0.1:6379> sadd sets ccc
  8. (integer) 1
  9. 127.0.0.1:6379> sadd sets ccc
  10. (integer) 0
  11. 127.0.0.1:6379> sadd sets a bb dddd
  12. (integer) 1
  13. 127.0.0.1:6379> scard sets
  14. (integer) 4
  15. 127.0.0.1:6379> scan sets
  16. (error) ERR invalid cursor
  17. 127.0.0.1:6379> smember sets
  18. (error) ERR unknown command \'smember\'
  19. 127.0.0.1:6379> smembers sets
  20. 1) "ccc"
  21. 2) "a"
  22. 3) "bb"
  23. 4) "dddd"
  24. 127.0.0.1:6379> scard set
  25. (integer) 0
  26. 127.0.0.1:6379> scard sets
  27. (integer) 4
  28. 127.0.0.1:6379> srem sets "dddd"
  29. (integer) 1
  30. 127.0.0.1:6379> smembers sets
  31. 1) "ccc"
  32. 2) "a"
  33. 3) "bb"
  34. 127.0.0.1:6379> sadd setA 1 2 3
  35. (integer) 3
  36. 127.0.0.1:6379> sadd setB 2 3 4
  37. (integer) 3
  38. 127.0.0.1:6379> sdiff setA setB
  39. 1) "1"

    (4)sort set

  
  
  1. 127.0.0.1:6379> zadd sortset 1 redis 3 mysql 2 python
  2. (integer) 3
  3. 127.0.0.1:6379> zmembers sortset
  4. (error) ERR unknown command \'zmembers\'
  5. 127.0.0.1:6379> smembers sortset
  6. (error) WRONGTYPE Operation against a key holding the wrong kind of value
  7. 127.0.0.1:6379> zrange sortset 0 -1
  8. 1) "redis"
  9. 2) "python"
  10. 3) "mysql"
  11. 127.0.0.1:6379> zadd sortset 2 mongo
  12. (integer) 1
  13. 127.0.0.1:6379> zrange sortset 0 -1
  14. 1) "redis"
  15. 2) "mongo"
  16. 3) "python"
  17. 4) "mysql"
  18. 127.0.0.1:6379> zrank sortset 2
  19. (nil)
  20. 127.0.0.1:6379> zrank sortset mongo
  21. (integer) 1
  22. 127.0.0.1:6379> zrank sortset python
  23. (integer) 2
  24. 127.0.0.1:6379> zrevrank sortset mongo
  25. (integer) 2
  26. 127.0.0.1:6379> zrangebysocre sortset 2 3 withscores
  27. (error) ERR unknown command \'zrangebysocre\'
  28. 127.0.0.1:6379> zrangebyscore sortset 2 3 withscores
  29. 1) "mongo"
  30. 2) "2"
  31. 3) "python"
  32. 4) "2"
  33. 5) "mysql"
  34. 6) "3"
  35. 127.0.0.1:6379> zcount sortset 2 3
  36. (integer) 3
  37. 127.0.0.1:6379> zcard sortset
  38. (integer) 4

    (5)hash

  
  
  1. 127.0.0.1:6379> hset hashset field1 hello
  2. (integer) 1
  3. 127.0.0.1:6379> hsetnx hashset field "hello"
  4. (integer) 1
  5. 127.0.0.1:6379> hsetnx hashset field "hello"
  6. (integer) 0
  7. 127.0.0.1:6379> hsetnx hashset field1 "hello"
  8. (integer) 0
  9. 127.0.0.1:6379> hmset hash set field1 "hello1" field2 "hello2"
  10. (error) ERR wrong number of arguments for HMSET
  11. 127.0.0.1:6379> hmset hashset field1 "hello1" field2 "hello2"
  12. OK
  13. 127.0.0.1:6379> hget hashset field1
  14. "hello1"
  15. 127.0.0.1:6379> hget hashset field2
  16. "hello2"
  17. 127.0.0.1:6379> hget hashset field
  18. "hello"
  19. 127.0.0.1:6379> hget hashset field3
  20. (nil)
  21. 127.0.0.1:6379> hmget hashset field field1
  22. 1) "hello"
  23. 2) "hello1"
  24. 127.0.0.1:6379> hexist hashset field
  25. (error) ERR unknown command \'hexist\'
  26. 127.0.0.1:6379> hexists hashset field
  27. (integer) 1
  28. 127.0.0.1:6379> hexists hashset field4
  29. (integer) 0
  30. 127.0.0.1:6379> hlen hashset
  31. (integer) 3
  32. 127.0.0.1:6379> hdel hashset field2
  33. (integer) 1
  34. 127.0.0.1:6379> hkeys hashset
  35. 1) "field1"
  36. 2) "field"
  37. 127.0.0.1:6379> hvals hashset
  38. 1) "hello1"
  39. 2) "hello"
  40. 127.0.0.1:6379> hgetall hashset
  41. 1) "field1"
  42. 2) "hello1"
  43. 3) "field"
  44. 4) "hello"
3、常用命令
    (1)键值相关命令
   
   
  1. 127.0.0.1:6379> keys *
  2. 1) "counter"
  3. 2) "setB"
  4. 3) "setA"
  5. 4) "name"
  6. 5) "lists"
  7. 6) "sets"
  8. 7) "hashset"
  9. 8) "sortset"
  10. 127.0.0.1:6379> keys list*
  11. 1) "lists"
    (2)exists
    
    
  1. 127.0.0.1:6379> exists list*
  2. (integer) 0
  3. 127.0.0.1:6379> exists lists
  4. (integer) 1
    (3)del
     
     
  1. 127.0.0.1:6379> del setA
  2. (integer) 1
  3. 127.0.0.1:6379> keys set*
  4. 1) "setB"
  5. 2) "sets"

    (4)expires
     
     
  1. 127.0.0.1:6379> expire setB 10
  2. (integer) 1
  3. 127.0.0.1:6379> keys set*
  4. 1) "setB"
  5. 2) "sets"
  6. 127.0.0.1:6379> keys set*
  7. 1) "sets"
    (5)select、move
     
     
  1. 127.0.0.1:6379> select 0
  2. OK
  3. 127.0.0.1:6379> set age 27
  4. OK
  5. 127.0.0.1:6379> move age 1
  6. (integer) 1
  7. 127.0.0.1:6379> get age
  8. (nil)
  9. 127.0.0.1:6379> select 1
  10. OK
  11. 127.0.0.1:6379[1]> get age
  12. "27"
    (6)rename
     
     
  1. 127.0.0.1:6379> rename lists list_new
  2. OK
  3. 127.0.0.1:6379> keys *
  4. 1) "counter"
  5. 2) "name"
  6. 3) "sets"
  7. 4) "list_new"
  8. 5) "hashset"
  9. 6) "sortset"
    (7)type
     
     
  1. 127.0.0.1:6379> type name
  2. string
  3. 127.0.0.1:6379> type sets
  4. set
  5. 127.0.0.1:6379> type hashset
  6. hash
    (8)dbsize
     
     
  1. 127.0.0.1:6379> dbsize
  2. (integer) 6
    (9)info
     
     
  1. 127.0.0.1:6379> info
  2. # Server
  3. redis_version:2.8.19
  4. redis_git_sha1:00000000
  5. redis_git_dirty:0
  6. redis_build_id:d7de94bf5eadec7a
  7. redis_mode:standalone
  8. os:Darwin 15.2.0 x86_64
  9. arch_bits:64
  10. multiplexing_api:kqueue
  11. gcc_version:4.2.1
  12. process_id:2649
  13. run_id:2435ddcac767793374bb57a965b468e5a9a36d9b
  14. tcp_port:6379
  15. uptime_in_seconds:8221
  16. uptime_in_days:0
  17. hz:10
  18. lru_clock:14648576
  19. config_file:/usr/local/etc/redis.conf
  20. # Clients
  21. connected_clients:1
  22. client_longest_output_list:0
  23. client_biggest_input_buf:0
  24. blocked_clients:0
  25. # Memory
  26. used_memory:1004400
  27. used_memory_human:980.86K
  28. used_memory_rss:1040384
  29. used_memory_peak:1004512
  30. used_memory_peak_human:980.97K
  31. used_memory_lua:35840
  32. mem_fragmentation_ratio:1.04
  33. mem_allocator:libc
  34. # Persistence
  35. loading:0
  36. rdb_changes_since_last_save:8
  37. rdb_bgsave_in_progress:0
  38. rdb_last_save_time:1474265548
  39. rdb_last_bgsave_status:ok
  40. rdb_last_bgsave_time_sec:0
  41. rdb_current_bgsave_time_sec:-1
  42. aof_enabled:0
  43. aof_rewrite_in_progress:0
  44. aof_rewrite_scheduled:0
  45. aof_last_rewrite_time_sec:-1
  46. aof_current_rewrite_time_sec:-1
  47. aof_last_bgrewrite_status:ok
  48. aof_last_write_status:ok
  49. # Stats
  50. total_connections_received:1
  51. total_commands_processed:89
  52. instantaneous_ops_per_sec:0
  53. total_net_input_bytes:3308
  54. total_net_output_bytes:1469
  55. instantaneous_input_kbps:0.00
  56. instantaneous_output_kbps:0.00
  57. rejected_connections:0
  58. sync_full:0
  59. sync_partial_ok:0
  60. sync_partial_err:0
  61. expired_keys:1
  62. evicted_keys:0
  63. keyspace_hits:41
  64. keyspace_misses:2
  65. pubsub_channels:0
  66. pubsub_patterns:0
  67. latest_fork_usec:285
  68. # Replication
  69. role:master
  70. connected_slaves:0
  71. master_repl_offset:0
  72. repl_backlog_active:0
  73. repl_backlog_size:1048576
  74. repl_backlog_first_byte_offset:0
  75. repl_backlog_histlen:0
  76. # CPU
  77. used_cpu_sys:3.19
  78. used_cpu_user:1.64
  79. used_cpu_sys_children:0.01
  80. used_cpu_user_children:0.00
  81. # Keyspace
  82. db0:keys=6,expires=0,avg_ttl=0
  83. db1:keys=1,expires=0,avg_ttl=0
    (10)
    
    
  1. 127.0.0.1:6379> config get dir
  2. 1) "dir"
  3. 2) "/usr/local/var/db/redis"
4、事务控制
redis对事务的支持还是比较简单,redis只能保证一个client发起事务的命令可以连续的执行,而中间不会插入其他的client命令,由于redis是单线程来处理所有client的请求容易做到。一般情况下redis在接受到一个client发来的命令后会立即处理并返回处理结果,但是当一个client在一个连接中发出multi命令,这个连接会进入一个事务上下文,连接后续命令不是立即执行,而是先放到一个队列中。当从此连接收到exec后,redis会顺序执行队列中所有命令,并将所有命令结果打包到一起返回给client,然后连接就结束事务上下文。
(1)一个简单事务过程
     
     
  1. 127.0.0.1:6379> select 0
  2. OK
  3. 127.0.0.1:6379> set age 27
  4. OK
  5. 127.0.0.1:6379> get age
  6. "27"
  7. 127.0.0.1:6379> multi
  8. OK
  9. 127.0.0.1:6379> set age 28
  10. QUEUED
  11. 127.0.0.1:6379> get age
  12. QUEUED
  13. 127.0.0.1:6379> exec
  14. 1) OK
  15. 2) "28"
  16. 127.0.0.1:6379> get age
  17. "28"
(2)取消一个事务(discard)
      
      
  1. 127.0.0.1:6379> get age
  2. "28"
  3. 127.0.0.1:6379> multi
  4. OK
  5. 127.0.0.1:6379> set age 29
  6. QUEUED
  7. 127.0.0.1:6379> set age 50
  8. QUEUED
  9. 127.0.0.1:6379> discard
  10. OK
  11. 127.0.0.1:6379> get age
  12. "28"
(3)乐观锁复杂事务控制
   大多数是基于数据版本(version)的记录机制实现的。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个 “version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1。 此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据
(1)第一步,session 1 还没来得及对age进行修改
(2)第二步    session 2 已经将age设置为30
(3)第三步    session 1希望将age设置为20,但是执行返回结果是nil,说明执行失败,之后再取age值是30,这是由于Session 1 对age加了乐观锁导致的。
      
      
  1. 127.0.0.1:6379> get age
  2. "20"
  3. 127.0.0.1:6379> watch age
  4. OK
  5. 127.0.0.1:6379> multi
  6. OK
       
       
  1. 127.0.0.1:6379> get age
  2. "20"
  3. 127.0.0.1:6379> set age 30
  4. OK
  5. 127.0.0.1:6379> get age
  6. "30"
        
        
  1. 127.0.0.1:6379> set age 20
  2. QUEUED
  3. 127.0.0.1:6379> exec
  4. (nil)
  5. 127.0.0.1:6379> get age
  6. "30"






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis基本操作 的相关文章

随机推荐

  • C51单片机学习笔记(二)——花样流水灯的实现

    C51单片机学习笔记 二 花样流水灯的实现 文章目录 C51单片机学习笔记 二 花样流水灯的实现 1 单片机引脚 晶振 复位的作用 2 流水灯原理图 3 单片机的周期 4 延时函数的编写 5 使用 位操作 控制流水灯 6 使用字节控制 并行
  • lenovo联想笔记本ThinkBook 14 Gen5+ IRH(21HW)原装Win11系统镜像原厂OEM恢复出厂状态

    LENOVO联想笔记本电脑 ThinkBook 14 Gen5 IRH 21HW 原厂Windows11原装OEM系统 恢复出厂时状态系统 系统自带所有驱动 出厂主题壁纸LOGO Office办公软件 联想电脑管家等预装程序 所需要工具 1
  • java客户端作为kafka消费者测试

    README 本文主要对 java客户端作为kafka 消费者进行测试 生产者由 kafka客户端扮演 1 普通消费者 设置消费者组 重置消费者的offset 即每次都从最头开始消费 默认仅保持7天内数据 类似于 命令行 from begi
  • 【node.js】Node.js下载安装(在vscode中使用)01

    博 主 初映CY的前说 个人信条 想要变成得到 中间还有做到 本文核心 Node js的下载安装操作 目录 一 node介绍 二 node js下载安装 一 node介绍 Node js是一个Javascript运行环境 runtime 实
  • Java句柄与指针

    java中的句柄分为两种 对象句柄 jvm中对象访问句柄 一 对象句柄 句柄 一个唯一的整数 作为对象的身份id 区分不同的对象 和同类中的不同实例 程序可以通过句柄访问对象的部分信息 句柄不代表对象的内存地址 在Java中的任何东西都可以
  • mysql 用户量,MySQL ── 用户数全球排名第一的免费开源关系型数据库

    MySQL 是一种关联数据库 关联数据库会将数据保存在不同表中 而不是将所有数据放在一个大仓库内 这样就增加了速度并提高了灵活性 MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言 MySQL 软件采用了双 授权政策 社区
  • 打开qt文件报“could not decode ... with “UTF-8“ -encoding” Editting not possible

    从别人那拷来的qt程序 报错如下 深入解决不能在文件编辑中切换中文输入的问题 仔细按照以下三步操作 可以解决 1 点击 Select Encoding 按编码重新载入GB2312格式或者GBK 虽然能编辑代码但仍不能切换中英文输入 此时 应
  • 使用ftp实现windows和ios的公网文件夹共享

    请注意 本文主要研究的是如何实现在公网环境下 即电脑和ipad或iPhone设备不在同一网络下 实现文件夹共享 如果你想实现的仅仅是局域网间的文件夹共享 可以参考博客使用SMB和ipad自带的文件app实现 操作简单实现快ipad和wind
  • 设计模式:解释器模式

    定义 给定一种语言 定义他的文法的一种表示 并定义一个解释器 该解释器使用该表示来解释语言中句子 类型 行为类模式 类图 解释器模式是一个比较少用的模式 本人之前也没有用过这个模式 下面我们就来一起看一下解释器模式 解释器模式的结构 抽象解
  • reduce端join算法实现

    数据 订单数据表order date pid amount 20150710 P0001 2 20150710 P0002 3 商品信息表product pid pname category id price P0001 小米5 1000
  • linux系统下的动态壁纸,Ubuntu 10.04下实现动态桌面壁纸

    不知大家在使用Ubuntu时有没有注意到 Ubuntu下是可以实现多张壁纸动态切换的 好像Win7下也有类似的功能 曾经使用 win7一段时间 我也是最近才注意到这点 下面是在Ubuntu 10 04下实验的 之前版本的应该也可以 实现原理
  • typescript第五天—联合类型和类型保护、Enum枚举类型

    联合类型和类型保护 联合类型展示 所谓联合类型 可以认为一个变量可能有两种或两种以上的类型 用代码举个例子 声明两个接口Waiter 服务员 接口和Teacher 技师 接口 然后在写一个judgeWho 判断是谁 的方法 里边传入一个an
  • 每天一个小题目——公交车乘客

    题目描述 一个公交车经过n个站点 乘客从前门上车 从后门下车 现在统计了在第i个站 下车人数a i 以及上车人数b i 问公交车运行时候车上最多有多少乘客 输入 第一行读入一个整数n 1 lt n lt 100 表示有n个站点 接下来n行
  • 宝塔面板网站解决跨域问题

    宝塔面板网站解决跨域问题解决方案如下 1 如果使用的nginx 打开网站的设置 找到配置文件 添加如下代码 代码如下 add header Access Control Allow Origin add header Access Cont
  • 软件测试CPU基础知识

    1 cpu和程序的执行 PC 程序计数器 堆栈指针 每个程序都有一个栈 PSW 程序的状态 2 CPU两种运行状态 用户态 内核态 Linux内部结构 top命令查看 CPU sy 内核消耗的指标 us 用户消耗的指标 一般us ys 4
  • 对于LSTM输入层、隐含层及输出层参数的个人理解

    原文地址 LSTM输入层要求的维度是三维的 其中包含三个参数 batch size input dim和time step 隐含层有一个参数 n hidden 输出层有两个参数 n hidden和output dim 下面举两个例子 利用L
  • redis 管道(pipeline),深入解读

    文章目录 前言 一 动手试试 1 对比 2 请求 二 原理 1 模式 2 服务端 3 客户端 3 1 redisson 3 2 jedis 3 3 lettuce 总结 前言 本文源码参考版本 redis 6 2 redisson 3 17
  • 深度deepin-IDE正式亮相,号称 “真正自主研发”

    出品 OSC开源社区 ID oschina2013 deepin 社区正式官宣 deepin IDE 深度集成开发环境 由深度公司自主研发 具有多语言 跨平台兼容特性的轻量级集成开发环境 功能介绍 deepin IDE 除了包含 IDE 常
  • java: 找不到符号 符号: 变量 log

    安装lombok插件就不说了 下面连接是否可以解决 我是在Compiler中增加参数配置 Djps track ap dependencies false 下图有 升级IDEA后Lombok不能用了 如何解决 知乎今天到工作室比较晚 在电脑
  • redis基本操作

    1 redis基本数据类型 string list set sort set hash 2 数据类型的基本操作 1 string 127 0 0 1 6379 gt set name lck OK 127 0 0 1 6379 gt get