一、概述

来自官网:

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster. Learn more →

二、Redis 安装

来自官网:installing
Download, extract and compile Redis with:

$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz
$ tar xzf redis-3.2.8.tar.gz
$ cd redis-3.2.8
$ make

The binaries that are now compiled are available in the src directory. Run Redis with:

$ src/redis-server
You can interact with Redis using the built-in client:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

Are you new to Redis? Try our online, interactive tutorial.

三、Redis 使用介绍

Redis 的使用方式大致分为两种:

  • 一是,命令行中使用 Redis
  • 二是,程序(脚本)中使用 Redis。

3.1 命令行使用

首先,开启 Redis server,开启 Redis client
执行如下命令:

  • redis-server,开启 Redis server
  • 在另一个终端上执行 redis-cli,开启 Redis client

其次,关闭 Redis client,关闭 Redis client
Redis client 终端下执行 SHUTDOWN [NOSAVE|SAVE] 则关闭 server,执行 exit,则关闭 client 终端。

{% image http://oltjxlyku.bkt.clouddn.com/redis_server_shutdown.JPG '' '' %}

常用的命令参见:
Redis.io/commands
Redis 键(key)相关的命令及其它命令的查看地址
Redis命令详解-List

3.2 程序(脚本)中使用

以 Lua 为例,大致步骤为:

  • 编写 Lua 脚本
  • 执行命令,命令格式为:
    1
    redis-cli --eval [scripts file name] key:ip , argv[...]

注意:

  • 在脚本中的 KEYS 对应上述命令中的 key,ARGV 对应命令中的 argv。
  • 引用下标从 1 开始,’,’前后均有空格,不可省略。
  • 诸多安全机制的限制。

由于此方式的执行机制为将 Lua 脚本上传至 Redis server 执行,因此 Redis 对脚本的执行进行了诸多限制。

  • 脚本中的变量均需为 local,不允许全局变量。由于安全机制,不然会报错 Script attempted to access unexisting global variable
  • 不提供访问系统状态状态的库。由于安全机制,屏蔽了许多命令。Script attempted to access unexisting global variable

实例


编写 Lua 脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-- insert.lua
local function insert_list(uuidlist)
if not uuidlist then
return
end
for k,v in ipairs(uuidlist) do
print(k,v)
if v ~= nil then
redis.call('LPUSH',KEYS[1],v)
end
end
print("FINISH INSERT")
end
local function generate_uuid()
local seed ={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}
local d = {}
for i=1,32 do
table.insert(d,seed[math.random(1,16)])
end
local sid = table.concat(d)
return string.format('%s-%s-%s-%s-%s',
string.sub(sid,1,8),
string.sub(sid,9,12),
string.sub(sid,13,16),
string.sub(sid,17,20),
string.sub(sid,21,32)
)
end
local uuidlist = {}
for i = 0,10
do
uuidlist[i]=generate_uuid()
end
insert_list(uuidlist)

在命令行中执行

$ redis-cli --eval insert.lua data_listl:127.0.0.1 , 10 3