Redis 是一个key-value存储系统,本文主要记录Redis的安装、配置、数据类型、基本操作以及相关概念。
Redis(Remote Dictionary Server)是一个开源的高性能key-value数据库,它以字典结构存储数据,并允许其他应用通过TCP协议进行读取。Redis的数据都存储在内存中,因此在性能上相比较于硬盘存储的数据库有非常明显的优势。
1. Redis的安装 1.1 Windows平台 官网的Redis只有Linux版本的,但是Github上有Windows版的Redis【下载地址】 。Windows的Redis有msi安装版,压缩包版和源码编译三种使用方式。
Redis的目录下主要有两类文件:应用文件和配置文件。
文件名
文件功能
redis-server
服务端应用,提供Redis服务
redis-cli
客户端程序,通过连接Redis服务并进行操作
redis-benchmark
性能测试,用来模拟同时由N个客户端发送M个SETs/GETs操作
redis-check-aof
更新日志检查
redis-check-dump
本地数据库检查
redis.windows.conf
配置文件,将Redis作为普通软件使用,命令行关闭则Redis关闭
redis.windows-service.conf
配置文件,将Redis作为系统服务进行配置
2. 配置和使用 2.1 服务端命令 Redis安装完成后需要进行启动才能使用,打开命令行,输入redis-server redis.windows.conf
命令,即可启动Redis服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 C:\Redis>redis-server redis.windows.conf _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.100 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 6660 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' [6660] 12 Oct 11:17:05.019 # Server started, Redis version 3.2.100 [6660] 12 Oct 11:17:05.028 * DB loaded from disk: 0.007 seconds [6660] 12 Oct 11:17:05.029 * The server is now ready to accept connections on port 6379
可以看到Redis已经打开了,使用这种方式的缺点是不能关闭命令行,否则Redis服务就会关闭。如果要开机启动Redis服务,需要将Redis安装成Windows服务。
1 2 3 4 5 6 7 8 # 安装服务 redis-server --service-install redis.windows.conf # 启动服务 redis-server --service-start # 停止服务 redis-server --service-stop # 卸载服务 redis-server --service-uninstall
两种启动服务的方式根据个人喜好,或者基于开发环境或生产环境进行选择。
2.2 客户端命令 另外打开一个命令行窗口,输入客户端使用命令redis-cli -h host -p port -a password
就可以连接到Redis服务,host
默认为127.0.0.1
,port
默认为6379
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 连接数据库服务 C:\Redis>redis-cli -h 127.0.0.1 -p 6379 #命令行输入 127.0.0.1:6379> # 写入数据 127.0.0.1:6379> set key value # 查询数据 127.0.0.1:6379> get key # 判断是否存在 127.0.0.1:6379> exists key # 删除 127.0.0.1:6379> del key # 查询数据类型 127.0.0.1:6379> type key # 关闭Redis服务 127.0.0.1:6379> shutdown # 数据库选择 127.0.0.1:6379> select db_num
2.3 Redis配置文件属性 Redis配置文件中可以对数据库的属性进行配置,常用的配置参数如下:
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 38 39 40 41 42 43 44 45 ################################## NETWORK ##################################### #默认ip地址 bind 127.0.0.1 #Redis默认监听端口 port 6379 #客户端闲置多少秒后断开连接 timeout 0 ################################# GENERAL ##################################### #是否作为守护进程运行,windows下不支持该属性 daemonize no #日志显示级别 loglevel notice #指定日志输出的文件名,默认输出到标准输出端口 logfile "" #默认支持的数据库的数量 databases 16 ################################ SNAPSHOTTING ################################ #持久化策略save <seconds> <changes> save 100 1 #当有一条数据被改变时,900s刷新到disk一次 save 300 10 #当有10条数据被改变时,300s刷新到disk一次 save 60 10000 #当有10000条数据被改变,60s刷新到disk一次 #持久化数据保存的文件名 dbfilename dump.db #持久化数据保存的路径 dir ./ ################################# REPLICATION ################################# #主从配置,设置该数据库为其他的从数据库 slaveof <masterip> <masterport> #主服务器连接时需要的密码 masterauth <master-password> ################################## SECURITY ################################### #设置连接密码 requirepass <password> ################################### LIMITS #################################### #最大客户连接数 maxclients 10000 # persistence-available [(yes)|no] #可使用的最大最大内存 maxmemory <bytes> ############################## APPEND ONLY MODE ############################### #是否开启日志功能 appendonly no #AOF持久化策略 appendfsync [always|everysec|no]
3. Redis数据浏览器 RedisClient这个工具是Redis的客户端,专门用来浏览当前Redis中的所有数据。省去了查询Redis里面有哪些数据还需要输入命令行的繁琐和不便利。 RedisClient可以直接在Github上进行下载 ,支持Windows、Linux和MacOS。操作简单,功能也很全,Github仓库里有详细的使用说明,非安装版使用命令java -jar redisclient-win32.x86_64.2.0.jar
。
4. Redis编程 4.1 Python Python使用Redis非常简单,可以通过pip install redis
在环境中安装编程需要的API。下面是一个简单的实例,利用Redis存储数值、字符串和图像。
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 import cv2import redisimport structimport numpy as npdef toRedis (array) : ''' Encode ndarry 'array' to bytes ''' h,w = array.shape shape = struct.pack('>II' ,h,w) encode = shape+array.tobytes() return encode def fromRedis (encode) : h,w = struct.unpack('>II' ,encode[:8 ]) array = np.frombuffer(encode,dtype=np.uint8,offset=8 ).reshape(h,w) return array if __name__=='__main__' : r = redis.Redis(host='127.0.0.1' ,port=6379 ) img = cv2.imread('./oil11_2.bmp' ,cv2.IMREAD_GRAYSCALE) r.set('name' ,'tangming' ) r.set('age' ,5 ) r.set('image' ,toRedis(img)) print(r.get('name' )) print(r.get('age' )) array = fromRedis(r.get('image' )) cv2.imshow('image' ,array)
4.2 C++ 用C++来操作Redis数据库,需要另外的Redis客户端库,常用的有hiredis 、xredis 和cpp_redis 。其中hiredis使用简单,函数少,最接近Redis原始命令。cpp_redis需要C++11编译器的支持。
参考文献 & 资源链接