redis官方给Java提供的工具包是Jedis,所以Springboot用的也是Jedis
Springboot中提供了一个RedisTemplate模板了,可以方便操作各种redis基础数据
下面我们首先在springboot中加入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
然后去配置文件加入redis的基础配置内容
server:
port: 40001
spring:
application:
name: SOLATEST
redis:
host: xx.xx.xx.xx
port: 6379
password: 47
timeout: 1000
database: 0
timeout是断线重连 1000毫秒
database指使用0号库
但是要想连接redis,最好的做法是用连接池完成
server:
port: 40001
spring:
application:
name: SOLATEST
redis:
host: xx.xx.xx.xx
port: 6379
password: qqqqq
timeout: 1000
database: 0
pool:
max-active: 10
max-idle: 8
min-idle: 2
max-wait: 100
配置完成后我们就可以去敲代码了
用很简单 自动注入到Redistemplate就可以
@Autowired
private RedisTemplate<String, String> redistemplate;
@GetMapping(value="setredis")
@ApiOperation(value = "sola最吊测试redis")
public Map<String, Object> setRedis(String key){
Map<String, Object> map = new HashMap<>();
redistemplate.opsForValue().set("sola1121",key );
String value = redistemplate.opsForValue().get("sola1121");
map.put("data", value);
return map;
}
然后兴致冲冲的去运行,然后报错 爽歪歪
"timestamp": "2018-10-18T03:31:35.154+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to xx.xx.xx.xx:6379",
"path": "/sola/setredis"
搞了半天密码貌似是密码不对,我去看看服务器的密码(暂时密码设置为空就能访问到了)
服务器设置了密码
但是很二的是设置了还是被注释的设置了有个卵用。。不想说话
改好之后就可以去测试一下可以顺利设置值和获取值就算跑通了
这里还有一个值递加的命令 例如i++ 每执行一次增加一个数
i--
拼接字符串
下面来搞重点来了,存贮其他4种 数据类型的小示例
——————————————————————————————————————————————————
redis数据类型hash(Map)
命令行操作
同时设置多个并多度多个键值对
127.0.0.1:6379> hmset jsession pass 123456 age 99 money 3000
OK
127.0.0.1:6379> hmget jsession username pass age money
1) "sola"
2) "123456"
3) "99"
4) "3000"
取出全部数据
127.0.0.1:6379> hgetall jsession
1) "username"
2) "sola"
3) "pass"
4) "123456"
5) "age"
6) "99"
7) "money"
8) "3000"
hash删除某个里面的键值对
127.0.0.1:6379> hdel jsession pass
(integer) 1
——————————————————————————————————————————————————————
redis数据类型List(重点)
该类型特点是只能两端加数据
头部插数据
127.0.0.1:6379> lpush solalist 1 2 3 4 5 6 7
(integer) 7
查看list类型数据
lrange key start end:获取链表中从start到end的元素的值,start、end可 为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推…
127.0.0.1:6379> lrange solalist 0 5
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
127.0.0.1:6379> lrange solalist 0 -1
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lrange solalist 0 2
1) "7"
2) "6"
3) "5"
也看出特点来了后进先出,先进后出
从后面添加数据
127.0.0.1:6379> rpush solalist 8 9 10 11 12
(integer) 12
首弹值(取出第一个值并从集合种删除该值),7在集合就不存在了
127.0.0.1:6379> lpop solalist
"7"
尾弹值
127.0.0.1:6379> rpop solalist
"12"
获取集合长度
127.0.0.1:6379> llen solalist
(integer) 10
从头删除值(示例 是从头开始 删除两个值为a的)
从尾巴删除(示例删除 1 个b)
redis数据类型set
set添加数据
127.0.0.1:6379> sadd myset a b c d
(integer) 4
获取set全部值
127.0.0.1:6379> smembers myset
1) "d"
2) "b"
3) "a"
4) "c"
我们就可以来试试加入重复值会如何
127.0.0.1:6379> sadd myset a e
(integer) 1
127.0.0.1:6379> smembers myset
1) "b"
2) "a"
3) "c"
4) "e"
5) "d"
看到了,加入a和e只有e进去了,并且也发现set是无序的
删除set内为a的元素
127.0.0.1:6379> srem myset a
(integer) 1
判断参数中指定成员是否在该set中,1表示存在,0表示不存在或者key本身就不存在
127.0.0.1:6379> sismember myset a
(integer) 0
127.0.0.1:6379> sismember myset b
(integer) 1
示例中查询了 a 显示了不存在(因为刚才删了) , b存在返回了1
srandmember key:随机返回set中的一个成员
sdiff sdiff key1 key2:返回key1与key2中相差的成员,而且与key的顺序有 关。即返回差集。
sdiffstore destination key1 key2:将key1、key2相差的成员存储在 destination上
sinter key[key1,key2…]:返回交集。
sinterstore destination key1 key2:将返回的交集存储在destination上
sunion key1、key2:返回并集。
sunionstore destination key1 key2:将返回的并集存储在destination上
——————————————————————————————————————————————————
存储sortedset
Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出 现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分 数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然 而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score) 却是可以重复的。
在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为 集合中成员数量的对数。由于Sorted-Sets中的成员在集合中的位置是有序的,因此, 即便是访问位于集合中部的成员也仍然是非常高效的。事实上,Redis所具有的这一 特征在很多其它类型的数据库中是很难实现的,换句话说,在该点上要想达到和Redis 同样的高效,在其它数据库中进行建模是非常困难的。
例如:游戏排名、微博热点话题等使用场景。
个人目前理解,这个比Set多一个权重的参数,sortedset也是根据权重参数来排序的
添加元素
127.0.0.1:6379> zadd mysortedset 100 a 80 b 60 c 50 d 30 e
(integer) 5
获取元素(按范围取)
127.0.0.1:6379> zrange mysortedset 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
这样看出还没有按分数排序,加入withscores按分数查询(好吧之前也排序了,看来默认是按从小到大排序的)
127.0.0.1:6379> zrange mysortedset 0 -1 withscores
1) "e"
2) "30"
3) "d"
4) "50"
5) "c"
6) "60"
7) "b"
8) "80"
9) "a"
10) "100"
按从大到小排序 ,也可以加入withscores参数显示分数
127.0.0.1:6379> zrevrange mysortedset 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
获得成员数量
127.0.0.1:6379> zcard mysortedset
(integer) 5
根据成员查分数
127.0.0.1:6379> zscore mysortedset c
"60"
删除成员
127.0.0.1:6379> zrem mysortedset e
(integer) 1
————————————————————————————————————————————————————
Keys的通用操作
查询所有的key
127.0.0.1:6379> keys *
1) "mysortedset"
2) "sola1121"
3) "jsession"
4) "solalist"
5) "myset"
查询key的前缀带my的
127.0.0.1:6379> keys my*
1) "mysortedset"
2) "myset"
删除指定key
127.0.0.1:6379> del key1 key2 key3 [key ...]
判断key是否存在,1存在,0表示不存在
127.0.0.1:6379> exists myset
(integer) 1
重命名keyname
127.0.0.1:6379> rename myset solaset
OK
设置key的过期时间 单位秒
127.0.0.1:6379> expire solaset 50
(integer) 1
获取key所剩余的超时时间,如果没有设置超时,返回-1,如果返回-2表示已超时或者不存在
127.0.0.1:6379> ttl solaset
(integer) -2
查看key存储的类型
127.0.0.1:6379> type jsession
hash
127.0.0.1:6379> type solalist
list
127.0.0.1:6379> type sola1121
string
————————————————————————————————————————————————————
Redis的移库操作
1.redis的特性多数据库
一个redis实例可以包括多个数据库,客户端可以指定连接某个redis实例的那个数据库,就好比一个mysql中创建多个数据
客户端连接时指定连接哪个数据库
一个redis实例最多可以提供16个数据库,下标从0到15,客户端默认连接第0号,也可以通过select选择连接哪个数据库
如下连接1号库
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> key *
(error) ERR unknown command `key`, with args beginning with: `*`,
127.0.0.1:6379[1]> keys *
(empty list or set)
————————————————————————————————————————————————
消息订阅与发布
————————————————————————————————————————————————
Redis的事务
————————————————————————————————————————————————————
Redis 持久化
默认就是RDB持久化
——————————————————————————————————————————————————————