本文介绍redis的使用

redis启动步骤

windows下安装redis下载网址 https://github.com/MicrosoftArchive/redis

安装完成后,到安装目录下运行
redis-cli.exe
shutdown
exit
redis-server.exe redis.windows.conf 获取配置 CONFIG GET *
设置端口 redis-server --port 6380
开启redis-cli运行 redis-cli -h 127.0.0.1 -p 6380
关闭redis redis-cli shutdown

说明

redis键命名规则,尽量采取database:tablenaem这种风格

5种数据类型
string 不能超过512MB
hash
list
set
zset 本文并没有涉及到分布式的,主要是因为本人,暂未涉及分布式的邻域 本文同时列出了如何在spring-boot中使用redis,使用的是jedis的链接客户端 spring-boot-starter-data-redis内置的是lettuce链接客户端,用法比较高级哈,jedis对于我这种菜鸡够用了

redis自增自减相关操作

incr counter                       等效于++counter
decr counter 等效于--counter
incrby counter 5 等效于counter+=5
decrby counter 6 等效于counter-=6
incrbyfloat counter 10.1 等效于counter+=10.1

redis string

set操作

set name "yejiawei"
set name yejiawei nx 键存在设置不成功
set name yejiawei xx 键必须存在设置才会成功
set name yejiawei ex 10 设置键10秒后过期
set name yejiawei px 5000 设置键5000毫秒后过期
setex name 10 yejiawei 设置键10秒后过期
setnx name yejiawei 键存在设置不成功
mset name yejiawei age 18 sex boy 批量设置值
getset name yejiawei 获取name的原值
setrange name 2 ja 在指定的位置设置值,从0开始
getrange name 2 3 获取第2和第3个索引位的字符

get操作

get name                           取键
mget name age sex 批量获取值

其他操作

append name haha                   追加值
strlen name 获取字符串长度

redis hash

set操作

hset obj:1 a 1                     为obj:1添加一对{a: 1}
hmset user:1 a 1 b 2 c 3 批量设置

get操作

hget obj:1 a                       获取obj:1中的 a
hmget user:1 a b c 批量获取

其他操作

hdel obj:1 a                       删除obj:1中的键
hlen obj:1 获取obj:1中键的个数
hexists user:1 a 判断是否存在
hkeys user:1 获取所有的键
hvals user:1 获取所有的键值
hgetall user:1 获取所有的键值对
hincrby user:1 a 10 自增整数
hincrbyfloat user:1 a 1.1 自增小数
hstrlen user:1 a 计算长度

redis list

set操作

rpush arr 1 2 3 4 5                设置列表
lpush arr 0 左插元素
rpush arr 10 右插元素
linsert arr before 1 100 在1之前插入100
linsert arr after 1 100 在1之后插入100
lset arr 1 10000 将索引位为1的设置成10000

get操作

lrange arr 0 -1                    从左到右列出元素
lindex arr -1 获取最后一个元素

其他操作

llen arr                           获取元素个数
lpop arr 左删一个元素
rpop arr 右删一个元素
lrem arr 1 5 从左到右删除一个5
lrem arr -1 5 从右到左删除一个5
lrem arr 0 5 删除所有的5
ltrim arr 0 2 删除索引0和2之间的所有元素

redis set

set元素不能重复,不能使用下标访问

set集合的相关操作

sadd myset a b c                        添加元素
srem myset a 删除元素
scard myset 计算元素个数
sismember myset a 判断元素是否在集合中
srandmember myset 2 随机返回2的元素
spop myset 随机弹出元素
smembers myset 查看集合中的元素
sinter myset myset1 取两集合交集
sunion myset myset1 取两集合并集
sdiff myset myset1 取两集合差集
sinterstore extramyset myset myset1 将两集合差集保存在extramyset中

redis 有序集合

不允许元素重复,允许设置分值排序

有序集合相关操作

zadd arr 100 name                       添加成员
zadd arr 101 name1 102 name2 103 name3
zadd arr nx 104 name4 必须不存在
zadd arr xx 104 name4 必须存在
zadd arr ch 104 name4 返回受影响元素个数
zadd arr incr 104 name4 自增
zcard arr 返回成员个数
zscore arr name1 获取成员分数
zrank arr name1 获取成员排名,从低到高
zrevrank arr name1 获取成员排名,从高到低
zrem arr name 删除
zincrby arr 1 name1 增加成员分数
zrange arr 1 3 withscores 返回排名是1和3的成员,从低到高
zrevrange arr 1 3 withscores 返回排名是1和3的成员,从高到低
zrangebyscore arr 100 105 withscores 返回指定分数之间的成员
zrangebyscore arr (100 +inf withscores 返回100正无穷之间的成员
zcount arr 100 105 返回指定分数之间元素个数
zremrangebyrank arr 1 2 删除排名1和2之间的元素,升序
zremrangebyscore arr 105 106 删除分数105和106之间的元素

键过期

expire name 10                          设置键10秒后自动删除
ttl name 查看键剩余存活时间,秒
pttl name 查看键剩余存活时间,豪秒
expireat hello 1469980800 秒级过期时间戳
pexpire key milliseconds 毫秒级过期时间戳
pexpireat key milliseconds-timestamp 毫秒级时间戳timestamp
persist name 删除键的过期设置,直接set键也会导致过期时间失效

迁移键

第一种:
move key db 将键迁移到其他数据库 第二种:
dump key 序列化键,源redis实例
例如序列化的结果 "\x00\byejiawei\a\x00\xe5\xaats\x9fI\xc2\x81"
restore key ttl value 复原键,目标redis实例,其中ttl为过期时间,设置为0表示没有过期时间
例如复原键,restore namer 0 "\x00\byejiawei\a\x00\xe5\xaats\x9fI\xc2\x81" 第三种:
migrate 127.0.0.1 6370 name 0 1000 将name迁移到6370端口的0号数据库超时时间为1000毫秒
migrate 127.0.0.1 6370 name 0 1000 replace 替换已经存在的值
migrate 127.0.0.1 6370 "" 0 5000 keys age arr sex 迁移多个键

其他键的操作

keys *                             列出所有键
keys [e]* 列出e开头的键
scan 0 也是遍历键,只不过它一次遍历一点,根据上一次执行返回的cursor执行下一次遍历
hscan obj:1 0 遍历hash中的键
sscan myset 0 遍历set中的键
zscan arr 0 遍历有序set中的键
dbsize 获取键的总个数
exists name 检查是否存在某个键,返回1或0
type name 返回键数据类型
object encoding arr 查看list集合,内部数据结构实现类型
del name 删除键,支持同时删除多个,以空格隔开
rename key newkey 重命名
renamenx key newkey 重命名,新键名不存在
randomkey 随机取一个键

数据库管理

多数据库


redis默认16个数据库,通过索引来切换数据库 select 10 进入第11个数据库 建议不要使用多数据库,可以使用多个redis实例搞定

数据库清除

flushdb 清除当前数据库
flushall 清楚所有数据库

redis配置

慢查询记录

slowlog-log-slower-than 10000     执行时间超过10000毫秒的命令会记录到日志中
slowlog-max-len 128 慢查询日志列表最大记录条数 config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite 将设置保存到配置文件中
slowlog get 展示日志列表
slowlog len 列表条数
slowlog reset 日志重置

redis其他相关操作

事务

终止事务
multi
set name yejiawei
discard
提交事务
multi
set name yejiawei
exec

发布和订阅

subscribe channel:sports 订阅频道
publish channel:sports "Tim won the championship" 发布消息
unsubscribe channel:sports 取消订阅
psubscribe it* 订阅以it为开头的频道
pubsub channels 查看活跃频道,也就是至少有一个人订阅的频道
pubsub channels channel:*r* 包含r的频道
pubsub numsub channel:sports 查看频道订阅数
pubsub numpat 查看通过psubscribe形式订阅的订阅数

主从

slaveof 127.0.0.1 6379

redis在spring-boot中的配置和基本使用

说明

本部分内容,本人根据最新版的spring-boot-starter-data-redis配置,网上很多都是老的,bug很多

项目目录

依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency> <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>

properties配置

# ===============================
# DATABASE
# =============================== spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver server.tomcat.uri-encoding=UTF-8
server.port=9001 mybatis.mapper-locations=classpath:mapperxml/*.xml # ===============================
# REDIS
# ===============================
spring.redis.host=localhost
spring.redis.port=6379
#spring.redis.password=root #根据需要
# 连接超时时间(毫秒)
spring.redis.timeout=10000
# Redis默认情况下有16个分片,这里配置具体使用的分片,默认是0
spring.redis.database=0
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0

RedisConfig

package com.springlearn.learn.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.GenericToStringSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration
public class RedisConfig {
@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
} @Bean
RedisTemplate< String, Object > redisTemplate() {
final RedisTemplate< String, Object > template = new RedisTemplate< String, Object >();
template.setConnectionFactory( jedisConnectionFactory() );
template.setKeySerializer( new StringRedisSerializer() );
template.setHashValueSerializer( new GenericToStringSerializer< Object >( Object.class ) );
// template.setValueSerializer( new GenericToStringSerializer< Object >( Object.class ) );
template.setValueSerializer( new GenericJackson2JsonRedisSerializer() ); // 序列化json,反序列化时直接强转就行了
return template;
}
}

TestController

package com.springlearn.learn.controller;

import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SessionCallback;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; @RestController
public class TestController { @Autowired
private RedisTemplate<String, Object> template; @Autowired
private JdbcTemplate jdbcTemplate; @ResponseBody
@RequestMapping(value = "/test1/{id}", method = RequestMethod.GET, produces = "application/json")
public List<Map<String, Object>> Test1(HttpServletRequest request, @PathVariable int id){
// 序列化
// 直接这样设置,会调用GenericJackson2JsonRedisSerializer序列化,对象
// String sql = "select * from test";
// List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
// template.opsForValue().set("obj", list); // 第一种使用方式
// 直接访问template中的方法即可
// ListOperations<String, Object> listOps = template.opsForList();
// List<Object> list = listOps.range("arr", 0, -1); // 第二种方式
// 调用Callback直接访问链接对象
// return template.execute(new RedisCallback<Object>() {
// public Object doInRedis(RedisConnection connection) throws DataAccessException {
// Long size = connection.dbSize();
// // Can cast to StringRedisConnection if using a StringRedisTemplate
// // 这里你可以访问和redis的api,方法基本同名
// // 如果你操作字符串比较多建议使用StringRedisTemplate
// connection.set("key".getBytes(), "value".getBytes());
// return connection.get("key".getBytes());
// }
// }); // 第三种方式
// 使用事务
List<Object> txResults = template.execute(new SessionCallback<List<Object>>() {
public List<Object> execute(RedisOperations operations) throws DataAccessException {
operations.multi();
template.opsForValue().get("obj");
return operations.exec();
}
});
return (List<Map<String, Object>>)txResults.get(0);
}
}

结尾

本篇文章花了本人较多的时间,搜索了N多国内外资料,最后整理出来的

如果有你想知道但是上面没有的,请提出来,我试着帮你们解决,更加完善本文

redis基本操作和在springboot中的使用的更多相关文章

  1. redis分布式锁在springboot中的实现

    理论知识   redis分布式锁的实现方案请参考文章 如何优雅地用redis实现分布式锁 本案例简介   以秒杀活动为例子,在多线程高并发的情况下需要保证秒杀业务的线程安全性,确保秒杀记录与所扣库存数 ...

  2. mongodb基本操作和在springboot中的使用

    本文介绍mongodb的使用 说明 起步 mongo通用类型 mongoshell的操作 CRUD操作 shell命令操作 索引操作 mongo在springboot中的使用 目录结构 依赖 prop ...

  3. springboot中使用cache和redis

    知识点:springboot中使用cache和redis (1)springboot中,整合了cache,我们只需要,在入口类上加 @EnableCaching 即可开启缓存 例如:在service层 ...

  4. SpringBoot中Redis的set、map、list、value、实体类等基本操作介绍

    今天给大家介绍一下SpringBoot中Redis的set.map.list.value等基本操作的具体使用方法 上一节中给大家介绍了如何在SpringBoot中搭建Redis缓存数据库,这一节就针对 ...

  5. 由浅入深学习springboot中使用redis

    很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...

  6. redis(Springboot中封装整合redis,java程序如何操作redis的5种基本数据类型)

    平常测试redis操作命令,可能用的是cmd窗口 操作redis,记录一下 java程序操作reids, 操作redis的方法 可以用Jedis ,在springboot 提供了两种 方法操作 Red ...

  7. SpringBoot中redis的使用介绍

    REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C语言编写.遵守B ...

  8. springboot中配置主从redis

    测试redis的主从配置 redis实例 文件夹名称如下 redis_master_s redis_slaver1_s redis_slaver2_s redis.conf文件 master的redi ...

  9. (一)由浅入深学习springboot中使用redis

    很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...

随机推荐

  1. lightoj1213推公式

    很容易推出来的公式ans=n^(k-1)*k*sum 然后快速幂就好了 #include<map> #include<set> #include<cmath> #i ...

  2. uva-11020-平衡树

    题目链接https://vjudge.net/problem/UVA-11020 白书例题,依次给出n个点的坐标,定义一个点为优势点当且仅当这个点的左下方区域不包含任何点(但可以与之完全重合):求每加 ...

  3. 51nod 1639 递推

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1639 1639 绑鞋带 基准时间限制:1 秒 空间限制:131072 K ...

  4. Oracle Package

    (转自:http://blog.csdn.net/bbliutao/article/details/9016947) 一.概述包可将一些有联系的对象放在其内部.任何能在块定义部分出现的对象都可以在包中 ...

  5. 20165210 Java第五次实验报告

    20165210 实验五 网络编程与安全 网络编程与安全一: 实验要求: 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA ...

  6. Freemarker Failed at: ${itm.creatTimeString?string("yyyy-MM... [in template

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} p.p2 {margin: ...

  7. Thrift之c++实例

    一.c++实例 1.下载与安装thrift工具 http://thrift.apache.org/download/ .服务端代码 1).新建vc工程. 2).将上面的文件拷贝到工程目录下,Test_ ...

  8. 1 秒杀系统模拟基础实现,使用DB实现

    本文根据动脑学院的一节类似的课程,改编实现.分别使用DB和redis来完成. 隔离的解释 业务隔离:将秒杀业务独立出来,尽量不与其他业务关联,以减少对其他业务的依赖性.譬如秒杀业务只保留用户id,商品 ...

  9. Kivy: Building GUI and Mobile apps with Python

    Intro Python library for building gui apps (think qt, gdk,processing) build from ground up for lates ...

  10. Android的长度单位及屏幕分辨率

    屏幕分辨率基础 1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机 ...