Redis初认知

Redis简介

Redis诞生于2009年,全称是REmote DIctionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库,开发者是意大利Antirez(原名Salvatore Sanfilippo),通常用作数据库(database)、缓存(cache)、流式存储引擎(streaming engine)、消息代理(message broker)等。

Redis是使用ANSI C编写的,可以在大多数POSIX系统上运行,比如Linux、BSD和Mac OS X,没有外部依赖。Linux和OS X是Redis开发和测试最多的两个系统,官方推荐使用Linux进行部署。Redis也支持在Solaris派生的系统(如SmartOS)上进行工作,但仅尽最大努力提供支持,没有官方对Windows版本的支持。提供Java、C/C++、C#、PHP、Python、JavaScript、Perl、Ruby、Erlang、Object-C等客户端。

特点

  • 键值(key-value)型,value支持多种不同的数据结构,功能丰富
  • 单线程,每个命令具有原子性
  • 低延迟,速度快(基于内存、单线程无上下文切换、IO多路复用、渐进式ReHash)
  • 支持数据持久化操作
  • 支持主从复制、哨兵机制、集群,提升容错率

Redis数据结构

String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型。key一定是String且不为空。其value是String时,根据字符串的格式不同,又可以分成三类:string、int、float,其中int和float可以做自增和自减操作。String类型的相关操作命令如下:

命令 解释 命令 解释
SET 添加或者修改已经存在的String类型键值对 INCRBY 让一个int的value自增指定步长
GET 根据key获取String类型的value INCRBYFLOAT 让一个float的value自增指定步长
MSET 批量添加多个String类型的键值对 SETNX 添加一个String类型的键值对,前提是这个key不存在,否则不执行
MGET 批量获取多的String类型键值对 SETEX 添加一个String类型的键值对,并且指定有效期
INCR 让一个int的value自增1,如果不在则设置key的value为0 decr 让一个int的value自减1,如果不在则设置key的value为0
decrby 让一个int的value自减指定步长 append 如果 key 已经存在,并且 value 是字符串,那么 append 命令会将指定的value值拼接到字符串后面
getrange 获取 key 对应的字符中的子串,双侧闭区间 setrange 覆盖字符串的一部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set age 12               // set key value
get age // get key
mset k1 v1 k2 v2 k3 v3 //mset key value [key value ...]
mget age k1 k2 k3 //mget key [key ...]
incr age //incr key
decr age //decr key
incrby age 2 //incrby key increment
decrby age 2 //decrby key decrease
set score 10.1
incrbyfloat score 0.5 //incrbyfloat key increment
setnx name jack //相当于set name jack nx
append name QQQ
get name //jackQQQ
getrange name 0 4 //jackQ
getrange name 0 -2 //jackQQ
setrange key 0 tom //setrange key offset value
get name //tomkQQQ
setex sex 10 female //setex key ttl value

Hash类型

Hash类型即为散列哈希表,与Java中的HashMap类似

命令 解释 命令 解释
HSET 添加或者修改hash类型的key的field的值 HKEY 获取一个hash类型中的所有field
HGET 获取一个hash类型的key的field的值 HVALS 获取一个hash类型中的所有value
HMSET 批量添加多个hash类型的field值 HINCRBY 让一个hash类型的key的字段自增指定步长
HMGET 批量获取多的hash类型field值 HSETEX 添加一个hash类型的key的field值,前提是这个field不存在否则不执行
HGETALL 获取一个hash类型中的所有field和value
1