Redis Lset 通过索引来设置元素的值。
当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。
关于列表下标的更多信息,请参考 LINDEX 命令。
redis Lset 命令基本语法如下:
redis 127.0.0.1:6379> LSET KEY_NAME INDEX VALUE
>= 1.0.0
操作成功返回 ok ,否则返回错误信息。
redis 127.0.0.1:6379> RPUSH mylist "hello" (integer) 1 redis 127.0.0.1:6379> RPUSH mylist "hello" (integer) 2 redis 127.0.0.1:6379> RPUSH mylist "foo" (integer) 3 redis 127.0.0.1:6379> RPUSH mylist "hello" (integer) 4 redis 127.0.0.1:6379> LSET mylist 0 "bar" OK redis 127.0.0.1:6379> LRANGE mylist 0 -1 1: "bar" 2) "hello" 3) "foo" 4) "hello"
Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
COUNT 的值可以是以下几种:
redis Lrem 命令基本语法如下:
redis 127.0.0.1:6379> LREM KEY_NAME COUNT VALUE
>= 1.0.0
被移除元素的数量。 列表不存在时返回 0 。
redis> RPUSH mylist "hello" (integer) 1 redis> RPUSH mylist "hello" (integer) 2 redis> RPUSH mylist "foo" (integer) 3 redis> RPUSH mylist "hello" (integer) 4 redis> LREM mylist -2 "hello" (integer) 2 redis> LRANGE mylist 0 -1 1) "hello" 2) "foo" redis>
Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
redis Lrange 命令基本语法如下:
redis 127.0.0.1:6379> LRANGE KEY_NAME START END
>= 1.0.0
一个列表,包含指定区间内的元素。
redis> RPUSH mylist "one" (integer) 1 redis> RPUSH mylist "two" (integer) 2 redis> RPUSH mylist "three" (integer) 3 redis> LRANGE mylist 0 0 1) "one" redis> LRANGE mylist -3 2 1) "one" 2) "two" 3) "three" redis> LRANGE mylist -100 100 1) "one" 2) "two" 3) "three" redis> LRANGE mylist 5 10 (empty list or set) redis>
Redis Lpushx 将一个值插入到已存在的列表头部,列表不存在时操作无效。
redis Lpushx 命令基本语法如下:
redis 127.0.0.1:6379> LPUSHX KEY_NAME VALUE1.. VALUEN
>= 2.2.0
LPUSHX 命令执行之后,列表的长度。
127.0.0.1:6379> LPUSH list1 "foo" (integer) 1 127.0.0.1:6379> LPUSHX list1 "bar" (integer) 2 127.0.0.1:6379> LPUSHX list2 "bar" (integer) 0 127.0.0.1:6379> LRANGE list1 0 -1 1) "bar" 2) "foo"
Redis Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。
注意:在Redis 2.4版本以前的 LPUSH 命令,都只接受单个 value 值。
redis Lpush 命令基本语法如下:
redis 127.0.0.1:6379> LPUSH KEY_NAME VALUE1.. VALUEN
>= 1.0.0
执行 LPUSH 命令后,列表的长度。
127.0.0.1:6379> LPUSH list1 "foo" (integer) 1 127.0.0.1:6379> LPUSH list1 "bar" (integer) 2 127.0.0.1:6379> LRANGE list1 0 -1 1) "bar" 2) "foo"
Redis Lpop 命令用于移除并返回列表的第一个元素。
redis Lpop 命令基本语法如下:
redis 127.0.0.1:6379> Lpop KEY_NAME
>= 1.0.0
列表的第一个元素。 当列表 key 不存在时,返回 nil 。
redis 127.0.0.1:6379> RPUSH list1 "foo" (integer) 1 redis 127.0.0.1:6379> RPUSH list1 "bar" (integer) 2 redis 127.0.0.1:6379> LPOP list1 "foo"
Redis 服务器命令主要是用于管理 redis 服务。
以下实例演示了如何获取 redis 服务器的统计信息:
redis 127.0.0.1:6379> INFO # Server redis_version:2.8.13 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:c2238b38b1edb0e2 redis_mode:standalone os:Linux 3.5.0-48-generic x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.7.2 process_id:3856 run_id:0e61abd297771de3fe812a3c21027732ac9f41fe tcp_port:6379 uptime_in_seconds:11554 uptime_in_days:0 hz:10 lru_clock:16651447 config_file: # Clients connected_clients:1 client-longest_output_list:0 client-biggest_input_buf:0 blocked_clients:0 # Memory used_memory:589016 used_memory_human:575.21K used_memory_rss:2461696 used_memory_peak:667312 used_memory_peak_human:651.67K used_memory_lua:33792 mem_fragmentation_ratio:4.18 mem_allocator:jemalloc-3.6.0 # Persistence loading:0 rdb_changes_since_last_save:3 rdb_bgsave_in_progress:0 rdb_last_save_time:1409158561 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 aof_enabled:0 aof_rewri
Redis 连接命令主要是用于连接 redis 服务。
以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行:
redis 127.0.0.1:6379> AUTH "password" OK redis 127.0.0.1:6379> PING PONG
下表列出了 redis 连接的基本命令:
序号 | 命令及描述 |
---|---|
1 | AUTH password 验证密码是否正确 |
2 | ECHO message 打印字符串 |
3 | PING 查看服务是否运行 |
4 | QUIT 关闭当前连接 |
5 | SELECT index 切换到指定的数据库 |
Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。
Eval 命令的基本语法如下:
redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]
以下实例演示了 redis 脚本工作过程:
redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second 1) "key1" 2) "key2" 3) "first" 4) "second"
下表列出了 redis 脚本常用命令:
序号 | 命令及描述 |
---|---|
1 | EVAL script numkeys key [key ...] arg [arg ...] 执行 Lua 脚本。 |
2 | EVALSHA sha1 numkeys key [key ...] arg [arg ...] 执行 Lua 脚本。 |
3 | SCRIPT EXISTS script [script ...] 查看指定的脚本是否已经被保存在缓存当中。 |
4 | SCRIPT FLUSH 从脚本缓存中移除所有脚本。 |
5 | SCRIPT KILL 杀死当前正在运行的 Lua 脚本。 |
6 | SCRIPT LOAD script 将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。 |
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
一个事务从开始到执行会经历以下三个阶段:
以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:
redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days" QUEUED redis 127.0.0.1:6379> GET book-name QUEUED redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series" QUEUED redis 127.0.0.1:6379> SMEMBERS tag QUEUED redis 127.0.0.1:6379> EXEC 1) OK 2) "Mastering C++ in 21 days" 3) (integer) 3 4) 1) "Mastering Series" 2) "C++" 3) "Programming"
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
这是官网上的说明 From redis docs on transactions:
It's important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.
比如:
redis 12