基本操作使用Redis

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持久化

 

 

 

 

 ——————————————————————————————————————————————————————

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值