当前位置:   article > 正文

SpringBoot集成Redis_spring boot jedis

spring boot jedis

一、redis命令复习

1.键(Key)&& 通用命令

命令作用
DEL key [key …]删除数据库中已经存在的一个或多个 key,如果不存在则自动忽略
EXISTS key [key …]检查指定的一个 key 或者多个 key 是否存在
EXPIRE key seconds设置 key 的过期时间,以秒为单位
EXPIREAT key timestamp以 UNIX 时间戳格式来设置 key 的过期时间
KEYS pattern查找符合的key,生产环境禁用可食用scan游标代替
MOVE key db移动到其他数据库,Redis 共有 16 个数据库
PERSIST key移除key的过期时间
PEXPIRE key milliseconds设置 key 的过期时间,以毫秒为单位
RANDOMKEY前数据库中随机返回一个 key
RENAME key newkey修改 key 的名称
TTL key查看 Key 剩余的过期时间,以秒为单位
PTTL key查看key的剩余过期时间,返回毫秒
TYPE key返回 key 所储存的值的类型
FLUSHDB清空当前库所有key
FLUSHDBALL清空所有库中的key

2.字符串(String)常用命令

命令作用
set key value [expiration EX seconds]设置key的value值 && 过期时间 原子性操作
get key获取指定key的value值
append key value追加字符串 key不存在则创建
strlen key获取value长度
incr key自增+1
decr key自减-1
incrby key number增加指定数值
decrby key number减少指定数值
getrange key start end截取字符串 -1 表示最后一个字符
setrange key offset value替换字符串,覆盖的位置从偏移量 offset 开始
setnx key valuekey不存在则创建(分布式锁场景)
mset key1 value1 key2 value2创建多个key :value
mget key1 key2获取多个key
msetnx key1 val1 key2 val2key不存在则创建,存在就忽略
getset key value获取之后重新赋值 key不存在返回nil

3.列表(List)常用命令

命令作用
rpush key val1 val2 val3从尾部添加元素
lpush key val1 val2 val3从头部添加元素
lpop key count从头部移除指定个数元素
rpop key count尾部移除指定个数元素
lindex key index根据下标获取元素
llen key获取列表key个数
lrem key count value根据 count 的值,移除列表中与参数 value 相等的元素
ltrim key start end通过下标保留指定数据
rpoplpush list otherlist移除列表最后一个元素 放到新的list中
lset key index value按指定下标 替换value key必须存在
lrange key start end获取 0 -1 取全部

4.哈希(Hash)常用命令

命令作用
hset key field value设置哈希表中指定key下field的值为value
hmset同上,设置多个
hget key field获取制定key中field字段的value值
hmget key field field2同上,获取多个
hgetall key获取哈希表key中所有字段和值
hdel key field删除哈希表key中字段field
hlen key哈希表key中字段数量
hexists key field查看哈希表key中field是否存在
hkeys key获取哈希表key 所有的field
hvals key获取哈希表中所有field的value值
hincryby key field number增加指定数值 可以设置负数减少
hsetnx key field value不存在创建 存在不能创建

5.集合(Set)常用命令

命令作用
sadd key val1 val2集合中添加元素
smembers key查看集合中所有元素
sismember key val查看集合中是否存在某个value
scard key查看集合元素数量
srem key val删除集合某个元素
srandmember key count随机从集合中取出指定个数元素
spop key count随机弹出指定个数的元素
smove key key2 value把value从key中移动到key2中
sdiff key1 key2 key3集合差集
sinter key1 key2 key3集合交集
sunion key key1集合并集

6.有序集合(Zset)常用命令

命令作用
zadd key score member将一个或多个member元素及其score值加入到有序集key当中,若添加的member已存在则更新当前分数
zrange key min max返回有序集中,指定区间内的成员
zrangebyscore key min max根据scores从小到大返回区间内成员
zrangebyscore key min max whithscores根据scores从小到大返回区间内成员包含scores值
zrangebyscore key min 2500根据scores从小到大返回小于2500区间内成员
zrevrange key start end withscores(选填)按score值递减(从高到低)来排列获取
zrevrangebyscore key max min [withscores] [limit offset count]指定分数区间的成员列表,从小到大排列
zcard key获取有序集合成员数量
zcount key min max获取指定区间内的成员
zrandmember key [count [withscores]]随机获取指定个数的成员
zmscore key member [member …]返回集合指定成员的sources值
zscan myzsetA 0 match * count 2游标迭代遍历集合内部元素
zrevrank key member按score值从高到低排列,获取成员排名
zrank key member按score值又低到高排列,获取成员排名推(荐分数相同时使用)
zrem key member删除有序集合中指定成员
zremrangebyrank key start stop删除指定排名区间内
zremrangebylex key min max删除按名称字典排序由低到高区间内成员
zremrangebyscore key min max删除分数介于min到max的成员
zpopmax key [count]删除分数最高的指定个数成员
zpopmin key [count]删除分数最低的指定个数的成员

7.地理位置(Geo)常用命令

命令作用
geoadd key longitude latitude member将指定的地理空间(经度、纬度、名称)添加到指定的键中
geopos key member member1获取指定成员的经纬度
geodist key member1 member2 [M/KM/FT/MI]获取两个成员直线距离
georadius key 经度 纬度 1000 km [withdist(距离)] [withcoord(经纬度)] count个数 desc通过经纬度查看指定中心点半径距离的经纬度的members
georadiusbymember key member1 1000[M/KM/FT/MI]查看成员指定范围内的成员

8.基数统计(HyperLogLog)常用命令

**基数的概念:
{1,2,3,1,2,3,4,5,6} 数据集中不重复的元素为1,2,3,4,5,6 那么该数据集中的基数为6

优点:
每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64 个不同元素的基数**

命令作用
PFADD key member […member]=添加==
PFCOUNT key […key]返回给定HyperLogLog的基数估算值,可一次统计多个key,返回值是一个带有 0.81% 标准错误的近似值
PFMERGE newKey key1 key2合并多个HyperLogLog 到新的HyperLogLog中

demo 个人理解


//重复返回0 不重复返回1。可用于UV统计场景

127.0.0.1:6379> pfadd name java go python
(integer) 1
127.0.0.1:6379> pfcount name
(integer) 3
127.0.0.1:6379> pfadd name java
(integer) 0
127.0.0.1:6379> pfadd name php
(integer) 1
127.0.0.1:6379> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

9.位图(BitMap)常用命令

    8bit(位) = 1B      [Byte=B]     字节(最小单位)
    1024 B  = 1 KB    [KiloByte]    千字节
    1024 KB = 1 MB    [MegaByte]    兆字节
    1024 MB = 1 GB    [GigaByte]    吉字节
    1024 GB = 1 TB    [TeraByte]    太字节
    1024 TB = 1 PB    [PetaByte]    拍字节
    1024 PB = 1 EB    [ExaByte]     艾字节
    1024 EB = 1 ZB    [ZetaByte]    皆字节
    1024 ZB = 1 YB    [YottaByte]   佑字节
    1024 YB = 1 BB    [Brontobyte]  珀字节
    1024 BB = 1 NB    [NonaByte]    诺字节
    1024 NB = 1 DB    [DoggaByte]   刀字节
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

bit为计算机最小单位,8bit = 1b字节, 一个bit只能设置0或者1,所以只能代表两个状态(占用空间特别小)

命令作用
setbit key offset value设置或清除存在当前key里指定offset(偏移)位置上的位(可设置0或1,否和是
bitcount key [start end]计算字符串中设置位数为1的个数,指定范围则使用start、end
getbit key offset获取指定key上制定偏移量的value值

demo:

setbit userWork 0 1
setbit userWork 1 0
setbit userWork 2 1
setbit userWork 3 1
setbit userWork 4 1
setbit userWork 5 0
setbit userWork 6 0

bitcount userWork.  //查看user一周工作了几天

(integer) 4

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

9.Redis事务 常用命令

非原子性。一组有序队列

命令作用
watch key监控事务WATCH 机制使的事务 EXEC 变的有条件,事务只有在被 WATCH 的 key 没有修改的前提下才能执行
multi开启事务
discard停止事务
exec提交事务

二、Springboot集成Jedis原生API操作

倒入坐标

//Jedis
<dependency>
     <groupId>redis.clients</groupId>
     <artifactId>jedis</artifactId>
     <version>3.5.2</version>
 </dependency>

//转json
 <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>2.0.19</version>
 </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

测试类

@Test
void redisTxTest() {
	//建立连接
    Jedis jedis = new Jedis("127.0.0.1",6379);
	//auth密码验证
    jedis.auth("123456");
    //选择操作的库
    jedis.select(0);

    JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
    jsonObject.put("name","jack陈");
    jsonObject.put("age","18");
    //对象转字符串
    String res = jsonObject.toString();
    //开启事务
    Transaction multi = jedis.multi();
    try {
        multi.set("user",res);
        multi.set("test","testValue");
        multi.exec();
    }catch (Exception e) {
    	//异常停止事务
        multi.discard();
        e.printStackTrace();
    }finally {
        //关闭连接
        jedis.close();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

二、Springboot集成Redis

springboot2 以后Redis底层jedis替换成lettuce

jedis 直连 不安全 要使用poll连接池

lettuce 不存在线程不安全 采用netty 多个线程共享实例

(1)倒入坐标

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

(2)配置redisTemplate

@Configuration
public class RedisConfig {
    //自定义RedisTemplate   固定模版 项目中可以复制使用
    @Bean(name = "redisTemplateSelf")
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<String,Object>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        //序列化配置
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        //String序列化配置
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        //key采用string序列化方式
        redisTemplate.setKeySerializer(stringRedisSerializer);

        //hash的keyString序列化
        redisTemplate.setHashKeySerializer(stringRedisSerializer);

        //value 序列化采用jackson2JsonRedisSerializer
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);

        //hash value 序列化采用jackson2JsonRedisSerializer
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();


        return redisTemplate;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

(3) 配置工具类封装Reids

@Component
public final class RedisUtil {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    public void test() {
        redisTemplate.opsForValue().set("name","cdd");
        System.out.println("redis util...");
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

(4) 测试类

 //Redis工具类测试
 @Test
 void redisUtilTest() {
     redisUtil.testSet();
 }

//结果
redis util...

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号