redis是一个key-value存储系统。它支持存储的value类型相对更很多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis:REmote DIctionary Server
Redis(远程字典服务器)
是完全开源免费的,用C语言编写,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称之为结构数据服务器。
Redis逐步取代memcached的原因
1.redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
2.redis不仅仅直迟简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
3.redis支持数据的备份,即master-slave魔术的数据备份
Redis能做什么?
1.内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
2.取最新N个数据的操作,如:可以将最新的10条评论的ID放在redis的List集合里面
3.模拟类似于HttpSession这种需要设定过期时间的功能
4.发布、订阅消息系统
5.定时器、计数器
与memcached区别
都是key-value存储
memcached一旦服务关闭,数据会全部没有
redis服务关闭重启后数据还在
安装Redis
我们的环境:
VMware Workplace
CentOS-6.5
redis-4.0.9
下载地址: Http://redis.io
将下载好的redis-4.0.9放入虚拟机中,并解压
1 | tar -zxvf redis-4.9.0.tar.gz |
redis内包含的文件
输入命令
1 | make |
运行运行makefile文件,要有GCC,没有则会报错。
安装gcc:
1 | yum install gcc-c++ |
安装完成之后要进行二次make,但是之前要将上一次make不成功的残余文件清理,之后再make
1 | make disclean |
make完成后,执行
1 | make install |
出现下图所示即安装成功
配置redis.conf
进入redis-4.0.9,将redis.conf拷贝一份,在拷贝后的上面进行修改
将redis.conf拷贝至myredis文件夹下
1 | vim redis.conf |
将no修改为yes
启动redis服务
1 | cd /usr/local/bin |
1
redis-server /home/myy/hadoop/myredis/redis.config
进入客户端
客户端默认端口为6379
判断是否与服务端连接成功
查看服务状态
关闭连接
关闭后查看服务就没有了
基本命令
默认库
Redis默认有16个库,进入时默认在0号库,角标从0开始,某些任务找一号库,某些找二号库,任务逻辑更清晰redis.conf中有说明
转换库的命令,eg:切换为8号库
flushdb和flushall的区别
flushdb是删除当前库,flushall是删除全部库
Benchmark查看本机状态
常用五大数据类型
string字符串
String是redis最基本的类型,可以理解为与memcached一摸一样的类型,一个key对应一个value。
String类型是二进制安全的,即redis的string可以包含任何数据,比如jpg图片或者序列化对象
string是redis最基本的数据类型,一个redis中字符串最多可以是512M
hash哈希
redis hash是一个键值对集合,是一个string类型的filed和value的映射表,适合用于存储对象。
类似java中的Map<String,Object>
list列表
列表是简单的字符串列表,按照插入顺利排序。可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层实际是个链表
set集合
set是string类型的无序集合。是通过HashTable实现的。
Zset有序集合
Zset(sorted set)
zset和set一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的承宣是唯一的,但分数(score)是可以重复的。
常用关键字
set/get/exists/keys/move/mset/mget
set设置键值,也可以覆盖原来的值
get获取对应键的值
exists查看某个key是否存在
move移动到别的库内
mset/mget批量设置/获取键值
expire/ttl/setex
expire设置秒数,过期后自动消失
ttl 查看某个key还有多久时间
setex设置值时同时设置时间
append/strlen/getrange/setrange/incr/decr/incrby/decrby
append补充字符串
strlen字符串的长度
getrange获取指定区域范围内的值,0到-1表示全部
setrange设置指定区域范围内的值
incr递增加1
decr递减少1
incrby decrby自定义数量
string类型此命令不可用
lpush/lrange/lpop/rpop/lidex/llen
lpush和rpush查看后顺序不同
lrange查看list
lpop栈顶出去
rpop栈底出去
lidex索引
llen查看list长度
lren/ltrim/rpoplpush/lset/linsert
lrem删除n和value
ltrim截取指定范围内的值再赋值给list
rpoplpush将list01栈底给list02栈顶
lset替换某位置的值
linsert某值之前或之后插入某值
sadd/smembers/sismember/scard/srem/srandmember
sadd设置set集合(重复自动留一个)
smembers查看set集合
sismember查看set内是否有某值
scard获取集合内元素个数
srem删除集合内某值
srandmember集合中随机出几个数
spop/smove/sdiff/sinter/sunion
spop随机出栈
smove将一set中某一值
赋给另一set
sdiff取两集合的差集:在第一个中而不在第二个中
sinter取两集合的交集
sunion取两集合的并集
zrange/zrevrange/zcount
zrange同list相同
zrevrange从高到低排序
zincrby修改某个值的分数
zcount返回指定分数范围内值的个数
hash相关的关键字
kv模式不变,但v是一个键值对