Redis的基本操作
Posted bluetree2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于Redis的基本操作的主要内容,如果未能解决你的问题,请参考以下文章