一 redis的安装启动
启动services,在redis安装目录下运行
redis-server.exe redis.windows.conf
- 启动client
redis-cli.exe -h 127.0.0.1 -p 6379
二 redis的数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
- String(字符串):string是redis最基本的类型,一个key对应一个value。
127.0.0.1:6379> SET name "kevin"
OK
127.0.0.1:6379> GET name
"kevin"
- Hash(哈希):edis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象
127.0.0.1:6379> HMSET user:1 username rose age 20 addr guangdong
OK
127.0.0.1:6379> HGETALL user:1
1) "username"
2) "rose"
3) "age"
4) "20"
5) "addr"
6) "guangdong"
- List(列表):Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
127.0.0.1:6379> lpush lists apple orange
(integer) 2
127.0.0.1:6379> lrange lists 0 10
1) "orange"
2) "apple"
127.0.0.1:6379> lpush lists banana
(integer) 3
127.0.0.1:6379> lrange lists 0 3
(integer) 3
1) "banana"
2) "orange"
3) "apple"
127.0.0.1:6379>
- Set(集合):Redis的Set是string类型的无序集合。
127.0.0.1:6379> sadd arrays one tow
(integer) 2
127.0.0.1:6379> sadd arrays one
(integer) 0
127.0.0.1:6379> sadd arrays three
(integer) 1
127.0.0.1:6379> sadd arrays one four
(integer) 1
127.0.0.1:6379> smembers arrary
1) "four"
2) "tow"
3) "one"
4) "three"
- zset(sorted set:有序集合):Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
127.0.0.1:6379> zadd arrs 0 iOS
(integer) 1
127.0.0.1:6379> zadd arrs 0 android
(integer) 1
127.0.0.1:6379> zrange arrs 0 2
1) "android"
2) "iOS"
127.0.0.1:6379> zadd arrs 0 android
(integer) 0
127.0.0.1:6379> zrange arrs 0 2
1) "android"
2) "iOS"
三 Redis 键(key)
- set key value #新增一个key
- del key #在 key 存在时删除 key。成功返回1
- dump key #序列化给定 key ,并返回被序列化的值。
127.0.0.1:6379> dump mykey
"\x00\x03abc\a\x00&\x9e\xe5\xceI\xb8w\xf8"
- exists key #检查给定 key 是否存在
- expire key seconds #为给定 key 设置过期时间。
- persist key #移除 key 的过期时间,key 将持久保持。
- type key #返回 key 所储存的值的类型。
四 Redis 发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
我们先重新开启个 redis 客户端,然后在同一个频道 redisChat 发布消息,订阅者就能接收到消息
127.0.0.1:6379> PUBLISH redisChat "this is a test message"
(integer) 1
# 订阅者的客户端会显示如下消息
1) "message"
2) "redisChat"
3) "this is a test message"
五 Redis 事务
- Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。
- 事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
- 一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
- redis事务命令
DISCARD #取消事务,放弃执行事务块内的所有命令。
EXEC #执行所有事务块内的命令。
MULTI #标记一个事务块的开始。
- 举个栗子
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET bookname "redis"
QUEUED
127.0.0.1:6379> GET bookname
QUEUED
127.0.0.1:6379> SADD langue "iOS" "android" "java"
QUEUED
127.0.0.1:6379> SMEMBERS langue
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) "redis"
3) (integer) 3
4) 1) "android"
2) "java"
3) "iOS"