Redis是开源的高性能内存Key-Value数据库, 可以提供事务和持久化支持, 并提供了TTL(time to life)服务。
Redis采用单线程数据操作+非阻塞IO的模型,非阻塞IO提供了较高的IO性能,单线程操作保证了单条指令的原子性。
Redis使用简单灵活性能优异,常被用作缓存,分布式锁或者消息队列。
非特殊说明, 本文以Redis 3.0为标准进行介绍。
Redis数据结构
string
SET
GET
MGET
MSET
MSETNX
TYPE
INCR,DECR
INCRBY,DECRBY
INCRBYFLOAT
key
DEL
KEYS
EXISTS
RENAME
RENAMENX
EXPIRE
EXPIREAT
TTL
PERSIST
list
LPUSH
RPUSH
LLEN
LRANGE
LINDEX
LINSERT
LREM
LTRIM
LSET
LPOP, RPOP
set
SADD
SSCARD
SMEMBERS
SISMEMBER
SREM
SINTER, SUNION, SDIFF
SINTERSTORE, SUNIONSTORE, SDIFFSTORE
SPOP
SRANDMEMBER
hash
HSET
HSETNX
HGET
HMSET
HMGET
HDEL
HLEN
HEXISTS
HKEYS
HVALS
HGETALL
HINCRBY, HINCRBYFLOAT
zset
ZADD
ZREM
ZCARD
ZCOUNT
ZRANGE, ZREVRANGE
ZRANGEBYSCORE, ZREVRANGEBYSCORE
ZRANK, ZREVRANK
ZINCRBY
Redis应用进阶
事务
pipeline
发布订阅
SCAN
HyperLogLog
Ubuntu系统可以用包管理器安装Redis服务:
sudo apt-get install redis-server
并安装客户端:
sudo apt-get install redis-tools
进入Redis客户端
redis-cli
登录远程Redis服务
redis-cli -h host -p port -a password
Redis数据结构通常情况下,在Redis中若key或field不存在则会作为空集合处理(写操作会将先初始化为空集合)不会抛出错误,若key指向了其它类型则会出现错误。
Redis中的线性集合(list和zset)的下标以0为底,且支持负数下标。即0指向第一个元素,1指向第二个元素,-1指向最后一个元素,-2指向倒数第二个元素。
线性集合通常用start和stop参数表示一个子序列,序列为闭区间即包含start和stop指向的元素(这点与很多编程语言不同)。
stringstring是Redis中的基本类型。 除了增删改查之外,Redis提供了STRLEN,APPEND等简单字符串操作。
Redis没有专用的整数类型,所以key内储存的string可以被解释为十进制64位有符号整数进行计算。
字符串也可以解释为双精度浮点数,在作为浮点数时计算结果时最大保留17位小数,自动去除小数部分尾随的0,必要时还会将浮点数改为整数(比如3.0会被保存成3)。 浮点数可以使用像2.0e7、3e5、90e-2这样的指数符号来表示。
string的算术操作可以让我们方便的实现锁和计数器等功能。
SET SET key value [EX seconds] [PX milliseconds] [NX|XX] SET one 1 SET one 1 XX SET two 2 NX将key指向字符串值value,若不存在key则新建键值对,若key存在默认情况下会覆盖旧值,无视旧值的类型。
SET设置成功会返回OK, 失败会返回nil。
SET key value NX只有在key不存在时才会设置,若key已存在则不进行任何操作。
SET key value XX只有key存在时才会设置, 若key不存在则不进行任何操作。
SET key value EX second: 设置键的过期时间为 second 秒。
SET key value PX millisecond: 设置键的过期时间为 millisecond 毫秒。
因为SET命令可以通过参数来实现SETNX、SETEX和PSETEX三个命令的效果,Redis官方称可能在将来的版本中废弃并最终移除SETNX、SETEX和PSETEX这三个命令。
GET GET key GET one返回key所关联的字符串值,若key不存在返回nil, 若key指向其它数据类型则会返回一个错误信息。
MGET MGET key [key key ...]返回所有(一个或多个)给定key的值。若其中有某个key不存在或指向其它类型,那么这个key返回nil。
MSET MSET key value [key value ...] MSET one 1 two 2同时设置一个或多个key-value对, 如果某个给定key已经存在,那么MSET会用新值覆盖原来的旧值。该命令不会返回错误信息,总是返回OK。
和其它指令一样,该操作是原子性的。
MSETNX MSETNX key value [key value ...] MSET one 1 two 2同时设置一个或多个key-value对, 如果某个给定key已经存在,那么MSETNX不会设置任何一个key-value。
该操作是原子性的,要么全部设置要么全不被设置。
TYPE TYPE key返回key指向的类型:
none: key不存在
string: 字符串
list: 列表
set: 集合
zset: 有序集
hash: 哈希表
INCR,DECR INCR key DECR keyINCR命令将key中储存的数字值增1, 若key不存在则先被初始化为0,然后再执行操作。 返回操作后key指向的值。
若值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。