KV型内存数据库Redis

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指向的元素(这点与很多编程语言不同)。

string

string是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 key

INCR命令将key中储存的数字值增1, 若key不存在则先被初始化为0,然后再执行操作。 返回操作后key指向的值。

若值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e09f70bdc9085347e509b9c215eb523f.html