redis是基于内存型的NoSQL 非关系型数据库,本内容只针对有基础的小伙伴, 因为楼主不会做更多的解释,而是记录更多的技术接口使用,毕竟楼主不是做教学的,没有教学经验。 关于redis的介绍请自行搜索查阅。
使用redis数据库首先先去安装, 楼主这里使用的是docker 搭建的Redis, 关于docker 的知识点请自行查阅, 因为讲起来三天三夜也讲不完, 如果不想使用docker, 也可以一步一步的去搭建Redis数据库, 使用docker一个命令就搭建好了,简单速度快捷方便!
楼主已经将docker搭建的 Redis服务启动起来了。
由于楼主是学python的, 本教程中会有大量的python 代码出现。
链接Redis:
使用 redis-cli 即可实现客户端与服务端的链接,
测试redis 客户端与服务端的链接:
使用 PING 命令, 则可以测试是否与redis 成功链接, 但需要注意的是, 如果ping 后面没有跟任何参数, 则会返回 PONG, 如果ping后面跟了参数, redis服务则会将传递的参数给返回:
这种情况下,表明客户端已经成功链接上了 redis服务,
如果链接有问题,则会报错:
Python 测试链接Redis:
from redis import Redis
redis_cli = Redis()
if redis_cli.ping():
print("Redis 服务链接成功!")
else:
print("Redis 服务链接失败!")
使用Python 代码 操作redis进行缓存:
对数据进行缓存是Redis最常见的用法之一,因为缓存操作是指把数据存储在内存而不是硬盘上,而访问内存远比访问硬盘的速度要快得多,所以用户可以通过把需要快速访问的数据存储在Redis中来提升应用程序的速度。
from redis import Redis
class Cache:
def __init__(self, client):
self.redis_cli = client
def set(self, key, value):
self.redis_cli.set(key, value)
def get(self, key):
return self.redis_cli.get(key)
def update(self, key, new_value):
return self.redis_cli.getset(key, new_value)
if __name__ == '__main__':
redis_cli = Redis(decode_responses=True)
cache = Cache(redis_cli)
cache.set(key="name", value="张三")
print(cache.get(key="name"))
print(cache.update(key="name", new_value="李四"))
print(cache.get(key="name"))
配置服务器:
这种配置只是针对于docker 以外的redis服务搭建方式, 不是使用docker 搭建的, 但是也同样十分重要!
方式一:
启动Redis服务器的时候给定配置选项作为参数,格式为:
$ redis-server --OPTION1 [value1 value2 ...] --OPTION2 [value1 value2 ...] [...]
例如,Redis服务器默认使用6379作为端口号,但如果你想使用10086而不是6379作为端口号,那么可以在启动Redis服务器时通过设定port可选项来指定想要的端口号:
$ redis-server --port 10086
方式二:
在启动Redis服务器的时候为其提供配置文件,并将想要修改的配置选项写在配置文件中:
$ redis-server /path/to/your/file
例如,为了将Redis服务器的端口号改为12345,我们可以在当前文件夹中创建配置文件myredis.conf,并在文件中写入 : port 12345 然后启动redis服务的时候向其提供该配置文件。
Redis 数据类型:
字符串:
字符串(string)键是Redis最基本的键值对类型,这种类型的键值对会在数据库中把单独的一个键和单独的一个值关联起来,被关联的键和值既可以是普通的文字数据,也可以是图片、视频、音频、压缩文件等更为复杂的二进制数据。
Redis为字符串键提供了一系列操作命令,通过使用这些命令,用户可以:
●为字符串键设置值。
●获取字符串键的值。
●在获取旧值的同时为字符串键设置新值。
●同时为多个字符串键设置值,或者同时获取多个字符串键的值。
●获取字符串值的长度。
●获取字符串值指定索引范围内的内容,或者对字符串值指定索引范围内的内容进行修改。
●将一些内容追加到字符串值的末尾。
●对字符串键存储的整数值或者浮点数值执行加法操作或减法操作。
set 命令为字符串键设置值:
我们可以使用 set 命令来为一个字符串的键 设置一个值 :
set key value
例如:
可以发现, 设置成功后, 则会返回 OK
改变覆盖规则:
默认情况下, 已有的键值如果再次被复制,原有的值则会被覆盖掉, 例如:set name "张三" 这个命令设置了两次, 第二次为: set name "wangwu" 那么, 第二次设置的值会覆盖掉上次设置的值, 这个时候,在redis中存储的name 的值则为:wangwu.
从Redis 2.6.12版本开始,用户可以通过向SET命令提供可选的NX选项或者XX选项来指示SET命令是否要覆盖一个已经存在的值:
SET key value [NX|XX]
如果用户在执行SET命令时给定了NX选项,那么SET命令只会在键没有值的情况下执行设置操作,并返回OK表示设置成功;如果键已经存在,那么SET命令将放弃执行设置操作,并返回空值nil表示设置失败。
如果用户在执行SET命令时给定了XX选项,那么SET命令只会在键已经有值的情况下执行设置操作,并返回OK表示设置成功;如果给定的键并没有值,那么SET命令将放弃执行设置操作,并返回空值表示设置失败。
get 命令获取字符串的值:
可以使用GET命令从数据库中获取指定字符串键的值:
get key
GET命令接受一个字符串键作为参数,然后返回与该键相关联的值。
我们可以使用 keys * 查看redis中存储的所有键:
由此可见,这里存储了 age, name 两个键,使用get 命令则可以获取它们的值:
可以发现, 如果尝试去获取一个 不存在的键:address, 则会返回 nil。
getset 命令获取旧值并设置新值:
GETSET命令就像GET命令和SET命令的组合版本,GETSET首先获取字符串键目前已有的值,接着为键设置新值,最后把之前获取到的旧值返回给用户:
GETSET key new_value
如果使用GETSET 命令操作的是一个不存在的键, 那么会先将 nil 作为旧值返回,然后再设置一个新的值:
mset 命令一次为多个字符串键设置值:
除了SET命令和GETSET命令之外,Redis还提供了MSET命令用于对字符串键进行设置。与SET命令和GETSET命令只能设置单个字符串键不同,MSET命令可以一次为多个字符串键设置值:
MSET key value [key value ...]
与SET命令一样,MSET命令也会在执行设置操作之后返回OK表示设置成功。此外,如果给定的字符串键已经有相关联的值,那么MSET命令也会直接使用新值去覆盖已有的旧值。
mget 命令一次获取多个字符串键的值:
使用 mget 命令可以一次性接受多个字符串键, 并返回对应的值:
MGET key [key ...]
msetnx 只在键不存在的情况下,一次性为多个字符串键设置值:
MSETNX key value [key value ...]
MSETNX与MSET的主要区别在于,MSETNX只会在所有给定键都不存在的情况下对键进行设置,而不会像MSET那样直接覆盖键已有的值:如果在给定键当中,即使有一个键已经有值了,那么MSETNX命令也会放弃对所有给定键的设置操作。MSETNX命令在成功执行设置操作时返回1,在放弃执行设置操作时则返回0。
getrange 获取字符串值指定索引范围上的内容:
在redis中存储的值,同样有着和Python一样的索引下标, 从左到右索引是从 0 开始的, 而从右到左 索引则是从 -1 开始的。
通过使用GETRANGE命令,用户可以获取字符串值从start索引开始,直到end索引为止的所有内容:
getrange key start end
而与python唯一不同的是, redis 索引区间取值它是包括 end 的, 而python则不包括,python中则是 要头 不要 尾, redis中,则是全都要。它会包括 start 和 end 共同返回。
setrange 对字符串的值指定索引范围进行设置:
通过使用SETRANGE命令,用户可以将字符串键的值从索引index开始的部分替换为指定的新内容,被替换内容的长度取决于新内容的长度:
执行完设置操作之后,会返回字符串值当前的长度作为结果。
SETRANGE key index substitute
append 命令可以追加新内容到值的末尾:
通过调用APPEND命令,用户可以将给定的内容追加到字符串键已有值的末尾:
append key suffix
使用此命令完成值的追加后, 会返回当前字符串已追加后的值长度:
如果追加的 键的值不存在, 那么append 命令的效果会和 set 命令的值差不多一样, 但是它同样会返回 添加<追加> 的值后的这个键的长度。