Redis的基本操作

我们购买一件商品时,首先是通过各种途径了解商品的性能和使用价值,接下来才是根据说明书查看商品的使用操作,入门Redis也一样,知道了Redis是什么,为什么使用Redis,接下来就是了解Redis的各种功能了。

1.服务器中的数据库

Redis是一个key-value的数据库服务器,它将所有的数据库都保存在服务器状态redisServer结构的db数组中。

struct redisServer{
... int dbnum; redisDb *db;
... }

 db数组中的每个项都是redisDb结构,一个db数组保存着服务器中所有的数据库,Redis服务器默认会创建16个数据库,服务器在初始化时会根据dbnum的值创建对应数量的数据库。

2.Redis的基本操作

redisDb结构的db数组中保存了所有的数据库,也就是redisDb结构同时存储着数据库的基本操作。

typedef struct redisDb{
... dict *dict;
dict *expires;
... }redisDb;

 redisDb结构的dict保存了数据库中所有的键值对,称dict为键空间。

2.1键空间的使用方法

1)添加键

redis> SET message "hello world"
OK

redis> RPUSH alphabet "a" "b" "c"
(integer) 3

redis> HSET book name "Redis in Action"
(integer) 1

redis> HSET book author "Josiah L. Carlson"
(integer) 1

redis> HSET book publisher "Manning"
(integer) 1
  • alphabet 是一个列表键, 键的名字是一个包含字符串 “alphabet” 的字符串对象, 键的值则是一个包含三个元素的列表对象。
  • book 是一个哈希表键, 键的名字是一个包含字符串 “book” 的字符串对象, 键的值则是一个包含三个键值对的哈希表对象。
  • message 是一个字符串键, 键的名字是一个包含字符串 “message” 的字符串对象, 键的值则是一个包含字符串 “hello world” 的字符串对象。

执行上述操作之后,数据库中的键空间如下图:

添加新键:

redis> SET date "2013.12.1"
OK

添加新键之后,数据库中的键空间多了一个键值对,键为包含date字符串的对象,值为包含2013.12.1的字符串对象。

 

2)删除键

redis> DEL book
(integer) 1

删除键实际上就是删除键空间中相对应的键值对。

 

3)更新键

redis> SET message "blah blah"
OK

 更新键的操作是更新键空间中键值对中键对应的值。

4)对键取值

redis> GET message
"hello world"

 

2.2设置键的生存时间或过期时间

Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) :

  • EXPlRE 命令用于将键key 的生存时间设置为ttl 秒;
  • PEXPIRE 命令用于将键key 的生存时间设置为ttl 毫秒;
  • EXPIREAT < timestamp> 命令用于将键key 的过期时间设置为timestamp所指定的秒数时间戳;
  • PEXPIREAT < timestamp > 命令用于将键key 的过期时间设置为timestamp所指定的毫秒数时间戳。

Redis通过exipre或则pexpire命令,可以以秒或则毫秒为精度为某个key设置过期时间,在经过指定的时间之后,redis服务器就会删除生存时间为0的key。

下面的例子中把key1的过期时间设置为40秒,过40秒后redis就会吧key1删除。

127.0.0.1:6379> set key1 'value1'
OK
127.0.0.1:6379> exipre key1 40
(error) ERR unknown command 'exipre'
127.0.0.1:6379> expire key1 40
(integer) 1
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379>

 etex命令可以在设置一个字符串key的时候,同时设置该key的过期时间,因为这个命令是一个类型限定的命令(只能用于字符串键),但SETEX 命令设置过期时间的原理和EXPIRE命令设置过期时间的原理是完全一样的。

与EXPlRE 命令和PEXPIRE 命令类似,客户端可以通过EXPlREAT 命令或PEXPlREAT命令,以秒或者毫秒精度给数据库中的某个键设置过期时间(expire time)。过期时间是一个UNIX时间戳,当键的过期时间来临时,服务器就会自动从数据库中删除这个键:

使用方式如下:

127.0.0.1:6379> set key1 'value1'
OK
127.0.0.1:6379> expireat key1 1545470885
(integer) 1
127.0.0.1:6379> time
1) "1545470897"
2) "996846"
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> 

 TTL 命令和PTTL 命令接受一个带有生存时间或者过期时间的键,返回这个键的剩余生存时间,也就是,返回距离这个键被服务器自动删除还有多长时间:

127.0.0.1:6379> time
1) "1545470973"
2) "878082"
127.0.0.1:6379> set key1 'value1'
OK
127.0.0.1:6379> expireat key1 1545471973
(integer) 1
127.0.0.1:6379> ttl key1
(integer) 962
127.0.0.1:6379> ttl key1
(integer) 961

 

posted on 2019-07-14 13:53  BlueTree2  阅读(249)  评论(0编辑  收藏  举报

导航