隐藏

Redis使用教程

发布:2023/9/19 9:43:36作者:管理员 来源:本站 浏览次数:442

阅读目录


   一、NoSQL简介

   二、Redis安装和运行

   三、基本配置

   四、数据操作

   五、发布订阅

   六、主从配置

   七、与python交互


回到顶部

一、NoSQL简介

1.NoSQL


   全名为Not Only SQL,指的是非关系型的数据库。

   随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来。

2.优点与缺点分析


   1) 优点


       ①高可扩展性

       ②分布式计算

       ③低成本

       ④架构的灵活性,半结构化数据

       ⑤没有复杂的关系


   2) 缺点


       ①没有标准化

       ②有限的查询功能(到目前为止)

       ③最终一致是不直观的程序

回到顶部

二、Redis安装和运行

1.redis官方网站


   https://redis.io/,推荐下载稳定版本(stable)。

2.下载



tar zxvf redis-3.2.5.tar.gz


   ①复制,推荐放到usr/local目录下



sudo mv -r redis-3.2.3/* /usr/local/redis/


   ②进入redis目录



cd /usr/local/redis/


   ③生成



sudo make


   ④测试



sudo make test


   ⑤安装,将redis的命令安装到/usr/bin/目录,这段运行时间会较长



sudo make install


   ⑥运行,启动服务器



redis-server


   ⑦按ctrl+c停止,启动客户端:在新终端中运行如下代码



redis-cli


   ⑧运行命令



pingset 'a' '123'


   ⑨当添加键值后,发现在当前运行的目录下,创建了一个文件:dump.rdb,这个文件用于将数据持久化存储

回到顶部

三、基本配置

1.redis.conf为配置文件


   在源文件/usr/local/redis目录下。

2.绑定地址


   如果需要远程访问,可将此行注释。



bind 127.0.0.1端口,默认为6379

3.守护进程


   ①如果以守护进程运行,则不会在命令行阻塞,类似于服务。

   ②如果以非守护进程运行,则当前终端被阻塞,无法使用。

   ③推荐改为yes,以守护进程运行。



daemonize no|yes

4.数据文件



dbfilename dump.rdb

5.数据文件存储路径


   ①dir的默认值为./,表示当前目录。

   ②推荐改为:dir /var/lib/redis。

6.使用配置文件方式启动


   ①直接运行redis-server会直接运行,阻塞当前终端。

   ②一般配置文件都放在/etc/目录下。



sudo cp /usr/local/redis/redis.conf /etc/redis/


   ③推荐指定配置文件启动。



sudo redis-server /etc/redis/redis.conf

7.停止redis服务



ps ajx|grep redissudo kill -9 redis的进程id

回到顶部

四、数据操作

1.键的类型


   redis是key-value的数据,所以每个数据都是一个键值对,键的类型是字符串。

2.值的类型分为五种


   ①字符串string

   ②哈希hash

   ③列表list

   ④集合set

   ⑤有序集合zset

3.数据操作的全部命令


   可以查看中文网站,http://redis.cn/commands.html。

4.String


   1) 设置键值



set key value


   2) 设置键值及过期时间,以秒为单位



SETEX key seconds value


   3) 设置多个键值



MSET key value [key value ...]


   4) 根据键获取值,如果不存在此键则返回nil



GET key


   5) 根据多个键获取多个值



MGET key [key ...]


   6) 运算



INCR key


   7) 将key对应的value加整数



INCRBY key increment


   8) 将key对应的value减1



DECR key


   9) 将key对应的value减整数



DECRBY key decrement


   10) 追加值



APPEND key value


   11) 获取值长度



STRLEN key

5.键的命令


   1) 查找键,参数支持正则



KEYS pattern


   2) 判断键是否存在,如果存在返回1,不存在返回0



EXISTS key [key ...]


   3) 查看键对应的value的类型



TYPE key


   4) 删除键及对应的值



DEL key [key ...]


   5) 设置过期时间,以秒为单位



EXPIRE key seconds


   6) 查看有效时间,以秒为单位



TTL key

6.hash


   1) 设置单个属性



HSET key field value


   2) 设置多个属性



HMSET key field value [field value ...]


   3) 获取一个属性的值



HGET key field


   4) 获取多个属性的值



HMGET key field [field ...]


   5) 获取所有属性和值



HGETALL key


   6) 获取所有的属性



HKEYS key


   7) 返回包含属性的个数



HLEN key


   8) 获取所有值



HVALS key


   9) 判断属性是否存在



HEXISTS key field


   10) 删除属性及值



HDEL key field [field ...]


   11) 返回值的字符串长度



HSTRLEN key field

7.List


   1) 在头部插入数据



LPUSH key value [value ...]


   2) 在尾部插入数据



RPUSH key value [value ...]


   3) 在一个元素的前|后插入新元素



LINSERT key BEFORE|AFTER pivot value


   4) 设置指定索引的元素值



LSET key index value


   5) 移除并且返回 key 对应的 list 的第一个元素



LPOP key


   6) 移除并返回存于 key 的 list 的最后一个元素



RPOP key


   7) 返回存储在 key 的列表里指定范围内的元素



LRANGE key start stop


   8) 裁剪列表,改为原集合的一个子集



LTRIM key start stop


   9) 返回存储在 key 里的list的长度



LLEN key


   10) 返回列表里索引对应的元素



LINDEX key index

8.Set


   1) 添加元素



SADD key member [member ...]


   2) 返回key集合所有的元素



SMEMBERS key


   3) 返回集合元素个数



SCARD key


   4) 求多个集合的交集



SINTER key [key ...]


   5) 求某集合与其它集合的差集



SDIFF key [key ...]


   6) 求多个集合的合集



SUNION key [key ...]


   7) 判断元素是否在集合中



SISMEMBER key membe

9.Zset


   1) 添加



ZADD key score member [score member ...]


   2) 返回指定范围内的元素



ZRANGE key start stop


   3) 返回元素个数



ZCARD key


   4) 返回有序集key中,score值在min和max之间的成员



ZCOUNT key min max


   5) 返回有序集key中,成员member的score值



ZSCORE key member

回到顶部

五、发布订阅

1.发布订阅  


   ①发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅。

   ②订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的。

   ③发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑。

   ④客户端发到频道的消息,将会被推送到所有订阅此频道的客户端。

   ⑤客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来。

2.消息的格式


   1) 消息类型,包含三种类型


       ①subscribe:表示订阅成功。如果第一部分的值为subscribe,则第二部分是频道,第三部分是现在订阅的频道的数量。          

       ②unsubscribe:表示取消订阅成功。如果第一部分的值为unsubscribe,则第二部分是频道,第三部分是现在订阅的频道的数量,如果为0则表示当前没有订阅任何频道,当在Pub/Sub以外状态,客户端可以发出任何redis命令。

       ③message:表示其它终端发布消息。如果第一部分的值为message,则第二部分是来源频道的名称,第三部分是消息的内容。    


   2) 订阅



SUBSCRIBE 频道名称 [频道名称 ...]


   3) 取消订阅,如果不写参数,表示取消所有订阅



UNSUBSCRIBE 频道名称 [频道名称 ...]


   4) 发布



PUBLISH 频道 消息

回到顶部

六、主从配置

1.主从配置


   1) 设置主服务器的配置



bind 192.168.1.10


   2) 设置从服务器的配置



bind 192.168.1.11 slaveof 192.168.1.10 6379


   3) 在master和slave分别执行info命令,查看输出信息


   4) 在master上写数据



set hello world


   5) 在slave上读数据



get hello

回到顶部

七、与python交互

1.客户端代码联网安装


   http://redis.cn/clients.html。



sudo pip install redis


   使用源码安装



unzip redis-py-master.zipcd redis-py-mastersudo python setup.py install

2.交互代码


   1) 引入模块



import redis


   2) 连接



try:        

   r=redis.StrictRedis(host='localhost',port=6379)

except Exception,e:        

   print e.message


       ①根据数据类型的不同,调用相应的方法,完成读写。



r.set('name','hello')r.get('name')


       ②pipline:缓冲多条命令,然后一次性执行,减少服务器-客户端之间TCP数据库包,从而提高效率。



pipe = r.pipeline()pipe.set('name', 'world')pipe.get('name')pipe.execute()


   3) 封装


       连接redis服务器部分是一致的,这里将string类型的读写进行封装。



import redis


class RedisHelper():          

   def __init__(self,host='localhost',port=6379):                

       self.__redis = redis.StrictRedis(host, port)

               

   def get(self,key):                

       if self.__redis.exists(key):                        

           return self.__redis.get(key)                

       else:                        

           return ""        

           

   def set(self,key,value):                

       self.__redis.set(key,value)