一:redis简介
(1):摘要
redis由使用ANSI C编写的开源,支持网络,基于内存.亦可以持久化基于键值对的非关系型数据库,从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年6月期间,其开发由Pivotal赞助。在2013年5月之前,其开发由VMware赞助。根据月度排行网站DB-Engines.com的数据显示,Redis是最流行的键值对存储数据库。
(2):软件获取帮助
官方网站:https://redis.io
官方各版本下载地址:http://download.redis.io/releases/
Redis 中文命令参考:http://redisdoc.com
中文网站1:http://redis.cn
中文网站2:http://www.redis.net.cn
(3):特点优势
1:k、v键值存储以及数据结构存储(如列表、字典)
2:所有的数据(包括存储数据)都是在内存中完成
3:单线程服务(这意味着会有较多的阻塞情况)
4:支持主从复制模式,更提供高可用主从复制模式(哨兵)
5:丰富的编程接口支持,如Python、Golang、Java、php、Ruby、Lua、Node.js
6:功能丰富,除了支持多种数据结构之外,还支持事务、发布/订阅、消息队列等功能
7:支持数据持久化(AOF、RDB)
(4)与memcahce对比
1:memcache不支持数据持久化 redis支持数据持久化
2:memcache数据存储基于LRU(最近 最少使用的会被删除) redis只要服务不停止数据可以一直保持下去
3:memcache是多线程阻塞比较小 redis是单线程阻塞比较多
4:memcache只支持简单的k、v数据存储,而redis支持多种数据格式存储。
二:redis安装配置
一:安装
# 安装
yum install gcc -y #安装C依赖
wget http://download.redis.io/redis-stable.tar.gz #下载稳定版本
tar zxvf redis-stable.tar.gz #解压
cd redis-stable
make PREFIX=/opt/app/redis install #指定目录编译,也可以不用指定
make install
mkdir /etc/redis #建立配置目录
cp redis.conf /etc/redis/6379.conf # 拷贝配置文件
cp utils/redis_init_script /etc/init.d/redis #拷贝init启动脚本针对6.X系统
chmod a+x /etc/init.d/redis #添加执行权限
vi /etc/redis/6379.conf #修改配置文件:
bind 0.0.0.0 #监听地址
maxmemory 4294967296 #限制最大内存(4G):
daemonize yes #后台运行
####启动与停止
/etc/init.d/redis start
/etc/init.d/redis stop
二:二进制文件说明
redis安装完成后会有以下可执行文件(window下是exe文件)生成,下面是各个文件的作用。
redis-server #Redis服务器和Sentinel服务器,启动时候可使用--sentinel指定为哨兵
redis-cli #Redis命令行客户端
redis-benchmark #Redis性能测试工具
redis-check-aof #AOF文件修复工具
redis-check-dump #RDB文件检测工具
redis-sentinel #Sentinel服务器,4.0版本已经做了软链接到redis-server
三:配置详解
logfile
#日志文件位置及文件名称
bind 0.0.0.0
#监听地址,可以有多个 如bind 0.0.0.0 127.0.0.1
daemonize yes
#yes启动守护进程运行,即后台运行,no表示不启用
pidfile /var/run/redis.pid
# 当redis在后台运行的时候,Redis默认会把pid文件在在/var/run/redis.pid,也可以配置到其他地方。
# 当运行多个redis服务时,需要指定不同的pid文件和端口
port 6379
# 指定redis运行的端口,默认是6379
unixsocket
#sock文件位置
unixsocketperm
#sock文件权限
timeout 0
# 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接, 0是关闭此设置
loglevel debug
# 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
logfile ""
# 日志文件配置,默认值为stdout,标准输出,若后台模式会输出到/dev/null
syslog-enabled
# 是否以syslog方式记录日志,yes开启no禁用,与该配置相关配置syslog-ident 和syslog-facility local0 分别是指明syslog的ident和facility
databases 16
#配置可用的数据库个数,默认值为16,默认数据库为0,数据库范围在0-(database-1)之间
always-show-logo yes #4.0以后新增配置
#是否配置日志显示redis徽标,yes显示no不显示
三:redis数据类型
一:数据类型
二:全局Key命令
三:String数据类型
(1)特点:
(1):其数据结构 一个Key对应一个Value
(2):其类似是二进制安全类型 即其可以包含任何数据 例如jpg图片或者序列化对象
(3):最大存储值为512MB
(4):redis整形也当做字符串处理
(2)基本命令:
(3)使用演示
SET key value [EX seconds] [PX milliseconds] [NX|XX] #设置key为指定的字符串值。
#参数:
#EX seconds – 设置键key的过期时间,单位时秒
#PX milliseconds – 设置键key的过期时间,单位时毫秒
#NX – 只有键key不存在的时候才会设置key的值
#XX – 只有键key存在的时候才会设置key的值
get 通过key取值 key不存在会返回nil
APPEND key value #如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。
GETRANGE key start end #获取指定key值的索引开始位置和结束位置所对应的值,索引从0开始
mget 批量获取key值
mset批量设置值
STRLEN key 获取key长度
# 了解
DECR key #数字类型的key自减操作,key类型不是数字则报错
INCR key #数字类型key 自加操作,与DECR相反
DECRBY key decrement #数字类型key指定减少数值
INCRBY key increment #数字类型key指定增加数值,与DECRBY相反
四:hash数据类型
(1)特点:
(1):其Redis中的Hashes类型看成具有String Key和String Value的映射容器。
(2):所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。
(3):如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储995701749 个键值对。
(4):Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
(2)基本命令:
(3)使用演示:
Hset 设置has key 对应的field的value
Hmset 批量设置has key 对应的field的value
hkeys key 获取所有的key值
hvals key 获取所有key对应的值
五:list数据类型
(1)特点:
(1)列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
(2)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
(2)基本命令:
(3)演示命令
127.0.0.1:6379> rpush listone i love you
(integer) 3
127.0.0.1:6379> lpush listone hello my java
(integer) 6
127.0.0.1:6379> lrange listone 0 -1
1) "java"
2) "my"
3) "hello"
4) "i"
5) "love"
6) "you"
127.0.0.1:6379> linsert listone before love zhangsan
(integer) 7
127.0.0.1:6379> lrange listone 0 -1
1) "java"
2) "my"
3) "hello"
4) "i"
5) "zhangsan"
6) "love"
7) "you"
127.0.0.1:6379> linsert listone after love lisi
(integer) 8
127.0.0.1:6379> lrange listone 0 -1
1) "java"
2) "my"
3) "hello"
4) "i"
5) "zhangsan"
6) "love"
7) "lisi"
8) "you"
127.0.0.1:6379> lpop listone
"java"
127.0.0.1:6379> rpop listone
"you"
127.0.0.1:6379> lrange listone 0 -1
1) "my"
2) "hello"
3) "i"
4) "zhangsan"
5) "love"
6) "lisi"
127.0.0.1:6379> lrem listone 1 my
(integer) 1
127.0.0.1:6379> lrange listone 0 -1
1) "hello"
2) "i"
3) "zhangsan"
4) "love"
5) "lisi"
六:Set数据类型
(1)特点:
(1)Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
(2)Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
(3)集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
(2)基本命令
集合内操作
集合间操作
(3)演示命令
集合内操作
127.0.0.1:6379> sadd setone java pyhton c c++
(integer) 4
127.0.0.1:6379> smembers setone
1) "c++"
2) "c"
3) "pyhton"
4) "java"
127.0.0.1:6379> srem setone c
(integer) 1
127.0.0.1:6379> smembers setone
1) "c++"
2) "pyhton"
3) "java"
127.0.0.1:6379> scard setone
(integer) 3
127.0.0.1:6379> sismember setone java
(integer) 1
127.0.0.1:6379> srandmember setone 2
1) "c++"
2) "pyhton"
127.0.0.1:6379> spop setone
"pyhton"
127.0.0.1:6379> smembers setone
1) "c++"
2) "java"
127.0.0.1:6379> sadd settwo 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> sadd setthree a b c 3 4 e 2
(integer) 7
127.0.0.1:6379> sdiff settwo setthree
1) "1"
2) "5"
3) "6"
127.0.0.1:6379> sinter settwo setthree
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> sunion settwo setthree
1) "5"
2) "6"
3) "4"
4) "b"
5) "2"
6) "1"
7) "a"
8) "e"
9) "c"
10) "3"
七:Zset数据类型
(1)特点:
(1)Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
(2)不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
(3)有序集合的成员是唯一的,但分数(score)却可以重复。
(4)集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1
(2)基本命令:
(3)命令演示
127.0.0.1:6379> zadd zsetone 10 java
(integer) 1
127.0.0.1:6379> zadd zsetone 20 pyhton
(integer) 1
127.0.0.1:6379> zadd zsetone 30 c
(integer) 1
127.0.0.1:6379> zadd zsetone 40 php
(integer) 1
127.0.0.1:6379> zscore zsetone c
"30"
127.0.0.1:6379> zcard zsetone
(integer) 4
127.0.0.1:6379> zrangebyscore zsetone 10 30
1) "java"
2) "pyhton"
3) "c"