Redis基础

什么是Redis

redis是一款非关系型数据库,它是以键值对的方式来存储数据。通常用于做为缓存来使用。它具有对数据进行高并发的读写、 海量数据读写等优点。
在windowns系统中再DOS窗口中加入redis的安装目录,然后运行命令redis-server.exe redis.windows.conf即可开启redis。在另外一个DOS窗口中执行命令 redis-cli.exe 回车进入redis命令行工具输入auth ‘password’验证身份即可成功连接redis数据库。

Redis的基本数据类型

key

redis数据库是通过key来获取存储的数值的。key都是String类型的数据。

命令描述
keys*查看当前库中的所有key
exists key判断某个key是否存在
type key查看某个key的类型
del key删除指定的key
unlink key异步删除指定的key
expire key 10给key设置时间。expire key 10即为10秒后过期
ttl key查看该key还有多少秒过期。-1表示永不过期,-2表示已过期
select切换数据库 select 0 表示切换到0号数据库
dbsize查看当前数据库key的个数
dbflush删除当前数据库的所有key

String

String是redis中最基本的数据类型,String的内部实现类似于ArrayList采用预分配冗余空间的方式来减少内存的频繁分配。String类型一个key对应一个value。String是二进制安全的它可以存储任何数据。比如jpg图片或者序列化对象。String类型的value最大为512M。

命令描述
set key value将key value加入到数据库中去,如果存在该key则覆盖原先的value
get key查询key对应的value
append key value对给定的value末尾进行追加value
strlen key获取值的长度
setnx key value只有key不存在时才设置值
incr key将key的值加一,只能对数字进行操作,如果该值为空则新增值为1
decr key将key的值减一,只能对数字进行操作,如果该值为空则新增值为-1
mset k1 v1 k2 v2…向数据库加入多个键值对
mget k1 k2…通过多个key获取多个value
msetnx k1 v1 k2 v2…向数据库加入多个键值对,当且仅当所有的key都不存在时成功,否则失败
getrange key startindex endindex获取给定范围的数值(包括起始和结束的位置)
setrange key start value向对应值的后面拼接新值

list

list类型可以让一个key对应多个有序(指加入的顺序)的value。每一个value也是string类型。llist的数据结构是一个特殊的链表结构。

命令描述
lpush/rpush k1 v1 k2 v2…从左/右插入一个或者多个键值对
lpop/rpop key从左/右边吐出一个值。值在键在,值光键亡
rpoplpush key1 key2从key1列表右边吐出一个值,插入到key2列表的左边
lrange key start stop按照索引下标获取元素,从左到右
lindex key index按照索引下标获取元素,从左到右
llen key获取列表长度
linsert key before value newvalue在value的后面插入值newvalue
lrem key n value删除n个value,从左到右
lset key index value将列表key下标为index的值替换为value,从左计数

set

set类型可以让一个key对应多个无序的value而相比于list它的特殊之处在于set可以自动进行去除重复数据。每一个value也是string类型的数据。它的底层是一个value为null的hash表,所以增删改的效率很高。

命令描述
sadd key v1 v2…加入一个或者多个值进入集合,重复值将被忽略
smembers key取出集合中的所有元素
sismember key value判断该集合是否包含value,包含返回1否则返回0
scard key返回该集合包含元素的个数
srem key v1 v2…删除集合中的某一些元素
spop key随机从集合中吐出一个数值
srandmember key n随机从集合中吐出一个值,但不删除
smove source destination value把集合中的某个值移动到另外一个集合中去
sinter key1 key2返回两集合的交集元素
sunion key1 key2返回两集合的并集元素
sdiff key1 key2返回两集合的差集元素

map

该数据类型相当于一个key对应了一个map集合,该集合中的元素,键和值都是string类型。该数据类型的底层也是用一个hash实现的。

命令描述
hset key field value给key对应的map中的field键赋值为value
hget key field从key对应的map中取出键field的值
hmset key f1 v1 f2 v2…批量向key对应的map中加入数据
hexists key field查看key对应map中field键是否存在
hkeys key列出key对应的map中的所有field
hvals key列出key对应的map中的所有value
hincrby key field increment向key对应的map中的field的值加上增量
hsetnx key field value给key对应的map中的field键赋值为value,当且仅当field不存在

zset

该数据类型相当于set,但是zset集合中的数据是有序的(利用score进行排序)。

命令描述
zadd key s1 v1 s2 v2…将一个或多个元素以及元素对应的score加入到集合中
zrange key start stop [withscores]返回集合start-stop之间的元素,带有withscore时可以同score一起返回
zrangebyscore key min max [withscores] [limt offset count]返回有序集合中介于min于max的成员,按score递减返回
zrevrangebyscore key max min [withscores] [limt offset count]同上,按递增返回
zincrby key increment value为value加上增量
zrem key value删除集合指定的元素
zcount key min max统计score介于min与max之间的元素个数
zrank key value返回该值的排名,从0开始

发布与订阅

redis发布订阅是一种消息通信模式:发送者发送消息,订阅者接收消息。redis客户端可以订阅任意数量的频道。
订阅一个频道p: subscribe p
给频道p发布消息hello: piblish p hello

事务

事务的使用

MULTI语句用于开启事务,接下来的执行操作语句都会被加入到队列中去(当有一次命令被检测出语法错误时,该队列会被自动取消),当执行EXEC时,该队列中的语句会被依次执行(在执行队列中的命令时,如果一条语句执行失败,它不会影响到其他语句的执行),而当执行DISCARD语句时,则会取消该队列,放弃这次事务操作。

事务的特性

单独的隔离级别:事务中的所有命令都会被序列化、按顺序的执行。事务在执行过程中不会被其他客户端发过来的命令请求所打断。
没有隔离级别的概念:队列中的命令没有提交之前不会被实际的执行。(因为 Redis 在执行命令时是单线程的(即使 Redis 6.0 增加多线程特性,大部分的数据操作的命令还是单线程的),而且事务中的命令都是在提交的时候一次性执行的,所以并不需要考虑在多线程并发的情况下事务隔离的情况。)
不保证原子性:事务中的命令在执行过程中一条命令失败其他命令也会被执行,没有回滚机制。

WATCH语句

我们可以使用已有的命令来实现简单的类似事务隔离特性的功能,主要思路就是使用 WATCH 监控事务中需要操作的值,以保证事务操作前后所监控的值不发生变化,或者发生变化以后中断事务操作。

SpringBoot集成Redis

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
</dependency>

配置application.propertie

spring.redis.host=127.0.0.1
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=30000

RedisTemplate和StringRedisTemplate

当SpringBoot集成了Redis,我们可以使用RedisTemplateStringRedisTemplate来操作Redis。两者的区别在于StringRedisTemplate的两个泛型都是String类型只能存储String类型的键值对,而RedisTemplate两个泛型都是object类型,意味着key-value可以是对象被序列化到redis中去,也可以从redis中反序列化成为一个对象(这些对象都需要实现序列化接口)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值