前言 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。redis特性1.速度快,每秒十万次读写,数据存在内存,用C语言写的,单线程2.持久化,redis所有的数据保存在内存中,对数据的更新将异步保存到磁盘上3.多种数据结构,字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets),位图(bitmaps),超小内存唯一值计数(HyperLogLog),地理信息定位(GEO)4.支持多种编辑语言,java,php,python,ruby,lua,node.js……5.功能丰富,发布订阅、lua脚本,支持事物,pipeline6.简单,代码量少,不依赖外部库,单线程模型7.主从复制8.高可用、分布式,redis-sentinel(v2.8)支持高可用,redis-cluster(v3.0)支持分布式redis典型应用场景1.缓存系统2.计数器3.消息队列系统4.排行榜5.社交网络6.实时系统redis(linux)安装和可执行文件说明(下载redis)wget http://download.redis.io/releases/redis-3.0.7.tar.gz(解压)tar -xzf redis-3.0.7.tar.gz(建立软连接)ln -s redis-3.0.7 redis(进入目录)cd redis(编译安装)make && make install(注)如果在make过程中出现以下错误说明是未安装gcc,运行 yum install gcc解决办法:make MALLOC=libcredis-server redis服务器redis-cli redis命令行客户端redis-benchmark redis性能测试工具redis-check-aof aof文件修复工具redis-check-dump rdb文件修复工具redis-sentinel sentinel服务器启动方式redis-server 默认设置启动redis-server --port 6380 动态参数启动redis-server configPath 配置文件启动(建议使用)验证方式1.ps -ef|grep redis2.netstat -antpl|grep redis3.redis-cli -h ip -p port ping常用配置daemonize 是否是守护进程(no|yes),推荐yesport redis 对外端口号logfile redis 系统日志dir redis 工作目录安装成功后校验1.进入redis的src目录,启动默认配置redis-server2.启动redis-cli3.简单验证通用命令keys #遍历所有的key dbsize #计算key的总数exists key #检查key是否存在del key[key...] #删除指定key-valueexpire key seconds #设置key的过期时间ttl key #查看key剩余的过期时间(-2 不存在/-1 key存在,且没有过期时间)persist key #去掉key的过期时间type key #返回key的类型(string/hasg/list/set/zset/none)数据结构和内部编码redis是单线程执行命令,尽量避免长(慢)命令(keys,flushall,flushdb,slow lua script,mutil/exec,operate big value(collection))字符类型常用命令get key #获取key对应的valueset key value #设置key-valuedel key #删除key-valueincr key #key自增1,如果key不存在,自增后get(key)=1decr key #key自增1,如果key不存在,自减后get(key)=-1incrby key k #key自增k,如果key不存在,自增后get(key)=kdecr key k #key自减k,如果key不存在,自增后get(key)=-kset kek value #不管key是否存在都设置setnx key value #key不存在,才设置set key value xx #key存在,才设置mget key1 key2 key3 #批量获取key,原子操作mset key1 value1 key2 value2 #批量设置key-valuegetset key newvalue #set keynewvalue并返回旧的valueappend key value #将value追加到旧的valuestrlen key #返回字符串的长度incrbyfloat key 3.5 #增加key对应的值3.5getrange key start end #获取字符串指定下标所有的值setrange key index value #设置指定下标所有对应的值哈希常用命令hget key field #获取hash key对应的field的valuehset key field value #设置hash key对应的field的valuehdel key field #删除hash key对应的field的valuehexists key field #判断hash key是否有fieldhlen key #获取hash key field的数量hmget key field1 field2... #批量获取hash key的一批field对应的值hmset key field1 value1 field2 value2... #批量设置hash key的一批field hgetall key #返回hash key对应所有的field和valuehvals key #返回hash key对应所有的field的valuehkeys key #返回hash key对应所有的fieldhsetnx key field value #设置hash key对应的field的value(如果field已经存在,则失败)hincrby key field intConter #hashkey对应的field的value自增intCounterhincrbyfloat key field floatCounter #hincrby浮点数版本list的特点:有序,可以重复,左右两边插入弹出常用命令rpush key value1 value2... #从列表右端插入值(1-n个)lpush key value1 value2... #从列表左端插入值(1-n个)linsert key before|after value newValue #在list指定的值前|后插入newValuelpop #从列表左侧弹出一个itemrpop #从列表右侧弹出一个itemlrem #根据count值,从列表中删除所有value相等的项(1)count>0 从左到右,删除最多count个value个相等的项(2)count<0 从右到左,删除最多Math.abs(count)个value个相等的项 (3)count=0删除所有value相等的项 ltrim key start end #根据索引范围修剪列表lrange key start end #获取列表指定范围所有的itemlindex key index #获取列表指定索引的itemllen key #获取列表的长度lset key index newValue #设置列表指定索引值为newValuebloop key timeout #lpop阻塞版本,timeou是阻塞超时时间,timeout=0为永不阻塞brpop key timeout #rpop阻塞版本,timeou是阻塞超时时间,timeout=0为永不阻塞集合:无序,无重复,集合间操作sadd key element #向集合key添加element(如果element已经存在,添加失败)srem key element #将集合key中的element移除掉scard key #计算集合大小sismember key value #判断it是否在集合中srandmember key count #从集合中随机挑count个元素,(不会破坏集合)spop key #从集合中随机弹出一个元素smembers key #获取集合所有的元素(集合间的操作)sdiff key1 key2 #差集sinter key1 key2 #交集sunion key1 key2 #并集sdiff|sinter|suion +store destkey .. #将差集/交集/并集结果保存在destkey中有序集合,按照score排序,score可以重复,element不可重复zadd key score element #添加score和elementzrem key element #删除元素zscore key element #返回元素分数zincrby key increScore element #增加或减少元素的分数zcard key 返回元素的总个数zrange key start end[WITHSCORES] #返回指定索引范围内的升序元素[分值]zrangebyscore key minScore maxScore[WITHSCORES] #返回指定分数范围内的升序元素[分值]zcount key minScore maxScore #返回有序集合内在指定分数范围内的个数zremrangebyrank key start end #删除指定排名内的升序元素zremrangebyscore key minScore maxScore #删除指定分数内的升序元素