Redis-操作

常用命令

Http://redisdoc.com/

set K1 V1
get K1
DBSIZE -- 当前库里有多少个数据
select 2 -- 选择3号库(默认有16个)

KEYS * : 查询库里所有key
FLUSHDB : 删除当前库里所有数据
FLUSHALL : 删除所有库里数据

Key和五大类型常用方法

Key

keys * -- 显示所有key 
exists K1 -- 判断K1是否存在
move K1 2  -- 将K1剪切,黏贴到库2
expire K1 2  -- K1 2秒后过期(key也会消失,相当于删除)
ttl K1 -- 查看K1还有多少秒过期
type K1 -- 查看K1存储的值是什么类型

------不常用------
del K1  --删除K1
rename K1 K2 --把K1改名为K2
renamenx K1 K2 --仅当K2不存在时,将K1改名为K2
RANDOMKEY -- 从当前数据库中随随机回一个key

String

-- 单值单value
set/get/del/append/strlen

一定要是数字才能进行加减
Incr/decr k1  -- k1++/k1--
incrby/decrby k1 2 -- k1+=2 / k1-=2

getrange k1 0 -1 -- 取出k1所有值(0,2,取出k1的0,1,2位)
setrange k1 0 xxx ---从第0位开始把前三位换成xxx

setex(set with expire) k1 10 v1 -- 相当于set k1 v1 + expire k1 10
setnx(set if not exist) k1 v1 -- 相当于if (get k1 == null)set k1 v1

mset(more set) k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx k1 v1 k2 v2  -- 注意:如果有一个存在,则全部失效


getset(先get再set)

List

-- 单值多value

有则插入,无则创建+插入
LPUSH list01 1 2 3 4 5 --先进后出 
RPUSH list02 1 2 3 4 5 --先进先出

lrange list01 0 -1 -- 5 4 3 2 1
lrange list02 0 2 -- 1 2 3

lpop/rpop -- 从第一个弹/从最后一个弹
lpop list01 -- 5
rpop list02 -- 5

lindex list01 0 -- 1 //按照索引下标获得元素(从顶到底)
llen list01 -- 5 //长度

ltem list03 2 3 --删除列表里面2个3

ltrim list01 1 3 -- 截取list01的第2到第4个元素,并将它们赋给list01
此时list01 = 4,3,2

rpoplpush list01 list02 --先rpop list01,再lpush list02,即将最后的值弹出来压入别的栈顶

lset list01 1 x -- 将list01的第二个值(index = 1)设为x
此时list01:5 x 3 2 1

linsert key before(/after) x java -- 5 java x 3 2 1 

Set

单值多value(不允许重复)

sadd set01 1 1 2 2 3 3 --只会加入123
smembers set01 -- 1 2 3
sismember set01 x -- 查看set里是否有x,有则返回1,没有则返回0
scard set01 -- 3 // 集合个数

srem set01 2 -- 将集合中value=2删掉
srandmember set01 2 -- 在set01中随机展示几个数
spop set01 -- 随机出栈
smove set01 set02 x ---将set01的x弹出并加入set02

---数学集合类---
差集:sdiff set01 set02 -- 显示 set01 中 set02 没有的
交集:sinter -- 显示 set01 和 set02 都有的
并集:sunion -- 显示 set01 和 set02 中所有元素,会去重

Hash

KV模式不变,但V是一个键值对(uer表里 name 对应张三)

hset user name z3
hget user name
hsetnx user name

hmset student name zs id 11 age 20
hmget student name id age

hgetall student -- name zs id 11 age 20

hdel student name -- 删除学生

hexists student name -- student里是否有name字段

hkeys student -- student所有key
hvals student -- student所有value

hincrby student age 1 -- student的age字段值+1
hincrebyfloat student score 0.5 -- student的socre字段+0.5

Zset(sorted set)

在set基础上,加一个socre值
之前set是 k1 v1 v2 v3
现在是zest k1 source1 v1 source2 v2

zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5

--排序--
zrange zset01 0 -1 -- v1 v2 v3 v4 v5
zrevrange zset01 0 -1 -- v5 v4 v3 v2 v1
zrange zset01 0 -1 withsocrce -- v1 60 v2 70 v3 80 v4 90 v5 100

zrangebysorce zset01 60 90 -- v1 v2 v3 v4(数字小到大)
zrevrangebysorce zset01 90 60 -- v4 v3 v2 v1(数字大到小)
zrangebysorce zset01 (60 (90 -- v2 v3
zrangebysorce zset01 60 90 limit 2 1 -- v3 // limit 开始index 取几个

--删除、其他--
zrem zset01 v5 -- 删除05
zcard zset01 -- 5 //个数

zcount zset01 60 80 -- 3 //大于60小于80的分数的数量,也可加括号

zrank zset01 v4 -- 3 //v4下标多少
ZREVRANK zset01 v4 -- 1 //v4逆序下标多少

Jedis

创建Jedis

import redis.clients.jedis.Jedis

Jedis jedis = new Jedis("192.168.199.131", 6379)

Jedis常用api

同redis的操作

Map<String, String> map = new HashMap<>();
map.put("address","gz");
map.put("Tel","13534567890");
map.put("name","zs");
jedis.hmset("hash2",map);
List<String> hmget = jedis.hmget("hash2", "Tel", "name");

Jedis事务

jedis.watch("k1");
Transaction multi = jedis.multi();
multi.select(4);
multi.set("k1","IDEA");
multi.exec()

JedisPool

  1. JedisConfig配置
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
    <!-- 最大空闲数 -->
    <property name="maxIdle" value="${redis.maxIdle}" />
    <!-- 最大空连接数 -->
    <property name="maxTotal" value="${redis.maxTotal}" />
    <!-- 最大等待时间 -->
    <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
    <!-- 连接超时时是否阻塞,false时报异常,ture阻塞直到超时, 默认true -->
     <property name="blockWhenExhausted" value="${redis.blockWhenExhausted}" /> 
    <!-- 返回连接时,检测连接是否成功 -->
    <property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>  
  1. 获取Jedis实例需要从JedisPool中获取
  2. 用完Jedis实力需要返还给JedisPool
  3. 如果Jedis在使用过程中出错,也需要还给JedisPool
  4. 代码展示
/**
 * 单例模式
 */
public class JedisPoolUtil {
    private static volatile JedisPool jedisPool = null;
    private JedisPoolUtil(){
    }
    public static JedisPool getJedisPoolInstance(){

        synchronized (JedisPoolUtil.class){
            if(null == jedisPool){
                JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

                jedisPoolConfig.setMaxIdle(32);
                jedisPoolConfig.setMaxWaitMillis(100*1000);
                jedisPoolConfig.setTestOnBorrow(true);
                // ...
                jedisPool = new JedisPool(jedisPoolConfig,"192.168.199.131",6379);
            }
        }
        return jedisPool;
    }
    public static void release(JedisPool jedisPool, Jedis jedis){
        if(null != jedis)
            jedisPool.returnResourceObject(jedis);
    }
}

上面连接池,下面应用

JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();
    Jedis jedis = null;
    try{
        jedis = jedisPool.getResource();
        jedis.set("aa","bb");
    }catch(Exception e){
        e.printStackTrace();
    }
    finally {
        JedisPoolUtil.release(jedisPool,jedis);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值