Redis

一、简介

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(使用方法百度即可)

posted @ 2018-09-29 15:44  七尺  阅读(152)  评论(0编辑  收藏  举报