简介

Nosql
非关系型数据库与关系型数据库对比
- 非结构化
- 无关联
- 非SQL
- 没事务ACID
认识Redis
特征:
- 键值型
- 单线程,命令具备原子性
- 基于内存
- 支持数据持久化
- 支持主从集群,分片集群
- 支持多语言客户端
使用命令行
win,linux得安装包下载 端口号:6379
进入 /usr/local/etc/,然后打开redis.config,修改配置 daemonize no 将 no 改为 yes 。设置密码:requirepass foobared 将 foobared 改为 1234 。(这一个过程需要用 vim 打开,具体配置由于 Redis 版本不一致,所在的行数也不一样,自己找一下吧。)
接下来,以守护线程的方式启动redis在终端输入:
redis-server /opt/homebrew/etc/redis.conf然后用命令查看redis是否开启:
ps aux | grep redis
默认创建16个库
数据类型


常用命令

字符串操作命令(string)

key的结构

哈希操作命令(hash)


列表操作命令(list)
类似于java中的LinkedList,可以看作双向链表
- 有序
- 元素可重复
- 插入删除快
- 查询速度一般

集合操作命令(set)
与java中的hashset类似
(不重复,无序) 查找快,支持交并差集


有序集合操作命令(sortedSet)
与java中的TreeSet类似,但底层有差别,SortedSet中每个元素值都带有一个score属性,用于对元素排序(一个跳表SkipList加hash表)
- 可排序
- 元素不重复
- 查询速度快
- 常用作排行榜

通用命令


命令合集
keys //查看所有匹配的key,生产环境下不建议使用,会阻塞
del //删除一个key
exists //判断key是否存在
expire //给key设置有效期,到期key自动删除
ttl //查看有效期
//String类型
最大空间不超过512m
set //key,val
get //取
mset //批量添加
mget //批量取
incr //自增
incrby //设置步长(-1即为自减)
decr //自减
incrbyfloat //按浮点数设置步长
setnx //添加一个键值对,不存在key才会执行(纯粹的添加)
setex //添加key并设置有效期
//Hash类型
hset //(key filed value) 添加或修改hash类型key的filed值
hget //(key filed) 获取对应的value值
hmset //批量,同sting类型
hmget
hgetall //得到所有field和value
hkeys //只得到field
hvals //只得到value
hincrby
hsetnx
//List类型
lpush //向链表左侧插入一个或多个元素
lpop //从左侧取第一个元素,没有则返回nil
rpush
rpop
lrange key start end //返回一段角标范围内的所有元素
blpop brpop //会等待一段时间,不会直接返回nil
//Set类型
sadd //(key,member...)添加一个或多个
srem //(key,member...)移除指定元素
scard //返回set中元素的个数
sismember //(key member)判断一个元素是否存在set中
smembers //获取全部元素
sinter //(key1,key2)求交集
sdiff //差集
sunion //并集
//SortedSet类型
zadd //(key score member)添加一个或多个元素到set中,若已存在则更新
zrem //(key,member) 删除指定元素
zscore //(key,member)获取指定元素的score值
zrank //(key,member)获取指定元素的排名
zcard //(key) 获取元素个数
zcount //(key,min,max)统计score指定范围内的元素个数
zincrby //(key,incriment,member)指定元素按步长自增
zrange //(key,min,max)按score排序后,返回指定排名范围内的元素
zrangebyscore //(key,min,max)score范围内的元素
zdiff
zinter
zunion
//所有排名默认生序,降序在命令z后加rev
Redis的Java客户端
Jedis

Redis在Java中的操作
Spring Data Redis

导入设置

在创建redisTemplate对象时,序列化器可使key不至于乱码
@Slf4j
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate (RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis模版对象......");
RedisTemplate redisTemplate = new RedisTemplate();
//设置redis连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis key 的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}关于redis在java内的测试
@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedisTemplate(){
System.out.println(redisTemplate);
HashOperations hashOperations = redisTemplate.opsForHash();
ListOperations listOperations = redisTemplate.opsForList();
ValueOperations valueOperations = redisTemplate.opsForValue();
SetOperations setOperations = redisTemplate.opsForSet();
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}
@Test
public void testString(){
//set
redisTemplate.opsForValue().set("city","北京");
//get
String city = (String) redisTemplate.opsForValue().get("city");
System.out.println(city);
//setex
redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
//setnx
redisTemplate.opsForValue().setIfAbsent("lock","1");
redisTemplate.opsForValue().setIfAbsent("lock","2");
}
}快速入门

序列化
RedisTemplate会自动把目标(key)序列化,这会使之变成“乱码”
自定义序列化

StringRedisTemplate


项目实战
技术点
