一.认识Redis
Redis诞生于2009年,是一个基于内存的键值型NoSQL数据库
特征:
1.键值型,value支持多种不同数据结构,功能丰富
2.单线程,每个命令具有原子性
3.低延迟,速度快(基于内存,IO多路复用,良好的编码)
4.支持数据持久化
5.支持主从集群,分片集群
6.支持多语言客户端
二.最最最基本的命令
1.使用redis命令
(1)redis-cli -h ip地址 -p 端口 -a 密码
(2)redis-cli -h ip地址 -p 端口
auth 密码

2.添加&获取
Set key value
Get key
3.切换库
Select 几号库
三.常见的命令
1.Redis数据结构介绍
Redis 是一个key-value的数据库,key一般是Stirng类型,不过value的类型多种多样

2.redis通用命令
通用命令是部分数据类型的,都可以使用的指令,常见的有:
Help [命令] 查看命令的具体用法
Keys:查看符合模板的所有可以 keys * 查看所有的key key a* 查看a开头的key
Del:删除一个指定的key
Exists:判断 key 是否存在
Expire 给一个key 设置有效期,有效期到期该key会被自动删除
Ttl:查看一个key剩余有效期
3.String类型
String类型,也就是字符串类型,是Redis中最简单的存储存储类型
其value是字符串,不过根据字符串的格式不同又可以分为3类
Sting:普通字符串
Int:整数类型,可以做自增,自减的操作
Float:浮点类型可以做自增,自减的操作
不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同,字符串类型的最大空间不能超过512M
String常见的命令有:
(1) set:添加或者修改已经存在的一个String类型的键值对 例如:set key value
(2)Get:根据key获取String类型的value 例如: get key
(3)Mset:批量添加多个Sting 类型的键值对 例如 mset key1 value1 key2 value2
(4)Mget:根据多个key获取多个Sting类型的value 例如 mget key1 key2 ...
(5)Incr 让一个整形的key自增1 incr key
(6)Incrby 让一个整形的key自增并指定步长 例如: incrby key 步长(负数就是减)
(7)Ubcrbyfloat: 让一个浮点类型的数字自增指定步长 注意:浮点只能指定
(8)Setnx: 添加一个String类型的键值对,前提是这个key不存在,否则不执行 (其实就是不能覆盖的意思) 例如 setnx key value
(9)Setex:添加一个Sting类型的键值对,并且指定有效期 例如 setex key时间(单位:s) value
4.Hash类型
Hash类型,也叫散列,其value是一个无序字典,类似于java中HashMap结构
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:

Hash的常见命令有:
- Hset:添加或者修改hash类型key的field的值 例如: hset key filed value
- Hget:获取一个hash类型key的field的值 例如: hget key filed
- Hmset:批量添加多个hash类型key的field的值 例如: hmset key filed1 value1 filed2 value2.............
- Hmget:批量获取多个hash类型key的field的值 例如:hmget key filed1 filed2
- Hgetall:获取一个hash类型的key中所有的field和value 例如: hgetall key
- Hkeys:获取一个hash类型的key中所有的field 例如 hkeys key
- Hvals:获取一个hash类型的key中所有的value 例如 hvals key
- Hincrby:让一个hash类型key的字段值自增并指定步长 例如: hincrby key filed 2(步长)
- Hsetnx:添加一个hash类型key的field值,前提是这个field不存在,否则不执行,相当于就是不能覆盖值
5.List类型
Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构,既可以支持正向检索和也可以支持反向检索
特征也与LinkedList类似: 有序 元素可以重复 插入和删除快 查询速度一般
List的常见命令有:
- Lpush:向列表左侧插入一个或多个元素 例如 lpush key value1 value2...
- Lpop:移除并返回列表左侧的第一个元素,没有则返回nil 例如 lpop key
- Rpush:向列表右侧插入一个或多个元素 例如 rpush key value1 value2...
- Rpop:移除并返回列表右侧的第一个元素,没有则返回nil 例如 rpop key
- Lrange key star end :返回一段角标范围内的所有元素 例如: lrange key 1 4
- Blpop和brpop:与lpop和rpop类似,只不过在没有元素时等待指定元素时间,而不是直接返回nil 例如: blpop key 100(单位:s)
小思考:

6.set类型:
Redis的set结构与java中的HashSet类似,可以看做是一个value为null的HashMap,因为也是一个hash表,因此具备与hashSet类似的特征: 无序 元素不可重复 查找快 支持交集,并集,差集等功能
常见命令:
- Sadd:向set中添加一个或多个元素 例如 sadd key value1 value2
- Srem:移除set中指定的元素 例如:srem key value
- Scard:返回set中元素的个数 例如 :scard key
- Sismember :判断一个元素是否存在于set中 例如: sismember key value
- Smembers:获取set中的所有元素 例如 smembers key
- Sinter: 求key1与key2的交集 例如: sinter key1 key2
- Sdiff: 求key1与key2的差集 例如: sdiff key1 key2
- Sunion: 求key1与key2的并集 例如: sunion key1 key2 (因为是set所以合并后相同的元素只会出现一次)

7.SortedSet
Redis的SortedSet是一个可排序的set集合,与java中的TreeSet有些类似.但底层数据结构却差别很大,SortedSet中的每个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表
SortedSet具备下列特性: 可排序,元素不重复,查询不重复
常见命令:
- zadd:添加一个或多个元素到sorted set,如果已经存在则更新其score值 例如:zadd key1 85(分数) value1 90(分数) value2 ........
- Zrem:删除sorted set中的一个指定元素 例如: zrem key value
- Zscore:获取sorted set中指定元素的score值 例如:
- Zrank:获取sorted set中指定元素的排名 例如:zrank key value
- Zcard:获取sorted set中元素个数 例如: zcard key
- Zcount:统计score值在给定范围内的所有元素个数 例如 zcount key 0(最小值) 80(最大值)
- Zincrby:让sorted set中的指定元素自增,步长为指定的increment值 例如:zincrby key 2(步长) value
- Zrange:按照score排序后,获取指定排名范围内的元素 例如: zrange key 0(min) 2(max)
- Zrangebyscore:按照socre排血后,获取指定score范围内的元素 例如:zrangebyscore key 0(最小值) 80(最大值)
- Zdiff,zinter,zunion:求差集,交集,并集 例如:zinter key1 key2
注意:所有的排名默认都是升序的,如果要降序则在命令Z后面添加rev即可
















