redis基本操作

来源:互联网 发布:淘宝中文国际版app 编辑:程序博客网 时间:2024/06/11 19:54

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"








0 0