radis是一个中间件,放置于服务器内存里,所以非常快,类似于hashmap,是key-value格式的
一种纯种数据库,没有关联表,纯纯的k-v
<!--集成redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>
<!--session共享-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
redis命令行客户端
语法:redis-cli [options] [commonds]
options:
1. -h 127.0.0.1 指定要链接的redis节点的ip地址,默认是127.0.0.1
2. -p 6379 指定要链接的redis结点的端口 默认是6379
3. -a password 指定redis的访问密码
其中commonds就是redis的操作命令
pingL与redis服务端做心跳测试 ,服务端正常返回pong
不指定commond时,会进入redis-cli的交互控制台
这种指定密码很危险 ,可以连上以后通过 AUTH password 来校验密码
Redis数据结构介绍
Redis是一个k-v的数据库 key一般是String类型,不过value多种多样
常见有
基本类型
1. String
2. Hash 哈希表
3. List 链表
4. Set 无序集合
5. SortedSet: 有序集合
特殊类型
6. GEO: 坐标
7. BitMap:
8. HyperLog:
可以在cli里面用 help @类型 查看命令
Redis通用命令
help @generic
1. KEYS 后面跟模板
根据模板查找key
如
KEYS * # 查找所有
KEYS a* # 查找以a开头
查看复合模版的所有key,不建议在生产环境上使用
2. DEL:删除一个指定的key
语法 DEL key [key...]
写一个删一个,写多个删多个,返回删除数量
3. EXISTS key [keys]
查看是否存在,可以一个可以多个,返回存在的数量
4. EXPIRE:给key一个有效日期,有效期到了key就会自动删除
语法: EXPIRE key time
默认是 -1 表示永久有效
如果时间到了就是-2
5. TTL 查看一个key的剩余有效期,
String类型
redis最简单的存储类型
其value时字符串,不过根据字符串格式不同又可以分成三类
1. string 普通字符串
2. int 整数类型,可做自增自减
3. float 浮点类型 可做自增自减
最大不超过512m
String常见命令
1. SET:添加或修改已经存在的一个String类型的键值对
2. GET:根据key获取String类型的value
3. MSET:批量添加多个String类型的键值对
4. MGET:根据多个key获取多个String类型的value
5. INCR:让一个整形的key自增1
6. INCRBY:让一个整型的key自增并指定步长,如:incrby num 2 让num自增2
7. INCRBYFLOAT:让一个浮点型的数字自增并制定步长
8. SETNX:添加一个String类型的键值对,前提是这个key不存在
9. SETEX:添加一个String类型的键值对,并指定其有效期
KEY的结构:Redis的key允许多个单词形成层级结构,多个单词之间用':'隔开,如
项目名:业务名:类型:id
如果Value是一个java对象,例如有一个User,则可以将对象序列化为JSON字符串后存储
如
|key | value|
|---——|------|
| zs:user:1 | {"id":1,"name":"tom","age":21} |
| zs:project:1 | {"id":1,"name":"jack","price":"1999"} |
Hash类型
Hash类型,也叫散列,其value是个无须字典,类似于java中的hashMap结构
如:String 结构存json很费劲
而hashMap存就方便很多
它的VALUE 分为 field 与 value ,一个KEY 的 VALUE 可以有多个字段和值
常见命令
1. HSET key field value : 添加或者修改hash类型key的field的值
2. HGET key field: 获取一个hash类型key的field的值
3. HMSET key [field value ...]: 批量添加多个hash类型的key的fied的值
4. HMGET key [field ...]: 批量获取多个hash类型key的field的值
5. HGETALL key: 获取一个hash类型的key中的所有的field和value
6. HKEYS: 获取一个hash类型的key中的所有的field
7. HVALS: 获取一个hash类型的key中的所有value
8. HINCRBY: 让一个hash类型key字段值自增并指定步长
9. HSETNX: 添加一个hash类型的key的field值,前提是不存在,否则不执行
List类型
Redis中的List类型与Java中的LinkedList类似,是个双向链表,支持正反查询
特点:有序,元素可重复,插入删除快,查询慢
常见命令
1. LPPUSH key element...:像列表左侧插入一个或多个元素
2. LPOP key:溢出并返回列表左侧的第一个元素,如果没有则返回bil
3. RPUSH key element:向列表右侧插入一个或多个元素
4. RPOP key:移除并返回列表右侧的第一个元素
5. LRANGE key star end:返回一段角标范围内的所有元素
6. BLPOP和BRPOP:与LPOP和RPOP类似,只不过再没有元素时等待指定时间,而不是返回nil
Set类型
Redis的Set结构与Java中的HashSet累死,可以看作时一个value为null的HashMap,因为是ha哈希表所以有以下特征:无需,元素不重复,查找快,支持交集,并集,差集等功能
常见命令:
单个集合:
1. SADD key member...: 向set中添加一个或多个元素
2. SREM key member...: 溢出set中的指定元素
3. SCARD key:返回set中的元素个数
4. SISMEMBER key member:判断一个元素是否在set中
5. SMEMBERS:获取set中的所有元素
多个集合
1. SINTET key1 key2 ...:求n个集合之间的交集
2. SDIFF key1 key2...:求k1对于后几个的差集
3. SUNION key1 key2...:求并集
SortedSet
Redis的SortedSet是一个可排序的set集合,与java中的TreeSet有些类似,但底层数据结构却差别很大,SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表
SortSet具备特性: 可排序,不重复,查询快
因为SortedSet的可排序特性,经常被用来实现排行榜这样的工能
常见命令
1. ZADD key score member:添加一个或多个元素到sortedset,如果已存在则更新其score值
2. ZREM key member:删除一个指定元素
3. ZSCORE key member:获取sortedset中的指定元素的score值
4. ZRANK key member:获取sortedset中的指定元素的排名
5. ZCARD key:获取sortedset中的元素个数
6. ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
7. ZINCRBY key increment member:让sortedset中的指定元素自增,布长为指定的increment值
8. ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
9. ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内元素
10. ZDIFF,ZINTER,ZUNION:差集,交集,并集
ps:所有的排名默认都是升序,如果要降序则再命令的Z后面家REV即可