String 数据结构是简单的key-value类型,value其实不仅仅是String,也可以是数字,是包含很多种类型的特殊类型,并且是二进制安全的.比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等.
1.1 常用命令:设值:set name zhangsan(说明:多次设置name会覆盖)
setnx name lx:(not exist)如果name不存在,则设值;如果name存在,则不设值并返回0;
setex name 10 lx:(expired)设置name的值为lx,过期时间为10秒,10秒后name清除(key也清除)
setrange string range value 替换字符串.
取值: get name
删值: del name
批量写: mset k1 v1 k2 v2 ...
批量读: mget k1 k2 k3
一次性设值和读取(返回旧值,写上新值):getset name lx
数值类型自增减: incr,decr,incrby,decrby
字符串拼接: append key value
字符串长度: strlen key
1.2 命令演示:


setrange pw 1 user 将key为pw的值从索引为1的开始进行替换,后面的由原来的字符补齐.
2. 操作Hash型的命令
Hash类型是String类型的field和value的映射表,或者说是一个String集合.它特别适合存储对象,相比较而言,将一个对象类型存储在Hash类型要存储在String类型里占用更少的内存空间,并方便整个对象的存取.
2.1 常用命令设值: hset hashname field value(hset是设值命令,hashname是集合名字,field是字段名,value是值)
取值: hget hashname field
批量设置: hmset hashname field1 value1 field2 value2 ….
批量取值: hmget hashname field1 field2 ...
hsetnx: 和setnx大同小异,指定字段增加指定值
hexists: 是否存在key,如果存在返回,不存在返回0
删除: hdel 删除指定的hash的field
hlen,返回hash集合里的所有的键数值(size)
hkeys: 返回hash里所有的字段
hvals: 返回hash的所有value
hgetall: 返回hash里所有的key和value
2.2 命令演示:

List类型是一个链表结构的集合,其主要功能有push、pop、获取元素等.更详细的说,List类型是一个双端链表的结构,我们可以通过相关的操作进行集合的头部或者尾部添加和删除元素,List的设计非常简单精巧,即可以作为栈,又可以作为队列,满足绝大多数的需求.
3.1 常用命令:lpush: 从头部加入元素(栈,先进后出)
rpush: 从尾部加入元素(队列,先进先出)
linsert: 插入元素
lrange: 获取指定索引内的所有元素
lset: 将制定下表的元素替换掉
lrem: 删除元素,移除n个,返回删除的个数n
ltrim: 保留制定key的值范围内的数据
lpop: 从list的头部删除元素,并返回删除元素.
rpop: 从list的尾部删除元素,并返回删除元素
rpoplpush list1 lis2: 从list1尾部删除元素,并将被移除的元素添加到list2的头部,返回被移除的元素,可以实现MQ.
llen: 返回元素个数
lindex: 返回名称为key的list中index位置的元素
3.2 命令演示:

Set集合是String类型的无序集合,Set是通过HashTable实现的,对集合我们可以取交集、并集、差集.
4.1 常用命令:sadd: 向名称为key的set中添加元素,set集合不允许重复元素;
smembers: 查看set集合中的元素;
srem: 删除set集合的元素;
spop: 随机返回删除的key;
sdiff: 返回两个集合的不同元素(哪个集合在前面就以哪个集合为标准);
sdiffstore: 将返回的不同元素,存储到另一个集合里;
sdiffstore set4 set2 set3 将set2 set3的比较结果保存到set4中
sinter: 取交集;
sinterstore: 取交集后保存;
sunion: 取并集;
sunionstore: 取并集后保存;
smove: 从一个set集合移动到另一个set集合里;
sismember: 判断某个元素是否为集合中的元素,如果是,则返回1;如果不是,则返回0;
srandmember: 随机返回一个元素.
4.2 命令演示:


有序集合和集合一样也是String类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合中的成员进行从小到大的排序.
有序集合的成员是唯一的,但分数(score)却可以重复. 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1),集合中最大的成员数为 232 - 1 (4294967295,每个集合可存储40多亿个成员).
5.1 常用命令:zadd: 向有序集合中添加一个元素,该元素如果存在则更新顺序,如果分值相同元素不同会同时存在两个元素;
zrem: 删除zset名称key中的member元素;
zrank: 返回有序集合中指定成员的索引(从小到大排序);
zrevrank: 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序;
zcard: 返回集合里所有元素的个数;
zcount: 返回集合中score在给定区间中的数量;
zincrby key increment member: 有序集合中对指定成员的分数加上增量increment;
zrangebyscore key min max [WITHSCORES] [LIMIT]: 通过分数返回有序集合指定区间内的成员;
zremrangebyrank key start stop zese: 移除有序集合中给定的排名区间的所有成员;
zremrangebyscore key min max:移除有序集合中给定的分数区间的所有成员.
5.2 命令演示:

Redis 在 2.8.9 版本添加了 HyperLogLog 结构. Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的.
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 264 个不同元素的基 数,这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比.但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素.
6.1 什么是基数?比如数据集 {1,2,1,2} 那么这个数据集的基数集为 {1,2}, 基数(不重复元素)为2.基数估计就是在误差可接受的范围内,快速计算基数.
6.2 常用命令:PFADD 新增元素
PFCOUNT 获取基数的估计值
PFMERGE 将多个 HyperLogLog 合并为一个 HyperLogLog
6.3 命令演示:

keys * : 返回满足的所有键,可以模糊匹配;
exists: 是否存在指定的key,存在返回1,不存在返回0;
expire: 设置某个key的过期时间;
del: 删除某个key;
ttl: 查看剩余时间,当key不存在时,返回 -2;存在但没有设置剩余生存时间时,返回 -1,否则以秒为单位,返回 key 的剩余生存时间;
persist: 取消过去时间;
select: 选择数据库,数据库为0-15(默认一共16个数据库),设计成多个数据库实际上是为了数据库安全和备份;
move key dbindex: 将当前数据中的key转移到其他数据库;
randomkey: 随机返回一个key;
rename: 重命名key;
echo: 打印命令;
info: 查看数据库信息;
config get *: 实时传储收到的请求,返回相关的配置 ;
flushdb: 清空当前数据库;
flushall: 清空所有数据库.
1.1 命令演示:

Redis 事务可以一次执行多个命令,并且带有以下两个重要的保证:
1️⃣.事务是一个单独的隔离操作: 事务中的所有命令都会序列化、按顺序地执行;事务在执行的过程中,不会被其他客户端发送来的命令请求所打断.
2️⃣.事务是一个原子操作: 事务中的命令要么全部被执行,要么全部都不执行.
2.2 Redis事务执行过程:1️⃣.开始事务;
2️⃣.命令入队;
3️⃣.执行事务.
2.3 常用命令MULTI 开启事务
EXEC 执行事务
DISCARD 取消事务
2.4 命令演示

Redis 发布订阅(pub/sub)是一种消息通信模式.发送者(pub)发送消息,订阅者(sub)接收消息.
Redis 客户端可以订阅任意数量的频道. 下图展示了频道 channel1,以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系.

当有新消息通过 PUBLISH 命令发送给频道 channel1 时,这个消息就会被发送给订阅它的三个客户端:
subscribe [频道] 进行订阅监听;
publish [频道 发布内容] 进行发布消息广播.
1️⃣.分别克隆额外的2个会话,重命名client1、client2,而且三个会话都运行 redis的客户端:
2️⃣.分别在client1和client2进行订阅:
3️⃣.进行消息发布
Redis SAVE 命令用于创建当前数据库的备份.
4.2 恢复数据
如果需要恢复数据,只需将备份文件 (dump.rdb)移动到 redis 安装目录并启动服务即可.
因为redis速度相当快,所以一台比较好的服务器下,一个外部用户在一秒内可以进行15W次密码尝试,这意味着你需要设定非常强大的密码来防止暴力破解.
可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全.
5.1 常用命令vim /usr/local/redis-3.2.2/conf/redis.conf 编辑配置文件,修改: #reqirepass foobared 为: reqirepass redis(你的密码)

pkill redis-server 关闭redis-server
./bin/redis-server ./conf/redis.conf
启动redis
./bin/redis-cli 打开客户端

-
ping: 返回 pong;
-
sentinel masters: 列出所有被监视的主服务器,以及这些主服务器的当前状态;
-
sentinel slaves: 列出给定主服务器的所有从服务器,以及这些从服务器的当前状态;
-
sentinel get-master-addr-by-name: 返回给定名字的主服务器的 IP 地址和端口号.如果这个主服务器正在执行故障转移操作,或者针对这个主服务器的故障转移操作已经完成,那么这个命令返回新的主服务器的 IP 地址和端口号;
-
sentinel reset: 重置所有名字和给定模式 pattern 相匹配的主服务器.pattern 参数是一个 Glob 风格的模式重置操作清楚主服务器目前的所有状态,包括正在执行中的故障转移,并移除目前已经发现和关联的,主服务器的所有从服务器和 Sentinel.
-
sentinel failover: 当主服务器失效时,在不询问其他 Sentinel 意见的情况下,强制开始一次自动故障迁移(不过发起故障转移的 Sentinel 会向其他 Sentinel 发送一个新的配置,其他 Sentinel 会根据这个配置进行相应的更新).
-
http://redisdoc.com/
-
http://redis.io/commands
-
ping: 测试连接是否存活如果正常会返回 pong;
-
echo: 打印;
-
select: 切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值;
-
quit: 关闭连接(connection);
-
auth: 简单密码认证.
-
time: 返回当前服务器时间
-
client list: 返回所有连接到服务器的客户端信息和统计数据. 参见 http://redisdoc.com/server/client_list.html
-
client kill ip:port: 关闭地址为 ip:port 的客户端
-
save: 将数据同步保存到磁盘
-
bgsave: 将数据异步保存到磁盘
-
lastsave: 返回上次成功将数据保存到磁盘的Unix时戳
-
shundown: 将数据同步保存到磁盘,然后关闭服务
-
info: 提供服务器的信息和统计
-
config resetstat: 重置 info 命令中的某些统计数据
-
config get: 获取配置文件信息
-
config set: 动态地调整 Redis 服务器的配置(configuration)而无须重启,可以修改的配置参数可以使用命令 CONFIG GET * 来列出
-
config rewrite: Redis 服务器时所指定的 redis.conf 文件进行改写
-
monitor: 实时转储收到的请求
-
slaveof: 改变复制策略设置
-
psubscribe: 订阅一个或多个符合给定模式的频道 例如 psubscribe news.* tweet.*
-
publish: 将信息 message 发送到指定的频道 channel 例如 publish msg "good morning"
-
pubsub channels: 列出当前的活跃频道 例如 PUBSUB CHANNELS news.i*
-
pubsub numsub: 返回给定频道的订阅者数量 例如 PUBSUB NUMSUB news.it news.internet news.sport news.music
-
pubsub numpat: 返回客户端订阅的所有模式的数量总和
-
punsubscribe: 指示客户端退订所有给定模式.
-
subscribe: 订阅给定的一个或多个频道的信息,例如 subscribe msg chat_room;
-
unsubscribe: 指示客户端退订给定的频道.
-
exists(key): 确认一个 key 是否存在;
-
del(key): 删除一个 key;
-
type(key): 返回值的类型;
-
keys(pattern): 返回满足给定 pattern 的所有 key;
-
randomkey: 随机返回 key 空间的一个;
-
keyrename(oldname, newname): 重命名 key;
-
dbsize: 返回当前数据库中 key 的数目;
-
expire: 设定一个 key 的活动时间(s);
-
ttl: 获得一个 key 的活动时间;
-
move(key, dbindex): 移动当前数据库中的 key 到 dbindex 数据库;
-
flushdb: 删除当前选择数据库中的所有 key;
-
flushall: 删除所有数据库中的所有 key.
-
set(key, value): 给数据库中名称为 key 的 string 赋予值 value;
-
get(key): 返回数据库中名称为 key 的 string 的 value;
-
getset(key, value): 给名称为 key 的 string 赋予上一次的 value;
-
mget(key1, key2,…, key N): 返回库中多个 string 的 value;
-
setnx(key, value): 添加 string,名称为 key,值为 value;
-
setex(key, time, value): 向库中添加 string,设定过期时间 time;
-
mset(key N, value N): 批量设置多个 string 的值;
-
msetnx(key N, value N): 当且仅当所有给定键都不存在时,为所有给定键设置值;
-
incr(key): 名称为 key 的 string 增 1 操作;
-
incrby(key, integer): 名称为 key 的 string 增加 integer;
-
decr(key): 名称为 key 的 string 减 1 操作;
-
decrby(key, integer): 名称为 key 的 string 减少 integer;
-
append(key, value): 名称为 key 的 string 的值附加 value;
-
substr(key, start, end): 返回名称为 key 的 string 的 value 的子串.
-
rpush(key, value): 在名称为 key 的 list 尾添加一个值为 value 的元素;
-
lpush(key, value): 在名称为 key 的 list 头添加一个值为 value 的元素;
-
llen(key): 返回名称为 key 的 list 的长度;
-
lrange(key, start, end): 返回名称为 key 的 list 中 start 至 end 之间的元素;
-
ltrim(key, start, end): 截取名称为 key 的 list;
-
lindex(key, index): 返回名称为 key 的 list 中 index 位置的元素;
-
lset(key, index, value): 给名称为 key 的 list 中 index 位置的元素赋值;
-
lrem(key, count, value): 删除 count 个 key 的 list 中值为 value 的元素;
-
lpop(key): 返回并删除名称为 key 的 list 中的首元素;
-
rpop(key): 返回并删除名称为 key 的 list 中的尾元素;
-
blpop(key1, key2,… key N, timeout): lpop 命令的 block 版本;
-
brpop(key1, key2,… key N, timeout): rpop 的 block 版本;
-
rpoplpush(srckey, dstkey): 返回并删除名称为 srckey 的 list 的尾元素,并将该元素添加到名称为 dstkey 的 list 的头部.
-
sadd(key, member): 向名称为 key 的 set 中添加元素 member;
-
srem(key, member): 删除名称为 key 的 set 中的元素 member;
-
spop(key): 随机返回并删除名称为 key 的 set 中一个元素;
-
smove(srckey, dstkey, member): 移到集合元素;
-
scard(key): 返回名称为 key 的 set 的基数;
-
sismember(key, member): member 是否是名称为 key 的 set 的元素;
-
sinter(key1, key2,…key N): 求交集;
-
sinterstore(dstkey, (keys)): 求交集并将交集保存到 dstkey 的集合;
-
sunion(key1, (keys)): 求并集;
-
sunionstore(dstkey, (keys)): 求并集并将并集保存到 dstkey 的集合;
-
sdiff(key1, (keys)): 求差集;
-
sdiffstore(dstkey, (keys)): 求差集并将差集保存到 dstkey 的集合;
-
smembers(key): 返回名称为 key 的 set 的所有元素;
-
srandmember(key): 随机返回名称为 key 的 set 的一个元素.
-
hset(key, field, value): 向名称为 key 的 hash 中添加元素 field;
-
hget(key, field): 返回名称为 key 的 hash 中 field 对应的 value;
-
hmget(key, (fields)): 返回名称为 key 的 hash 中 field i 对应的 value;
-
hmset(key, (fields)): 向名称为 key 的 hash 中添加元素 field;
-
hincrby(key, field, integer): 将名称为 key 的 hash 中 field 的 value 增加 integer;
-
hexists(key, field): 名称为 key 的 hash 中是否存在键为 field 的域;
-
hdel(key, field): 删除名称为 key 的 hash 中键为 field 的域;
-
hlen(key): 返回名称为 key 的 hash 中元素个数;
-
hkeys(key): 返回名称为 key 的 hash 中所有键;
-
hvals(key): 返回名称为 key 的 hash 中所有键对应的 value;
-
hgetall(key): 返回名称为 key 的 hash 中所有的键(field)及其对应的 value.
-
ping: 返回 pong;
-
sentinel masters: 列出所有被监视的主服务器,以及这些主服务器的当前状态;
-
sentinel slaves: 列出给定主服务器的所有从服务器,以及这些从服务器的当前状态;
-
sentinel get-master-addr-by-name: 返回给定名字的主服务器的 IP 地址和端口号,如果这个主服务器正在执行故障转移操作,或者针对这个主服务器的故障转移操作已经完成,那么这个命令返回新的主服务器的 IP 地址和端口号;
-
sentinel reset: 重置所有名字和给定模式 pattern 相匹配的主服务器. pattern 参数是一个 Glob 风格的模式,重置操作清楚主服务器目前的所有状态,包括正在执行中的故障转移,并移除目前已经发现和关联的,主服务器的所有从服务器和 Sentinel;
-
sentinel failover: 当主服务器失效时,在不询问其他 Sentinel 意见的情况下,强制开始一次自动故障迁移(不过发起故障转移的 Sentinel 会向其他 Sentinel 发送一个新的配置,其他 Sentinel 会根据这个配置进行相应的更新).