背景
在公司的项目中用到了 redis 做缓存,前来补习一下基础知识
为什么使用 redis ,当然是因为关系型数据库使用不太方便,redis 是一种 key-value 存储系统,且其支持数据持久化,拥有高性能、高并发的特点(后面再详细解释)所以我们选择了 redis 。
英文网站
http://redis.io/
中文网站
http://www.redis.cn/
数据类型
value数据类型可以是字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型
基本数据操作
1、连接 redis 服务器
$ redis-cli -h host -p port -a password
例如:
$ redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
2、基本字符串操作
设置指定 key 的值
$ SET key value
获取指定 key 的值
$ GET runoobkey
删除指定 key 的值
$ DEL mykey redis
设置多个 key 的值
$ mset name zhoudandan age 18
获取多个 key 的值
$ mget name age
3、Hash基本操作
一般单个操作直接 set ,多个操作+m,more
新增一条 hash 数据 h1 ,h1 中数据有一组 filed 和 value
hset h1 name zhoudandan
新增一条 hash 数据 h2 ,h2 中数据有多组 filed 和 value
hmset h2 filed1 "value1" filed2 "value2" filed3 20 filed4 23000
查看 hash 数据 h2 的所有值
HGETALL h2
查看 hash 数据 h2 中的 filed1 对应的值
hget h2 filed1
删除hash 数据 h2 中的某组数据( filed1)
hdel h2 filed1
删除整个 hash 数据 h2
del h2
4、list 基本操作
## 从左边 向 list L1 中 push 元素
127.0.0.1:6379> lpush L1 v1 v2 v3
(integer) 3
## 从右边 向 list L1 中 push 元素
127.0.0.1:6379> rpush L1 w1 w2 w3
(integer) 6
## 从左边 展示list L1 中下标从 0到5的元素
127.0.0.1:6379> lrange L1 0 5
1) "v3"
2) "v2"
3) "v1"
4) "w1"
5) "w2"
6) "w3"
## 从左边 展示list L1 中所有元素(相当于下标从 0 到 -1)
127.0.0.1:6379> lrange L1 0 -1
## 从左边 对 list L1 进行 pop 元素
127.0.0.1:6379> lpop L1
"v3"
127.0.0.1:6379> lrange L1 0 -1
1) "v2"
2) "v1"
3) "w1"
4) "w2"
5) "w3"
## 从右边 对 list L1 进行 pop 元素
127.0.0.1:6379> rpop L1
"w3"
127.0.0.1:6379> lrange L1 0 -1
1) "v2"
2) "v1"
3) "w1"
4) "w2"
5、set 集合的基本操作
set 有去重的功能
## 向集合 S1 中添加元素 v1,v2
127.0.0.1:6379> sadd S1 v1
(integer) 1
127.0.0.1:6379> sadd S1 v2
(integer) 1
## 读取集合 S1 信息
127.0.0.1:6379> smembers S1
1) "v1"
2) "v2"
## 向集合 S1 中添加元素 v2
127.0.0.1:6379> sadd S1 v2
## 0 个成功,其实表示集合中有该元素,没有执行
(integer) 0
## 读取集合 S1 信息,发现没有重复的 v2
127.0.0.1:6379> smembers S1
1) "v1"
2) "v2"
5、zset 集合的基本操作
zset 有去重的功能,且内部进行了排序
使用场景比较少见。
PS : 在使用中被公司服务坑了 2 次
第一次是测试环境 redis 挂了,一个工具中依赖的数据源存储在 redis 中(当时选择存储在 redis 中是当时表结构待定,暂存),然后就导致整个服务中断,且数据不能恢复,因为本地数据有备份才得以挽救。
第二次是测试环境 redis 一个服务挂掉(需要晚上下班前才能处理) 导致各部分应用链接超时,测试环境网关服务中,路由信息缓存在 redis 中,因为数据量不大,决定去掉 redis 强依赖,将数据缓存在内存中。