复习电商笔记-26-redis操作命令

 

Redis生存时间

expire

Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即到期后数据销毁。

语法:EXPIRE key seconds

127.0.0.1:6379> flushall

OK

127.0.0.1:6379> set bomb tnt

OK

127.0.0.1:6379> expire bomb 10

(integer) 1

127.0.0.1:6379> ttl bomb

(integer) 5

127.0.0.1:6379> ttl bomb

(integer) 3

127.0.0.1:6379> ttl bomb

(integer) 3

127.0.0.1:6379> ttl bomb

(integer) 2

127.0.0.1:6379> ttl bomb

(integer) 1

127.0.0.1:6379> ttl bomb

(integer) -2

127.0.0.1:6379> ttl bomb

(integer) -2

127.0.0.1:6379>

TTL查看key的剩余时间,当返回值为-2时,表示键被删除。

当 key 不存在时,返回 -2 。

当 key 存在但没有设置剩余生存时间时,返回 -1 。

否则,以毫秒为单位,返回 key 的剩余生存时间。

注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

 

 

persist

语法:PERSIST key

127.0.0.1:6379> set bomb tnt

OK

127.0.0.1:6379> expire bomb 60

(integer) 1

127.0.0.1:6379> ttl bomb

(integer) 49

127.0.0.1:6379> persist bomb

(integer) 1

127.0.0.1:6379> ttl bomb

(integer) -1

127.0.0.1:6379>

设置新的数据时需要重新设置该key的生存时间。重新设置值也会清除生存时间。

 

 

pexpire

语法:PEXPIRE key milliseconds

127.0.0.1:6379> set bomb tnt

OK

127.0.0.1:6379> pexpire bomb 10000

(integer) 1

127.0.0.1:6379> ttl bomb

(integer) 6

127.0.0.1:6379> ttl bomb

(integer) 3

127.0.0.1:6379> ttl bomb

(integer) -2

127.0.0.1:6379>

设置生存时间为毫秒,可以做到更精确的控制。

 

Redis高级中的hash结构

在redis中用的最多的就是hash和string类型。

 

 

问题

假设有User对象以JSON序列化的形式存储到redis中,User对象有id、username、password、age、name等属性,存储的过程如下:

保存、更新:

User对象->json(string)->redis

如果在业务上只是更新age属性,其他的属性并不做更新应该怎么做呢?

Redis数据类型之散列类型hash

散列类型存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他类型,也就是说,散列类型不能嵌套其他的数据类型。一个散列类型可以包含最多232-1个字段。

hset/hget

 

 

HSET和HGET赋值和取值

HSET key field value

HGET key field

HMSET key field value [field value…]

HMGET key field [field ]

HGETALL key


127.0.0.1:6379> hset user username chenchen

(integer) 1

127.0.0.1:6379> hget user username

"chenchen"

127.0.0.1:6379> hset user username chen

(integer) 0

127.0.0.1:6379> keys user

1) "user"

127.0.0.1:6379> hgetall user

1) "username"

2) "chen"

127.0.0.1:6379>

127.0.0.1:6379> hset user age 30

(integer) 1

127.0.0.1:6379> hgetall user

1) "username"

2) "chen"

3) "age"

4) "30"

127.0.0.1:6379>

HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。

 

 

hincrby

HINCRBY和INCR区别在于HINCRBY如果没有KEY 则自动创建KEY然后赋值而INCR只能添加不能判断。

127.0.0.1:6379> hdecrby article total 1

127.0.0.1:6379> hincrby article total -1      #没有hdecrby自减命令

(integer) 1

 

 

hmset/hmget

HMSET和HMGET设置和获取对象属性

127.0.0.1:6379> hmset person username tony age 18

OK

127.0.0.1:6379> hmget person age username

1) "18"

2) "tony"

127.0.0.1:6379> hgetall person

1) "username"

2) "tony"

3) "age"

4) "18"

127.0.0.1:6379>

注意:上面HMGET字段顺序可以自行定义

 

 

hexists

属性是否存在

127.0.0.1:6379> hexists killer

(error) ERR wrong number of arguments for 'hexists' command

127.0.0.1:6379> hexists killer a

(integer) 0

127.0.0.1:6379> hexists user username

(integer) 1

127.0.0.1:6379> hexists person age

(integer) 1

127.0.0.1:6379>

 

 

hdel

删除属性

127.0.0.1:6379> hdel user age

(integer) 1

127.0.0.1:6379> hgetall user

1) "username"

2) "chen"

127.0.0.1:6379> hgetall person

1) "username"

2) "tony"

3) "age"

4) "18"

127.0.0.1:6379>

 

 

hkeys/hvals

只获取字段名HKEYS或字段值HVALS

127.0.0.1:6379> hkeys person

1) "username"

2) "age"

127.0.0.1:6379> hvals person

1) "tony"

2) "18"

 

 

Hlen  

元素个数

127.0.0.1:6379> hlen user

(integer) 1

127.0.0.1:6379> hlen person

(integer) 2

127.0.0.1:6379>

 

 

Jredis示例

package cn.redis;



import java.util.Map;



import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;



public class JedisPoolDemoCMD {



    public static void main(String[] args) {

        // 构建连接池配置信息

        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

        // 设置最大连接数

        jedisPoolConfig.setMaxTotal(50);



        // 构建连接池

        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);



        // 从连接池中获取连接

        Jedis jedis = jedisPool.getResource();



        jedis.hset("USER_1", "username", "zhangsan");

        jedis.hset("USER_1", "password", "123456");

       

        Map<String, String> val = jedis.hgetAll("USER_1");

        for (Map.Entry<String, String> entry : val.entrySet()) {

            System.out.println(entry.getKey() + "  " + entry.getValue());

        }



        // 将连接还回到连接池中

        jedisPool.returnResource(jedis);



        // 释放连接池

        jedisPool.close();



    }



}

Redis中测试:

127.0.0.1:6379> hgetall USER_1

1) "username"

2) "zhangsan"

3) "password"

4) "123456"

127.0.0.1:6379> hgetall user_1

(empty list or set)

127.0.0.1:6379>

注意:key值的大小写是区分的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值