Redis(1)- Redis概述和安装

Redis(Remote Dictionary Server)是目前电商行业比较通用的主要数据缓存手段。各家基本上是在其基础上做了优化和扩展,增加了一些新的特性,生成满足自身业务需求数据缓存组件。追根溯源,Redis自身有哪些特性呢?基本操作和高级特性又有哪些?在什么场景下我们该考虑使用Redis呢?带着这些问题,今天笔者认真学习了一遍Redis组件,并梳理成Redis学习笔记系列。

本章主要做Redis的概述、环境安装介绍、基本操作的介绍。



1. Redis概述

Redis是什么

Redis is an open source (BSD licensed), in-memory data structure store, used as 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.

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件. 它支持多种类型的数据结构,包括:字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)。Redis 内置了复制(replication), LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence),并通过Sentinel自动分区(Cluster)提供高可用性(high availability).

简单来说,Redis是一种开源的(C语言实现)基于键值对(数据结构)的内存数据库。

Redis的特性

  1. 速度快:C语言实现,所有数据都加载在内存中,数据读速度11万/秒,写数据81000/s。

  2. 丰富的数据结构:Redis支持多种数据结构:列表,集合,有序集合,散列数据类型。是一种典型的数据结构服务器。

  3. 操作原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

  4. 主从复制(master-slaver):通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。master server专用于写数据,slave server用于读数据,一写多度。

  5. 分片(sharding):通过分片实现了Redis集群。

  6. 持久化:Redis提供了一些策略可以实现数据的落盘存储。

  7. 支持多开发语言:Redis支持多种语言,诸如Ruby,Python, Twisted Python, PHP, Erlang, Tcl, Perl, Lua, Java, Scala, Clojure等

2. 安装Redis

我是在Linux系统下安装Redis的,版本是3.0.5,由于是公司内网,没办法直接使用# wget命令。我将Redis部署在IP为10.27.180.75的服务器上。

第一步,下载Reids最新版本,地址如下http://redis.io/download

第二步,登录10.27.180.75,解压并编译安装Redis

[root@fcpreapp05 ~]# tar -xzvf redis-3.0.5.tar.gz  [root@fcpreapp05 ~]# cd redis-3.0.5 [root@fcpreapp05 redis-3.0.5]# ls 00-RELEASENOTES COPYING Makefile redis.conf       runtest-sentinel  tests BUGS INSTALL README runtest          sentinel.conf     utils CONTRIBUTING MANIFESTO deps      runtest-cluster  src
[root@fcpreapp05 redis-3.0.5]# make 
		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

第三步,启动redis服务端

[root@fcpreapp05 redis-3.0.5]# cd src/ [root@fcpreapp05 src]# redis-server  
		
  • 1
  • 2
  • 3

Redis服务器

第四步,另一台机器作为客户端连接服务器,通过ping PONG命令确定连接成功

[root@fcpreapp05 ~]# redis-cli -h 10.27.180.75 -p 6379 10.27.180.75:6379> ping PONG "PONG"
		
  • 1
  • 2
  • 3

另外,我们还可以下载RedisClient,RedisClient是 Redis客户端GUI工具,使用Java swt和jedis编写。它将redis数据以windows资源管理器的界面风格呈现给用户。

RedisClient

提问:我们可以通过哪些方式来访问Redis服务器呢? 
1. Telnet:telnet 10.27.180.75:6379 
2. redis-cli:redis-cli -h 10.27.180.75 -p 6379 
3. RedisClient

到这里,Redis的环境已经部署到服务器上来。本篇的余下内容补充一些额外的内容,包括redis-server和redis-cli的参数说明,Redis的基本操作等。

3. redis-server和redis-cli的参数说明

redis-server

redis-server命令用于启动Redis服务器,其参数说明如下:

Usage: ./redis-server [/path/to/redis.conf] [options]  //启动并加装指定配置文件(可选) ./redis-server - (read config from stdin)  //使用标准输入读取配置为启动参数 ./redis-server -v or --version  //查看版本号 ./redis-server -h or --help  ./redis-server --test-memory    //测试指定内存大小下redis是否能正常运行 Examples:
       ./redis-server (run the server with default conf)
       ./redis-server /etc/redis/6379.conf
       ./redis-server --port 7777 ./redis-server --port 7777 --slaveof 127.0.0.1 8888 ./redis-server /etc/myredis.conf --loglevel verbose 
		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

redis-cli

redis-server命令用于启动Redis客户端连接服务器,其参数说明如下:

Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
  -h  // 主机名 (默认本地: 127.0.0.1). -p  // 端口号 (默认: 6379). -s  // Server socket (overrides hostname and port). -a  // Password to use when connecting to the server. -r  // 重复执行 -i  // 如果重复执行-r,则每次执行的时间间隔 -n  // 数据库号码. -x // 从标准输入中读取最后一个参数. -d      
  -c // 开启reidis cluster模式 --raw // 中文输出设置 --no-raw           
  --csv // Output in CSV format. --stat             
  --latency          
  --latency-history 

  --latency-dist     

  --lru-test   
  --slave // 模拟slave从master上接收到的commands --rdb  // 获取指定redis实例的rdb文件,保存到本地 --pipe // 这个一个非常有用的参数。发送原始的redis protocl格式数据到服务器端执行 --pipe-timeout  

  --bigkeys // 对redis中的key进行采样,寻找较大的keys  --scan             
  --pattern     
  --intrinsic-latency  

  --eval  // 执行指定lua脚本的 --help             
  --version 
		
  • 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

redis-cli中参数较多,这里我就常用的操作举一些例子:

(1)-h -p 在一起使用,连接远端服务器

[root@fcpreapp05 ~]# redis-cli -h 10.27.180.75 -p 6379 10.27.180.75:6379>
		
  • 1
  • 2

(2)-r -i 经常在一起使用,比如查看Redis的QPS(每秒执行次数)

[root@fcpreapp05 ~]# redis-cli -r 100 -i 1 info stats | grep 
		
  • 1

(3)–eval 执行指定lua脚本的

[root@fcpreapp05 ~]# redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3 
		
  • 1
  • 2

(4)关闭Redis

[root@fcpreapp05 ~]# redis-cli shutdown 
		
  • 1
  • 2

4. Redis基本操作

下面给出Redis的一些基本操作。

操作 说明
ping 测试连接是否存在
quit 退出连接
info 服务器基本信息
monitor 实时转储收到的请求
config get 获取服务器的参数配置
dbsize 当前数据库中key的数量
flushdb 清空当前数据库
expire 设置key的过期时间
persist lv 移除当前key的过期时间
set 设置key-value,SET key value
get 返回 key 所关联的字符串值,GET key
del 删除多个key,DEL key [key …]
exist 检查给定 key 是否存在,EXISTS key
echo 打印key值
127.0.0.1:6379> set name "redis" OK 127.0.0.1:6379> set type "key-value" OK 127.0.0.1:6379> exists type (integer) 1 127.0.0.1:6379> get type "key-value" 127.0.0.1:6379> del name type (integer) 2 
		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

举个例子如上所示,有关Redis更多的数据结构操作我们将在下一篇中给出,尽情期待!

请使用浏览器的分享功能分享到微信等