Redis 的安装和基本操作

Redis 介绍

Redis是一种主要基于内存存储和运行的,能快速响应的键值数据库产品。
Redis数据库产品用ANSI C语言编写而成,是开源的,遵守BSD协议。
在读写响应性能上,传统关系型数据库<MongoDB等基于磁盘读写的NOSQL数据库<Redis数据库。
在应用业务范围上,传统的关系型数据库应用业务范围最广,MongoDB主要应用于基于互联网的Web业务应用。Redis只能解决Internet应用环境下的特定应用业务。
总之,Redis由于是基于内存读写,所以读写速度在上面三者中是最快的(单服务器每秒插入处理速度可以超过八万条,这在高并发处理方面很有利),另外,Redis的应用范围相对较窄,但是互联网业务环境下很多大型网站需要它

一、Redis的安装(Windows)

Redis可以在Windows,Linux,Ubuntu等系统下安装,在这里我是在Windows(64)位系统下安装的Redis-x64-3.0.504版本。 安装包在如下链接里:Redis提取码i0x1

下载后把安装包复制到自定义盘符的新建redis文件夹中,如,D:\redis。并将压缩包解压到当前文件夹。
首先,打开cmd命令行,用cd命令进入到D:\redis,输入 redis-server.exe redis.windows.conf启动服务器,会看到如下结果:
在这里插入图片描述
此时不要关闭这个cmd窗口,否则将无法访问服务器端,再另外打开一个cmd窗口
进入到D:/redis,运行redis-cli.exe -h 127.0.0.1 -p 6379表示连接此服务,端口 6379
下面是进行一些基本操作进行测试
设置键值对:set a A
取出键值对:get a
结果显示如下图:在这里插入图片描述
能够成功运行,表示安装成功。

二、Redis的数据类型

redis支持五种数据类型,截至2017年六月,Redis官网提供的数据结构类型已经达到八种。

1.字符串(String)

字符串是redis 最简单的数据结构
字符串内容是二进制安全的(二进制安全是指,在传输数据时,保证二进制数据的信息安全,也就是不被篡改、破译等,如果被攻击,能够及时检测出来。)也就是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

2.列表(List)

列表是由若干插入顺序排序的字符串元素组成的集合。
按照链表的插入顺序排序,读写操作时只能从其两头开始。(由于采用链表技术实现,所以在链表头插入新字符串速度非常快)。

3.集合(set)

不重复且无序的字符串元素构成的一个整体。(和列表加以区分)

4.散列表(Hash)

散列表可以存储多个键值对的映射,是无序的一种数据集合。
键中间可以采用类似:的隔离符号。键必须为字符串型内容,值可以是字符串型也可以是数字型。
Hash特别适用于存储一个对象。

5.有序集合(Sorted Set)

有序集合和散列一样都是由键值对构成的数据集合。
但是有序集合根据值进行自动排序,而散列值表不排序。有序集合可以对值进行直接操作,而散列通过键查找来获取值。
有序集合的键字符串必须唯一,值可以重复,值必须可以解析为浮点数。

6.位图(Bitmap)

7.HyperL ogLog

三、Redis 命令

上面介绍了redis数据库基于键值基本存储原理的基础上,一些经过细化分类的数据类型,下面关于是redis命令的一些比较基本的操作。
字符串命令为例
1)基本字符串操作命令包括设置,获取,删除,取长度等。
Set
set key value #设置指定key的值

127.0.0.1:6379> set name "yinyuke" #设置键名为name,值为yinyuke的字符串
OK
127.0.0.1:6379>

127.0.0.1:6379> set book "NOSQL" EX 1   #设置一秒后book过期
OK
127.0.0.1:6379> set Cname "ᅭ�ᅮ↑￧₩"    #中文出现字符编码不匹配问题
OK
127.0.0.1:6379> get Cname
"\xd2\xf3\xd3\xea\xe7\xe6"

MSet命令

127.0.0.1:6379> MSet book1 "math" book2 "English"   #对多个键设置对应的值
OK

MSetNX

127.0.0.1:6379> MSetNX book1ID 1 book2ID 2
(integer) 1
127.0.0.1:6379> MSetNX book3ID 3 book1ID 1
(integer) 0   #出现重复设值,返回0 ,整条命令不操作

Get
get key #返回键对应的值,若值不存在,则返回nil

 127.0.0.1:6379> get book1
"math"
127.0.0.1:6379> get book3
(nil)

MGet

 127.0.0.1:6379> MGet book1 book2
1) "math"
2) "English"
127.0.0.1:6379> MGet book1 book2 book3
1) "math"
2) "English"
3) (nil)

Del

127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> del book1 book2   #可以同时删除多个
(integer) 2
127.0.0.1:6379> Mget book1 book2
1) (nil)
2) (nil)

2)修改字符串操作命令包括Append,GetRange,GetSet,SetRange等
StrLen
StrLen key

127.0.0.1:6379> set name "Siri"
OK
127.0.0.1:6379> StrLen name
(integer) 4 #返回字节数,一个字母一个字节如果为汉字,则一个汉字两个字节

Append
Append key value

127.0.0.1:6379> append student "a"
(integer) 1
127.0.0.1:6379> append student "b"
(integer) 2
127.0.0.1:6379> get student
"ab"

GetRange

127.0.0.1:6379> getrange sentence 1 6   #正向从0 开始数
"hat is"
127.0.0.1:6379> get range -4 -1   #从后往前进行字符串截取
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379>

GetSet

127.0.0.1:6379> getset student1 "c"
(nil)   #指定的键不存在,返回nil
127.0.0.1:6379> getset student a
"ab"   #指定的键存在,设置新值后返回旧值

其他的命令操作因为过于繁杂,就先不在这里演示,详细可以去看参考书籍。

四、python连接Redis

首先在连接之前,需要先在Python中安装redis模块
在命令行中输入 pip3 install redis 即可
但是在执行中我的cmd却出现了以下错误,导致python代码无法运行
WARNING: You are using pip version 19.3.1; however, version 20.0.2 is available.
在网上搜索以后,发现应该是pip版本的问题,我找到了如下解决方法:
在cmd命令行中输入如下命令:
在这里插入图片描述再进行上述操作即可。
在这里插入图片描述
另外,代码在运行时,还会出现以下错误:
ERR Client sent AUTH, but no password is set
是因为
Redis服务器没有设置密码,但客户端向其发送了AUTH(authentication,身份验证)请求。
这时,需要进行密码设置,具体操作如下:

 127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> CONFIG set requirepass "123456"
OK
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> set name yin
OK

此时,再去运行代码,就能正确运行了
python连接redis并进行一些基本操作的代码如下:

 import redis
HOST = 'localhost'PORT = '6379'PASSWORD = '123456'
r_db = redis.Redis(host=HOST,                   port=PORT,                   password=PASSWORD,                   decode_responses=True,   # decode_responses=True,写入value中为str类型,否则为字节型                   db='2')                  # 默认不写是db0
r_db.set('name','yuke')
# set的几个参数:'''前面两个,一个key,一个valueex,过期时间(秒)px,过期时间(毫秒)nx,如果设置为True,则只有name不存在时,当前set操作才执行xx,如果设置为True,则只有name存在时,当前set操作才执行'''
print(r_db['name'])print(r_db.get('name'))print(type(r_db.get('name')))

输出结果为:

yuke
yuke
<class 'str'>

参考书籍《NOSQL数据库入门与实践(基于MongoDB、Redis)》(刘瑜 王胜松著)

猜你喜欢

转载自blog.csdn.net/taozhiyaoyao121/article/details/106280826