基本介绍
- NoSql 数据库,非关系型数据库(REmote DIctionary Server 远程字典服务器)
- redis 性能非常高,单机能够达到 15w qps,通常适合做缓存,也可以持久化。
- 免费开源,高性能的(key/value)分布式数据库,基于内存运行,并支持持久化的 NoSQL 数据库,也称为数据结构服务器
官网: https://redis.io/ http://www.redis.cn/
下载地址: https://github.com/tporadowski/redis/releases
文档: http://redisdoc.com/
Redis 优势
- 性能极高 –- Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 –- Redis支持二进制案例的 Strings,Lists,Hashes,Sets及Ordered Sets数据类型操作。
- 原子—Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持publish/subscribe,通知,key过期等等特性。
安装
Redis 五大数据类型
String (字符串)
- Hash(哈希)
- List(列表)
- Set(集合)
- zset(sorted set 有序集合)
Redis的基本使用:
说明: Redis安装好后,默认有16个数据库,初始默认使用0号库,编号是0…15
1.添加key-val [set]
1.查看当前redis的 所有key [keys *]
2.获取key对应的值. [get key]
3.切换redis 数据库 [select index]
4.如何查看当前数据库的key-val数量 [dbsize]
5.清空当前数据库的key-val和清空所有数据库的key-val [fushdb flushal]
fushdb: 清空当前库的数据
flushal: 清空所有库的数据
set key value
get key
del key
dbsize
setex (set with expire) 键秒值
set key second value
mset 同时设置一个或多个 key-value 对(如果某个给定的 key 已经存在,新值会覆盖原来的就值)127.0.0.1:6379> setex name 10 xiao
OK
127.0.0.1:6379> get name
"xiao"
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>
mset key value [key value]
mget key [key] 同时获取多个值
Hash (哈希,类似于golang里面的map),键值对集合。
hset/hget/hmset/hmget/hgetall/hdel/hexists
是一个 string 类型 field 和 value 的映射表,适合存储对象。存储到redis之后,取出来都是对象。
var user1 map[string]string
hmset 同时存储多个键值对127.0.0.1:6379> hset user name xiao
(integer) 1
127.0.0.1:6379> hset user age 12
(integer) 1
127.0.0.1:6379> hget user name
"xiao"
127.0.0.1:6379> hget user age
"12"
127.0.0.1:6379> hgetall user
1) "name"
2) "xiao"
3) "age"
4) "12"
hlen key 查看 hash key 里面有多少个字段127.0.0.1:6379> hmset book name js page 200 auther xixi
OK
127.0.0.1:6379> hmget book name page auther
1) "js"
2) "200"
3) "xixi"
127.0.0.1:6379> hmget book name page
1) "js"
2) "200"
127.0.0.1:6379> hlen book
(integer) 3
127.0.0.1:6379> hexists book age
(integer) 0
127.0.0.1:6379> hexists book name
(integer) 1
127.0.0.1:6379> hdel book name
(integer) 1
127.0.0.1:6379> hget book
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hgetall book
1) "page"
2) "200"
3) "auther"
4) "xixi"
127.0.0.1:6379>
hexists key field 查看hash里某个键是否存在某个属性字段List本质是个链表
元素有序、可重复
lpush/rpush/lrange/lpop/rpop/del
注存取顺序
如果值全部移除,那么对应的键也就消失了
lindex
llen key
// 左边插入
lpush key value [value...]
lrange key start stop
lrange key 0 -1 // 全部取出, 0 表示第一个, -1 表示倒数第一个, [start, stop]
// 右边插入
rpush key value [value...]
rrange key start stop
127.0.0.1:6379> lpush herolist aaa bbb ccc
(integer) 3
127.0.0.1:6379> lrange herolist 0 -1
1) "ccc"
2) "bbb"
3) "aaa"
127.0.0.1:6379> rpush herolist 111 222 333
(integer) 6
127.0.0.1:6379> lrange herolist 0 -1
1) "ccc"
2) "bbb"
3) "aaa"
4) "111"
5) "222"
6) "333"
127.0.0.1:6379>lpop herolist
"ccc"
127.0.0.1:6379> lrange herolist 0 -1
1) "bbb"
2) "aaa"
3) "111"
4) "222"
5) "333"
127.0.0.1:6379> rpop herolist
"333"
127.0.0.1:6379> rpop herolist
"222"
127.0.0.1:6379> lrange herolist 0 -1
1) "bbb"
2) "aaa"
3) "111"
127.0.0.1:6379> del herolist
(integer) 1
127.0.0.1:6379> lrange herolist 0 -1
(empty list or set)
127.0.0.1:6379>
Set 集合
set 是string 类型的无序集合,底层是 Hash Table 数据结构。
字符串元素是无序的,而且不能重复。
sadd key member [member...] // 创建 添加 元素
smembers key // 查看所有的元素
sismember key member // 判断是否存在某个元素
srem key member [member...] // 删除元素
127.0.0.1:6379> smembers email
1) "haha@163.com"
2) "xixi@qq.com"
3) "xiao@126.com"
4) "11@abc.com"
5) "22@qq.com"
127.0.0.1:6379> sadd email aa@qq.com
(integer) 1
127.0.0.1:6379> smembers email
1) "11@abc.com"
2) "xixi@qq.com"
3) "haha@163.com"
4) "22@qq.com"
5) "aa@qq.com"
6) "xiao@126.com"
127.0.0.1:6379> sismember email 11@qq.com
(integer) 0
127.0.0.1:6379> sismember email 11@abc.com
(integer) 1
127.0.0.1:6379> srem email 11@abc.com
(integer) 1
127.0.0.1:6379> smembers email
1) "xixi@qq.com"
2) "haha@163.com"
3) "22@qq.com"
4) "aa@qq.com"
5) "xiao@126.com"
127.0.0.1:6379>