基本介绍
- 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 xiaoOK127.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) 1127.0.0.1:6379> hset user age 12(integer) 1127.0.0.1:6379> hget user name"xiao"127.0.0.1:6379> hget user age"12"127.0.0.1:6379> hgetall user1) "name"2) "xiao"3) "age"4) "12"
hlen key 查看 hash key 里面有多少个字段127.0.0.1:6379> hmset book name js page 200 auther xixiOK127.0.0.1:6379> hmget book name page auther1) "js"2) "200"3) "xixi"127.0.0.1:6379> hmget book name page1) "js"2) "200"127.0.0.1:6379> hlen book(integer) 3127.0.0.1:6379> hexists book age(integer) 0127.0.0.1:6379> hexists book name(integer) 1127.0.0.1:6379> hdel book name(integer) 1127.0.0.1:6379> hget book(error) ERR wrong number of arguments for 'hget' command127.0.0.1:6379> hgetall book1) "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 stoplrange 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) 3127.0.0.1:6379> lrange herolist 0 -11) "ccc"2) "bbb"3) "aaa"127.0.0.1:6379> rpush herolist 111 222 333(integer) 6127.0.0.1:6379> lrange herolist 0 -11) "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 -11) "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 -11) "bbb"2) "aaa"3) "111"127.0.0.1:6379> del herolist(integer) 1127.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 email1) "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) 1127.0.0.1:6379> smembers email1) "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) 0127.0.0.1:6379> sismember email 11@abc.com(integer) 1127.0.0.1:6379> srem email 11@abc.com(integer) 1127.0.0.1:6379> smembers email1) "xixi@qq.com"2) "haha@163.com"3) "22@qq.com"4) "aa@qq.com"5) "xiao@126.com"127.0.0.1:6379>



