Redis
Redis简介
- 开源的高性能键值对数据库,提供多种不同的键值数据类型适应于不同的存储需求。学习网站:http://www.redis.net.cn/
- Redis:远程字典服务器(Remote Dictionary Server)
- 数据结构服务器,值可以为字符串(String),哈希(Hash),列表(List),集合(Set)和有序集合(Sort set)
- key-value存储系统
- 性能极高
- 原子性
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性.
安装
在ubuntu下安装:
sudo apt-get update
sudo apt-get install redis-server
启动Redis,包括服务器和客服端
redis-server
redis-cli -h host -p port -a password
Redis配置默认在redis安装目录,文件为redis.conf。可以通过以下命令查看:
config get config_setting_name(*)
修改命令如下:
config set config_setting_name new_config_value
Redis 数据类型
- string(字符串)
基本类型,一个键最大存储512MB
set str a
get str
- hash(哈希)
键值对集合,string类型的field和value的映射表,适合存储对象
hmset user:1 username zxl password luzhu
hgetall user:1
hget user:1 username
list(列表)
list是简单的字符串列表,按照插入顺序排序,可以添加元素到头部(L)和尾部(R)
lpush zxl zxl
lrange zxl 0 3
- set(集合)
set是string的无序集合,通过哈希实现的,增删查复杂度为o(1)
sadd zxl zxl
smembers zxl
- zset(sorted set 有序集合)
zset和set差不多,不过zset元素不能重复并且关系到一个double的分数,能够通过分数进行排序(分数可以重复)
zadd key score member
zrangebyScore key score1 score2
Redis命令
用于在redis服务上启动服务,redis命令需要在redis客户端执行
redis=-cli -h host -p port -a password
Redis 键(Key)
管理redis键
command key_name
set zxl zxl
del zxl
命令包括:
del,dump,exists,expire,expireat,pexpire,pexpire,keys,move key,persist,pttl,ttl,randomkey,rename key,renamenx key,type key
字符串(String)
字符串数据类型相关命令用于管理redis字符串
command key_name
命令包括:
set,get,getrange,getset,getbit,mget,setbit,setex,setnx,append,decr,incrbyfloat,incrby,incr,psetex
哈希(Hash)
命令包括:
hdel,hexists,hget,hgetall,hincrby,hkeys,hlen,hmget,hmset,hset,hsetnx,hvals,hscan
列表(List)
blpop,brpop,brpoppush,lindex,lindex,linsert,llen,lpop,lpush,lpushx,lrange,lrem,lset,ltrim,rpop,rpush,rpoplpush,rpushx
集合(Set)
字符串的无序集合,集合成员的唯一,通过hash实现。
sadd,scard,sdiff,sdiffstore,sinter,sinterstore,sismember,smembers,smove,spop,srandmeber,srem,sunion,sunionstore,sscan
有序集合(z:Sort set)
和集合类似,不过有序集合多一个double类型的分数,通过分数可以对有序集合进行排序,通过哈希实现。
zadd,zcard,zcount,zincrby,zinterstore,zlexcount,zrange,zrangebylex,zrangebyscore,zrank,zrem,zremrangebylex,zremrangebyrank,zremrangebyscore,zrevrange,zrevrangebyscore,zrevrank,zscore,zunionstore,zscan
发布订阅
Redis发布订阅(pub/sub)是一种消息通信模式,发送者发送消息,订阅者接收信息。
subscribe redis//订阅
publish redis 消息//发布
psubscribe //订阅多个
pubsub channels//查看订阅和发布状态
unsubscribe redis
punsubcribe
Redis事务
事务可以一次执行多个命令,隔离操作,原子操作
开始事务>>命令入队>>执行事务
multi
set book-name "c++"
get book-name
sadd tag 'C++' 'programming' 'master'
smembers tag
exec
discard//取消事务
exec//执行事务
multi//开始标识
watch//监听key
unwatch //不监听key
Redis 脚本
Redis脚本使用Lua解释器执行脚本,2.6版本已经内嵌Lua环境,执行脚本常用命令是Eval
语法如下:
eval script numkeys key […key] arg [arg…]
Redis连接
auth password//验证密码是否正确
echo msg//打印字符串
ping //查看服务是否运行
quit,exit//关闭当前连接
select index//切换数据库
Redis 服务器
用于管理Redis服务
数据备份和恢复
save:用于创建当前数据库的备份
bgsave:后台运行创建数据库备份
Redis性能测试
redis-benchmark:通过同时执行多个命令实现
redis-benchmark [option][option value]
序号 选项 描述 默认值
1 -h 指定服务器主机名 127.0.0.1
2 -p 指定服务器端口 6379
3 -s 指定服务器 socket
4 -c 指定并发连接数 50
5 -n 指定请求数 10000
6 -d 以字节的形式指定 SET/GET 值的数据大小 2
7 -k 1=keep alive 0=reconnect 1
8 -r SET/GET/INCR 使用随机 key, SADD 使用随机值
9 -P 通过管道传输 请求 1
10 -q 强制退出 redis。仅显示 query/sec 值
11 –csv 以 CSV 格式输出
12 -l 生成循环,永久执行测试
13 -t 仅运行以逗号分隔的测试命令列表。
14 -I Idle 模式。仅打开 N 个 idle 连接并等待。