Redis简介
Redis简介
redis是Remote Dictionary Server(远程字典服务器)的缩写,是开源的key-value数据库,数据保存在内存中,支持持久化。支持灵活的数据结构,除了string,还有hash、list、 set 和sorted set结构。正是这些灵活的数据结构,丰富了Redis的应用场景,能满足更多业务上的灵活存储需求。
相关博客:http://blog.csdn.net/freebird_lb/article/category/1087302
redis 数据类型详解 以及 redis适用场景场合http://my.oschina.net/ydsakyclguozi/blog/404625
Redis安装
redis默认次版本号为偶数的版本为稳定版本,推荐使用稳定版本。
本文只介绍在OS X系统下的安装方法。推荐使用Homebrew安装redis。
1.安装Homebrew
输入ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"安装Homebrew。
2.安装redis
brew install redis
启动和停止Redis
- redis-server,直接启动redis服务器
- redis-server --port 6379,redis服务器默认使用6379端口号,可以通过port参数自定义启动端口号。
- redis-cli,启动客户端
- redis-cli -h 127.0.0.1 -p 6379,通过参数自定义地址和端口号连接redis。
- redis-cli shutdown,redis收到SHUTDOWN命令可以安全退出。
Redis切换数据库
redis实例提供多个存储数据的字典,将每个字典理解为一个数据库。redis默认支持16个数据库,每个数据库是从0开始递增的数字命名。默认连接0数据库。
可以通过SELECT命令切换数据库,如SELECT 1切换到1号数据库。
值得注意的redis的这些数据库与传统的数据库概念并不一样。所有数据库拥有共同的权限设置。FLUSHALL命令会清空所有数据库。
Redis基本命令
1.键基本操作
- KEYS pattern,支持通配符类型,如keys *获得Redis的所有键。
- EXISTS key,判断键是否存在。
- DEL key[key ...],删除一个或多个键,返回值代表删除的键的个数。
- TYPE key,获得键的类型。
2.字符串类型
String是最基本的数据类型类型,可以理解成与Memcached是一样的类型,一个key对应一个value,其支持的操作与Memcached的操作类似,功能更加丰富。可以存储任何形式的字符串,包括二进制。字符串类型是其他数据类型的基础。
-
SET key value,设置键值。
-
GET key,读取key的值。
- INCR key,当key存储的字符串是整数的时候,可以使用incr命令递增键值,如果key不存在,则会将键值设为1,如果键值不是整数,则会提示错误。
- INCRBY key num,通过num可以指定增加的数值。
- DECR key,与incr类似,递减。
- DECRBY key num,与incrby类似。
- INCRBYFLOAT,支持浮点数
- APPEND key value,在键值末尾追加value,返回值是追加后总长度。
- STRLEN key,获取字符串长度。
- MSET key value[key value ...],设置多个值
- MGET key[key ...],一次读取多个值
- SETNX key value,nx即为not exists,如果key值不存在,则将key值设为value,如果key存在,则不作修改。
-
SETEX key time value,将key的值设为value,并且指定键值的有效时间。
- SETRANGE key index value,将key的值从index位开始替换为value。
- GETSET key value,将key的值设置为value,并且返回key的原来的值,如果键不存在则返回nil。
- GETRANGE key start end,返回key指定范围的值。
3.散列类型
散列类型的键值是字典结构。 Redis的哈希值是字符串字段和字符串值之间的映射,常被用来表示对象。
- HSET key field value,为字段赋值。
- HSETNX key field value,如果字段不存在则创建。
- HGET key field,取键的字段的值。
- HMSET key field value [field value ...],为多个字段赋值。
- HMGET key field [field ...],取多个字段的值。
- HGETALL key,获取键的所有字段和字段值。
- HEXISTS key field,判断字段是否存在。
- HSETNX key field value,当字段不存在时赋值。
- HINCRBY key field num,字段值递增。
- HDEL,删除字段
- HKEYS key,获取键所有字段名。
- HVALS key,获取键所有字段值。
- HLEN key,获取字段数量
4.列表类型
列表类型是字符串双向列表,可以从列表两端添加元素。从两端插入元素的速度很快,但索引访问元素比较慢。因为这种特性,可以应用于合适的使用场景。
- LPUSH key value [value ...],从列表头部添加元素。
- RPUSH key value [value ...],从列表尾部添加元素。
- LPOP key,从列表头部弹出元素。
- RPOP key,从列表尾部弹出元素。
- BRPOP key time,如果没有获取元素则阻塞time秒,为0则不限制等待时间。
- LLEN,获取列表元素个数。
- LRANGE key start stop,获取列表片段,支持负索引,-1代表尾部,LRANGE key 0 -1即获取全部元素。
- LREM key count value,删除列表中前count个值为value的元素,count<0会从尾部删除,count=0则会删除所有值为value的元素。
- LINDEX key index,获得索引元素值。
- LSET key index value,设置索引元素值。
- LTRIM key start end,删除指定范围外所有元素。
- LINSERT key BEFORE|AFTER pivot value,在值为pivot的元素之前或之后插入value值。
- RPOPLPUSH source destination,将元素从一个列表转到另一个列表。
5.集合类型
Redis的集合是字符串的无序集合。在Redis内部是使用散列表实现,可以在多个集合类型键间进行交集、并集和差集操作。
- SADD key member [member ...],增加元素,返回值是加入成功的元素数量。
- SREM key member [member ...],删除元素,返回值是删除成功的元素数量。
- SMEMBERS key,获得集合中所有元素。
- SISMEMBER key member,判断元素是否存在。
- SDIFF key [key ...],多集合差集元素。
- SINTER key [key ...],多集合并集运算。
- SUNION key [key ...],多集合交集运算。
- SCARD key,获得集合中元素个数。
- SDIFFSTORE|SINTERSTORE|SUNIONSTORE dest key [key ...],存储集合运算结果。
- SRANDMEMBER key [count],随机获得一个或多个元素,如果count>0,会返回count个不重复的元素,当count大于集合元素总数时返回全部元素,如果count<0,返回|count|个随机元素。
- SPOP key,随机弹出元素。
6.有序集合类型
Redis的有序集合与集合类型区别就在于有序上,是字符串不重复的集合。不同的是,一个有序集合的每个元素关联了分数,以便采取有序set命令。虽然元素具有唯一性,但分数可能会重复。
- ZADD key score member [score member ...],向有序集合添加元素和该元素的分数。
- ZSCORE key member,获取元素分数。
- ZRANGE key start stop [WITHSCORES],按元素分数从小到大返回索引内元素,加上WITHSCORES参数返回值会带上分数。
- ZREVRANGE key start stop [WITHSCORES],从大到小返回结果。
- ZRANGEBYSCORE key min max [WITHSCORES] (LIMIT offset count),从小到大返回分数内的元素。
- ZINCRBY key increment member,增加元素分数。
- ZCARD key,获得集合中元素数量。
- ZCOUNT key min max,指定分数范围内元素个数
- ZREM key member [member ...],删除一个或多个元素。
- ZREMRANGEBYRANK key start stop,删除指定排名范围内的所有元素,返回删除数量。
- ZREMRANGEBYSCORE key min max,删除指定分数范围内的所有元素,返回删除数量。
- ZRANK key member,获得元素从小到大排名。
- ZREVRANK key member,获得元素从大到小排名。
- ZINTERSTORE des numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX],计算交集并存储,WEIGHTS设置权重。
Redis生存时间
- EXPIRE key seconds,键将在seconds秒后被删除。
- TTL key,返回键的生存时间,单位为秒。如果键不存在或未设置生存时间,则返回-1。
- PERSIST,取消键的生存时间。使用SET命令同样会取消生存时间。
- PEXPIRE key milliseconds,单位为毫秒。
Redis排序
-
SORT key [ALPHA],对列表类型、集合类型和有序集合类型键进行排序,ALPHA参数代表按照字典顺序排序。
- SORT key BY prefix:* -> suffix DESC, BY参考键,参考键可以是字符串类型键或者是散列类型键的某个字段(表示为键名->字段名),将按照参考键排序。
- SORT key BY prefix:* -> suffix DESC GET prefix:* -> element,GET参数不影响排序,它的作用是使SORT命令的返回结果不再是元素自身的值,而是GET参数中指定的键值。
- SORT key BY prefix:* -> suffix DESC GET prefix:* -> element STORE result,STORE参数,存储排序结果。
Redis事务
Redis事务是指一组命令的集合。Redis事务具有原子性,所有的命令要么都执行,要么都不执行。而且在一个事务中的命令依次执行作为单个隔离操作,不会被另一个客户端发出的请求在Redis的事务的过程中插入执行。
WATCH key1
WATCH命令可以持续到EXEC一直监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。
pipeline
这样即使redis每秒能处理100个命令,而我们的client也只能一秒钟发出四个命令。这显示没有充分利用 redis的处理能力。除了可以利用mget,mset 之类的单条命令处理多个key的命令外我们还可以利用pipeline的方式从client打包多条命令一起发出,不需要等待单条命令的响应返回,而redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端。
Redis发布订阅
Redis的发布订阅实现了消息传递,发送者发送消息,而接收者接收消息。在Redis客户端可以订阅任何数目的通道。
- SUBSCRIBE channel,订阅频道。
- PUBLISH channel message,发布消息,返回值为接收消息的订阅者数量。
- PUNSUBSCRIBE channel,退订。
Redis持久化
RDB
AOF
AOF(append only file)持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
通过appendonly yes开启。
浙公网安备 33010602011771号