一: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数据类型

一:数据类型

redis哪些网站 redis cn_redis哪些网站

 二:全局Key命令

redis哪些网站 redis cn_redis哪些网站_02

 三:String数据类型

(1)特点:

  (1):其数据结构 一个Key对应一个Value

  (2):其类似是二进制安全类型 即其可以包含任何数据 例如jpg图片或者序列化对象

  (3):最大存储值为512MB

  (4):redis整形也当做字符串处理

(2)基本命令:

redis哪些网站 redis cn_Redis_03

 (3)使用演示

SET key value [EX seconds] [PX milliseconds] [NX|XX] #设置key为指定的字符串值。

#参数:
#EX seconds – 设置键key的过期时间,单位时秒
#PX milliseconds – 设置键key的过期时间,单位时毫秒
#NX – 只有键key不存在的时候才会设置key的值
#XX – 只有键key存在的时候才会设置key的值

redis哪些网站 redis cn_Redis_04

redis哪些网站 redis cn_java_05

get 通过key取值 key不存在会返回nil

redis哪些网站 redis cn_redis哪些网站_06

APPEND key value #如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。

redis哪些网站 redis cn_redis哪些网站_07

 

redis哪些网站 redis cn_redis_08

GETRANGE key start end #获取指定key值的索引开始位置和结束位置所对应的值,索引从0开始

redis哪些网站 redis cn_Redis_09

mget 批量获取key值

 

redis哪些网站 redis cn_redis_10

 mset批量设置值

redis哪些网站 redis cn_Redis_11

 STRLEN key 获取key长度

redis哪些网站 redis cn_Redis_12

# 了解
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)基本命令:

redis哪些网站 redis cn_redis哪些网站_13

(3)使用演示:

Hset  设置has key 对应的field的value

redis哪些网站 redis cn_Redis_14

 Hmset 批量设置has key 对应的field的value

redis哪些网站 redis cn_redis_15

 hkeys key 获取所有的key值

redis哪些网站 redis cn_java_16

 hvals key 获取所有key对应的值

redis哪些网站 redis cn_java_17

 五:list数据类型

(1)特点:

  (1)列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

  (2)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

(2)基本命令:

redis哪些网站 redis cn_redis_18

 (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)基本命令

集合内操作

redis哪些网站 redis cn_redis_19

 集合间操作

redis哪些网站 redis cn_redis_20

 (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)基本命令:

redis哪些网站 redis cn_redis_21

 (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"