-
redis简介
redis是一个开源的key-value数据库。
它又经常被认为是一个数据结构服务器。
因为它的value不仅包括基本的string类型还有 list,set ,sorted set和hash类型。当然这些类型的元素也都是string类型。也就是说list,set这些集合类型也只能包含string 类型。
你可以在这些类型上做很多原子性的操作。比如对一个字符value追加字符串(APPEND命令)。加加或者减减一个数字字符串(INCR命令,当 然是按整数处理的).可以对list类型进行push,或者pop元素操作(可以模拟栈和队列)。
对于set类型可以进行一些集合相关操作 (intersection union difference)。memcache也有类似与++,--的命令。
不过memcache的 value只包括string类型。远没有redis的value类型丰富。和memcahe一样为了性能。redis的数据通常都是放到内存中的。当然 redis可以每间隔一定时间将内存中数据写入到磁盘以防止数据丢失。
redis也支持主从复制机制(master-slave replication)。
redis的其他特性包括简单的事务支持和 发布订阅(pub/sub)通道功能,而且redis配置管理非常简单。
还有各种语言版本的开源客户端类库。
-
redis安装
1、windows
下载安装包,打开cmd,切换到redis目录,运行redis-server.exe redis.conf
通过redis-cli.exe -h 127.0.0.1 -p 6379方式连接
2、linux
可以下载源码,安装,也可以下载压缩文件
通过 ./redis-server redis.conf
-
redis 基本操作
1、启动redis
src/redis-server或者src/redis-server redis.conf
src/redis-server redis.conf 1>log.log 2>errlog.log
1为标准输出,2为错误输出
将 Redis 作为 Linux 服务随机启动
vi /etc/rc.local, 加入代码:
/root/install/redis-2.4.9/src/redis-server
2、Redis连接客户端
src/redis-cli 连接默认端口
./redis-cli -h -p -a 指定host,port,password
3、增删改查
set key value 设置key值为value
get key 取出当前key值
del key 删除当前key
exists key 判断当前key是否存在
keys * 取出当前匹配的所有key
move key ad4 移动key键值对到ad4数据库
persit key 移除当前key的过期时间
randomkey 随机返回一个key
rename 重命名key
type 返回值的数据类型
ping 测试连接是否存在
echo name 打印
quit 退出
dbsize 当前数据库中key的数量
info 服务器基本信息
monitor 实时转储收到的请求
config get 获取服务器的参数配置
flushdb 清空当前数据库
flushall 清除所有数据库
-
redis常用配置
redis配置文件位于 Redis 安装目录下,文件名为 redis.conf
1、通过 CONFIG 命令查看或设置配置项
>>> CONFIG GET CONFIG_SETTING_NAME
>>> CONFIG GET * 获取所有配置项
2、通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置
>>> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
3、参数说明
redis.conf 常用配置项说明
1、daemonize no
Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
2、pidfile /var/run/redis.pid
当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定要写入的文件
3、port 6379
指定Redis监听端口,默认端口为6379
4、timeout 300
当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
5、loglevel verbose
指定日志的记录级别,Redis总共支持四个级别:debug,verbose,notice,warning,默认为verbose
6、 logfile stdout
日志记录方式,默认为标准输出,如果配置redis为守护进程方式运行,而这里配置为日志记录方式为标准输出,则日志将会发送至/dev/null(回收站)
7、databases 16
设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id
8、save <seconds> <changes>
指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改
9、dbfilename dump.rdb
指定本地数据库文件名,默认值为dump.rdb
10、dir ./
指定本地数据库存放目录
11、slaveof <masterip> <masterport>
设置本机为slave服务时,设置master服务的ip及端口,在redis启动时,它会自动从master进行数据同步
12、masterauth <master-password>
当master设置密码时,slave服务连接master的密码
13、requirepass foobared
设置Redis连接密码,如果配置了连接密码,客户端在连接redis时需要通过auth<password> 命令提供密码,默认关闭
14、maxmemory <bytes>
指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,
当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。
Redis新的vm机制,会把Key存放内存,Value会存放在swap区
15、appendonly no
指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。
因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
16、appendfilename appendonly.aof
指定更新日志文件名,默认为appendonly.aof
17、appendfsync everysec
指定更新日志条件,共有3个可选值:
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折衷,默认值)
18、include /path/to/local.conf
指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件
-
redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
1、keys
redis本质上一个key-value db,所以我们首先来看看他的key.首先key也是字符串类型,但是key中不能包括边界字符
由于key不是binary safe的字符串,所以像"my key"和"mykey\n"这样包含空格和换行的key是不允许的
顺便说一下在redis内部并不限制使用binary字符,这是redis协议限制的。
key相关的命令:
exits key 测试指定key是否存在,返回1表示存在,0不存在
del key1 key2 ....keyN 删除给定key,返回删除key的数目,0表示给定key都不存在
type key 返回给定key的value类型。返回 none 表示不存在key,string字符类型,list 链表类型 set 无序集合类型...
keys pattern 返回匹配指定模式的所有key(* [] ?) 三种匹配方式
randomkey 返回从当前数据库中随机选择的一个key,如果当前数据库是空的,返回空串
rename oldkey newkey 原子的重命名一个key,如果newkey存在,将会被覆盖,返回1表示成功,0失败。可能是oldkey不存在或者和newkey相同
renamenx oldkey newkey 同上,但是如果newkey存在返回失败
dbsize 返回当前数据库的key数量
expire key seconds 为key指定过期时间,单位是秒。返回1成功,0表示key已经设置过过期时间或者不存在
ttl key 返回设置过过期时间的key的剩余过期秒数 -1表示key不存在或者没有设置过过期时间
select db-index 通过索引选择数据库,默认连接的数据库所有是0,默认数据库数是16个。返回1表示成功,0失败
move key db-index 将key从当前数据库移动到指定数据库。返回1成功。0 如果key不存在,或者已经在指定数据库中
flushdb 删除当前数据库中所有key,此方法不会失败。慎用
flushall 删除所有数据库中的所有key,此方法不会失败。更加慎用
2、string 类型
string是redis最基本的类型,而且string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。从内部实现来看其实string可以看作byte数组,最大上限是1G字节。
如果只用string类型,redis就可以被看作加上持久化特性的memcached。
string命令如下:
set key value 设置key对应的值为string类型的value,返回1表示成功,0失败
setnx key value 同上,如果key已经存在,返回0 。nx 是not exist的意思
get key 获取key对应的string值,如果key不存在返回nil
getset key value 原子的设置key的值,并返回key的旧值。如果key不存在返回nil
mget key1 key2 ... keyN 一次获取多个key的值,如果对应key不存在,则对应返回nil。