一、简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
二、安装
(windows 64位):下载地址:https://github.com/MSOpenTech/redis/releases/download/win-2.8.19/redis-2.8.19.zip,直接解压即可
linux(centos):
- 首先安装c环境,由于redis是用c语言编写的:yum install gcc-c++;
- 进入到根目录 cd~;
- 下载redis:
wget http://download.redis.io/releases/redis-4.0.11.tar.g;
- 创建安装文件夹:mkdir -p /usr/local/redis;
- 解压: tar -xzvf redis-4.0.11.tar.g ,解压的文件夹为redis的安装程序
- 编译:进入cd redis-4.0.11 ,执行make进行编译
- 安装: make PREFIX=/usr/local/redis install,将redis安装/usr/local/redis目录中
- 进入到根目录,将 redis.conf 配置文件复制到 /usr/local/redis 中,cp redis.conf /usr/local/redis
- 更改守护进程,使redis在后台启动,vim redis.config 将 daemonize no 改为 daemonize yes
- 启动redis服务:./bin/redis-server ./redis.conf 。启动redis服务并加载redis.conf配置文件
- 开启客户端:./bin/redis-cli
三、文件介绍:
redis.windows.conf redis的配置文件
redis-benchmark.exe 测试工具,测试redis的读写性能情况
redis-check-aof.exe aof 修复检查日志
redis-check-dump.exe dump 检查数据库文件
redis-cli.exe redis客户端程序
redis-server.exe redis服务器程序
四、类型介绍
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
五、简单实例
1、string(最基本的类型)
redis 127.0.0.1:6379> SET name "runoob" OK redis 127.0.0.1:6379> GET name "runoob"
2、hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
redis> HMSET myhash field1 "Hello" field2 "World" "OK" redis> HGET myhash field1 "Hello" redis> HGET myhash field2 "World"
3、list(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边:lpush)或者尾部(右边:rpush)。
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
redis 127.0.0.1:6379> lpush runoob redis (integer) 1 redis 127.0.0.1:6379> lpush runoob mongodb (integer) 2 redis 127.0.0.1:6379> lpush runoob rabitmq (integer) 3 redis 127.0.0.1:6379> lrange runoob 0 10 1) "rabitmq" 2) "mongodb" 3) "redis" redis 127.0.0.1:6379>
4、set(集合无序)
添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。
redis 127.0.0.1:6379> sadd runoob redis (integer) 1 redis 127.0.0.1:6379> sadd runoob mongodb (integer) 1 redis 127.0.0.1:6379> sadd runoob rabitmq (integer) 1 redis 127.0.0.1:6379> sadd runoob rabitmq (integer) 0 redis 127.0.0.1:6379> smembers runoob 1) "redis" 2) "rabitmq" 3) "mongodb"
5、zset(集合有序)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
redis 127.0.0.1:6379> zadd runoob 0 redis (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabitmq (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabitmq (integer) 0 redis 127.0.0.1:6379> > ZRANGEBYSCORE runoob 0 1000 1) "mongodb" 2) "rabitmq" 3) "redis"
六、常用命令
1、连接操作命令
-
- quit:关闭连接(connection)
- auth:简单密码认证
- help cmd: 查看cmd帮助,例如:help quit
2、持久化
-
- save:将数据同步保存到磁盘
- bgsave:将数据异步保存到磁盘
- lastsave:返回上次成功将数据保存到磁盘的Unix时戳
- shundown:将数据同步保存到磁盘,然后关闭服务
3、远程服务控制
-
- info:提供服务器的信息和统计
- monitor:实时转储收到的请求
- slaveof:改变复制策略设置
- config:在运行时配置Redis服务器
4、对value的操作
-
- exists(key):确认一个key是否存在
- del(key):删除一个key
- type(key):返回值的类型
- keys(pattern):返回满足给定pattern的所有key,通配符*和?两种,例如:keys*name*;keys ????
- randomkey:随机返回key空间的一个
- keyrename(oldname, newname):重命名key
- dbsize:返回当前数据库中key的数目
- expire:设定一个key的活动时间(s)
- ttl:获得一个key的活动时间
- select(index):按索引查询
- move(key, dbindex):移动当前数据库中的key到dbindex数据库
- flushdb:删除当前选择数据库中的所有key
- flushall:删除所有数据库中的所有key
5、String
-
- set(key, value):给数据库中名称为key的string赋予值value
- get(key):返回数据库中名称为key的string的value
- getset(key, value):给名称为key的string赋予上一次的value
- mget(key1, key2,…, key N):返回库中多个string的value
- setnx(key, value):添加string,名称为key,值为value
- setex(key, time, value):向库中添加string,设定过期时间time
- mset(key N, value N):批量设置多个string的值
- msetnx(key N, value N):如果所有名称为key i的string都不存在
- incr(key):名称为key的string增1操作
- incrby(key, integer):名称为key的string增加integer
- decr(key):名称为key的string减1操作
- decrby(key, integer):名称为key的string减少integer
- append(key, value):名称为key的string的值附加value
- substr(key, start, end):返回名称为key的string的value的子串
6、List
-
- rpush(key, value):在名称为key的list尾添加一个值为value的元素
- lpush(key, value):在名称为key的list头添加一个值为value的 元素
- llen(key):返回名称为key的list的长度
- lrange(key, start, end):返回名称为key的list中start至end之间的元素
- ltrim(key, start, end):截取名称为key的list
- lindex(key, index):返回名称为key的list中index位置的元素
- lset(key, index, value):给名称为key的list中index位置的元素赋值
- lrem(key, count, value):删除count个key的list中值为value的元素
- lpop(key):返回并删除名称为key的list中的首元素
- rpop(key):返回并删除名称为key的list中的尾元素
- blpop(key1, key2,… key N, timeout):lpop命令的block版本。
- brpop(key1, key2,… key N, timeout):rpop的block版本。
- rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
7、Set
-
- sadd(key, member):向名称为key的set中添加元素member
- srem(key, member) :删除名称为key的set中的元素member
- spop(key) :随机返回并删除名称为key的set中一个元素
- smove(srckey, dstkey, member) :移到集合元素
- scard(key) :返回名称为key的set的基数
- sismember(key, member) :member是否是名称为key的set的元素
- sinter(key1, key2,…key N) :求交集
- sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
- sunion(key1, (keys)) :求并集
- sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
- sdiff(key1, (keys)) :求差集
- sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
- smembers(key) :返回名称为key的set的所有元素
- srandmember(key) :随机返回名称为key的set的一个元素
8、Hash
-
- hset(key, field, value):向名称为key的hash中添加元素field
- hget(key, field):返回名称为key的hash中field对应的value
- hmget(key, (fields)):返回名称为key的hash中field i对应的value
- hmset(key, (fields)):向名称为key的hash中添加元素field
- hincrby(key, field, integer):将名称为key的hash中field的value增加integer
- hexists(key, field):名称为key的hash中是否存在键为field的域
- hdel(key, field):删除名称为key的hash中键为field的域
- hlen(key):返回名称为key的hash中元素个数
- hkeys(key):返回名称为key的hash中所有键
- hvals(key):返回名称为key的hash中所有键对应的value
- hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value
9、查看服务器信息:info
// - server : 一般 Redis 服务器信息,包含以下域: [redis_version] => 2.6.4 Redis 服务器版本 [redis_git_sha1] => 0 Git SHA1 [redis_git_dirty] => 0 Git dirty flag [redis_mode] => standalone [os] => Linux 2.6.18-348.el5 x86_64 服务器的宿主操作系统 [arch_bits] => 64 架构(32 或 64 位) [multiplexing_api] => epoll Redis 所使用的事件处理机制 [gcc_version] => 4.1.2 编译 Redis 时所使用的 GCC 版本 [process_id] => 20376 服务器进程的 PID [run_id] => e5ba1056a4b81d3473daf417fa80d98ea3ca65a4 Redis 服务器的随机标识符(用于 Sentinel 和集群) [tcp_port] => 6379 TCP/IP 监听端口 [uptime_in_seconds] => 40339329 自 Redis 服务器启动以来,经过的秒数 [uptime_in_days] => 466 自 Redis 服务器启动以来,经过的天数 [lru_clock] => 1440077 以分钟为单位进行自增的时钟,用于 LRU 管理 // - clients : 已连接客户端信息,包含以下域: [connected_clients] => 1525 已连接客户端的数量(不包括通过从属服务器连接的客户端) [client_longest_output_list] => 0 当前连接的客户端当中,最长的输出列表 [client_biggest_input_buf] => 0 当前连接的客户端当中,最大输入缓存 [blocked_clients] => 0 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量 // - memory : 内存信息,包含以下域: [used_memory] => 928376976 由 Redis 分配器分配的内存总量,以字节(byte)为单位 [used_memory_human] => 885.37M 以人类可读的格式返回 Redis 分配的内存总量 [used_memory_rss] => 1006768128 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top、ps 等命令的输出一致。 [used_memory_peak] => 1038318704 Redis 的内存消耗峰值(以字节为单位) [used_memory_peak_human] => 990.22M 以人类可读的格式返回 Redis 的内存消耗峰值 [used_memory_lua] => 31744 Lua 引擎所使用的内存大小(以字节为单位) [mem_fragmentation_ratio] => 1.08 used_memory_rss 和 used_memory 之间的比率 [mem_allocator] => jemalloc-3.0.0 在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc 。 // - persistence : RDB 和 AOF 的相关信息 [loading] => 0 [rdb_changes_since_last_save] => 1565 [rdb_bgsave_in_progress] => 0 [rdb_last_save_time] => 1440464119 [rdb_last_bgsave_status] => ok [rdb_last_bgsave_time_sec] => 17 [rdb_current_bgsave_time_sec] => -1 [aof_enabled] => 0 [aof_rewrite_in_progress] => 0 [aof_rewrite_scheduled] => 0 [aof_last_rewrite_time_sec] => -1 [aof_current_rewrite_time_sec] => -1 [aof_last_bgrewrite_status] => ok // - stats : 一般统计信息 [total_connections_received] => 4163025468 [total_commands_processed] => 45340900397 [instantaneous_ops_per_sec] => 1205 [rejected_connections] => 0 [expired_keys] => 494262666 [evicted_keys] => 0 [keyspace_hits] => 2551261422 [keyspace_misses] => 1626960963 [pubsub_channels] => 0 [pubsub_patterns] => 0 [latest_fork_usec] => 73571 // - replication : 主/从复制信息 [role] => master [connected_slaves] => 1 // - cpu : CPU 计算量统计信息 [slave0] => 172.16.18.205,6379,online [used_cpu_sys] => 785715.81 [used_cpu_user] => 1005111.12 [used_cpu_sys_children] => 121746.03 [used_cpu_user_children] => 1396449.38 [db0] => keys=3443200,expires=14669 [db1] => keys=9709,expires=9686 [db2] => keys=20955,expires=850 [db3] => keys=68055,expires=12482 [db4] => keys=4372,expires=4370 [db5] => keys=12,expires=0 [db6] => keys=295,expires=295 [db7] => keys=5,expires=0 [db8] => keys=167928,expires=167916
10、java使用redis:Jedis(使用方法百度即可)