Redis数据库的使用

Redis基本介绍

            Redis是一个开源的使用C语言编写,支持网络,可基于内存亦可持久化的日志型,Key-Value数据库,并提供多种语言的API

Redis特性

        1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用

        2.Redis不仅仅支持简单的Key-Value类型的数据,同时还提供list,set,zset,hash等数据结构的存储

        3.Redis支持数据的备份,即master- slave模式的数据备份

Redis优势

        1.性能极高,读写速度快

        2.丰富的数据类型,支持Strings,Lists,Hash,Sets及Ordered Sets数据类型的操作

          3.原子性,Redis的所有操作都是原子性,不会出现多进程,多线程的抢的问题,同时Redis还支持几个操作合并后的原子性执行

Redis应用场景

            1.用来做缓存,redis的所有数据存放于内存中(内存数据库)

             2.可以在某些特定应用场景下替代传统的数据库,如社交类的应用

             3.在一些大型系统中,巧妙地实习那一些特定的功能:session共享,购物车等

Redis的安装

            基于Linux系统下的安装

            1.下载:wget http://download.redis.io/releases/redis-3.2.8.tar.gz

            2.解压:tar -zxvf redis-3.2.8.tar.gz

            3.复制,放到/usr/local/redis下面:sudo mv ./redis-3.2.8  /usr/local/redis

            4.进入 /usr/local/redis/文件下: cd  /usr/local/redis/

            5.生成:sudo make

            6.进行测试:sudo make test

            7.安装redis:sudo make install 会安装到/usr/local/bin下面

            8.进入/usr/local/bin,查看ls  -la

             9.安装成功后移动配置文件:cd /usr/local/redis;sudo cp redis.conf /etc/redis/redis.conf

Redis配置

            核心配置选项

                    1.绑定ip:如果需要远程访问,可以将此行注释,或绑定一个真实的ip

                                bind 127.0.0.1

                    2.端口,默认位6379

                                port 6379

                    3.是否以守护进程进行

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

                                2)如果以非守护进程运行,则当前终端被阻塞

                                3)设置为yes表示守护进程,设置为no表示非守护进程

                                4)推荐设置为yes

                                daemonize yes

                       4.数据文件

                                dbfilename dump.rdb 写入这个文件中

                        5.数据文件存储路径

                                dir  /var/redis 配置存储路径

                        6.日志文件

                                logfile  /var/log/redis/redis-server.log

                        7.数据库,默认16个

                                  database 16

                        8.主从复制,类似于双机备份

                                   slaveof

Redis的服务器端和客户端的启动

        服务器端

                使用ps -ef|grep redis查看redis是否启动

                启动redis服务器端:sudo redis-server /etc/redis/redis.conf,停止redis服务器:sudo kill -9 +redis的pid (这是更改了配置文件位置的启动方法)

                若没有更改配置文件位置,则sudo service redis start启动,停止是sudo service redis stop

          客户端

                redis-cli  进行连接

                输入ping  进行测试,若回复pong,则连通

                连接成功默认是连接第一个数据库,默认16个,0-15来标识,用select n(表示切换到哪一个数据库) 

                   exit 退出


Redis的数据结构

            redis是key-value的数据结构,每条数据都是一个键值对

             键的类型是字符串,且键不能重复         

             值的类型分为五种: 1.字符串string  2.哈希hash  3.列表list  4.集合set  5.有序集合zset

键命令                

            适合所有类型的命令

             1.查找键,参数支持正则表达式:keys pattern

                    例如:查看说有键

                            keys *

                     例如:查看名称中以a开头的键

                               keys a*

            2.判断键是否存在,如果存在返回1,如果不存在返回0:exists key

                    例如:判断键a1是否存在

                                exists  a1

            3.查看键对应的value的类型:type key

                例如:查看键a1的值类型,为redis支持的五种类型中的一种

                            type a1

            4.删除键及对应的值:del key1 key2 ...

                    例如:删除键a2,a3

                        del a2 a3

             5.如果没有指定过期时间则一直存在,直到使用del移除,设置过期时间,以秒为单位:expire key seconds

                        例如:设置键a1的过期时间为3秒

                            expire a1 3

              6.查看键的有效时间,以秒为单位:ttl key

                    例如:查看键a的有效时间

                        ttl a


string类型

        字符串类型是Redis中最为基础的数据存储类型,可以接受任何格式的数据,Redis中字符串类型的Value最多可以容纳的数据长度512M 

        保存

        如果设置的键不存在则为添加,如果设置的键已经存在,则为修改

         1.设置键值:set key value

          例如: 设置键位name值为little_raccoon的数据

               set name little_raccoon

        2.设置键值以及过期时间,以秒为单位:setex key seconds value

           例如:设置键位a值为aa过期时间为3秒的数据

                    setex a 3 aa

      3.设置多个键:mset key1 value1 key2 value2 ...

           例如:设置键a1 值为python 键a2 值为 java 键a3 值为 c++

                    mset a1 python a2 java a3 c++

    4.追加值:append key value

        例如:往键为a1中追加值world

            append a1 world

        获取

         1.根据键获取值,如果不存在此键则返货null:get key

                例如:获取键位name的值

                        get name

          2.获取多个键的值:mget key1 key2 ...

                例如获取a1,a2,a3的值

                    mget a1 a2 a3


hash类型

        hash用于存储对象,对象的结构为属性,值。值得类型为string

        增加,修改

                1.设置单个属性:hset key field value

                   例如:设置键user的属性name为raccoon

                     hset user name raccoon

                2.设置多个属性:hmset key field1 value1 field2 value2 ...

                    例如:设置键u2的属性name为raccoon ,属性age为18

                        hmset u2 name raccoon age 18 

        获取   

               1. 获取指定键所有属性:hkeys key

                    例如:获取键u2的所有属性

                        hkeys u2

               2.获取一个属性的值:hget key field

                    例如:获取键u2属性name的值

                        hget u2 name

                3.获取多个属性的值:hmget key field1 field2...

                    例如:获取键u2属性name,age的值

                        hmget u2 name age

               4.获取所有的属性值:hvals key

                    例如:获取键u2所有属性的值

                        hvals u2

       删除

                1.删除整个hash键及值,使用del命令

                2.删除属性,属性对应的值会被一起删除:hdel key field1 field2...

                        例如:删除键u2的属性age

                            hdel u2 age

List类型

            列表的元素类型为string,按照插入顺序排序 

             增加

                    1.在左侧插入数据:lpush key value1 value2...

                    例如:从键为a0的列表左侧加入数据a,b,c

                        lpush a0 a b c

                    2.在右侧插入数据:rpush key value1 value2...

                        例如:从键为a0的列表右侧加入数据0,1

                                rpush a0 0 1

                    3.在指定元素的前或后插入新元素:linsert key before或after 现有元素 新元素

                        例如:在键位a0的列表中元素b前面加入3

                                linsert a0 before b 3

        获取

                返回列表里指定范围内的元素:lrange key start stop

                                1.start,stop位元素的下标索引

                                2.索引从左侧开始,第一个元素位0

                                3.索引可以为负数,表示从尾部开始计数,如-1表示最后一个元素

                例如:获取键为a0的列表所有元素

                            lrange a0 0 -1

        设置指定索引位置的元素值

                 1.索引从左侧开始,第一个元素为0

                  2.索引可以为负数,表示尾部开始计数,如-1表示最后一个元素:lset key index value

                        例如:修改键位a0列表中下标位1的元素值位world

                                lset a 1 world

        删除

                1.删除指定元素:lrem key count value

                        将列表中前count次出现的值位value的元素移除

                        count>0:从头往尾移除

                        count<0: 从尾往头移除

                        count = 0:移除所有

                    例如:向列表l1中加入元素a,b,a,b,a,b

                            lpush l1 a b a b a b

                              从l1列表右侧开始删除2个b

                                lrem l1 -2 b

                                查看列表l1 的所有元素

                                lrange l1 0 -1

set类型

            无序集合,元素为string类型,元素具有唯一性,不重复,对于集合没有修改的操作

            增加

                    1.添加元素:sadd key member1 member2...

                          例如:向键s1中添加元素black white yellow

                                sadd s1 black white yellow 

             获取

                    1.获取所有的元素:smembers key

                        例如:获取键s1中的所有元素

                            smembers s1

             删除

                    1.删除指定的元素:srem key members1 members2 ...

                              例如:删除键为s1的集合中元素black

                                    srem s1 black

zset类型

                有序的集合,元素为string类型,元素具有唯一性,不重复性,每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序,没有修改操作

                增加

                       1添加:zadd key score1 member1 score2 member2...

                            例如:向键z1中添加元素lisi,wangwu,zhangsan,liuming,权重分别为4,5,6,3

                        zadd z1 4 lisi 5 wangwu 6 zhangsan 3 liuming


               获取

                        1.获取指定范围内的元素:zrange key start stop

                                        start,stop为元素的下标索引

                                         索引从左侧开始,第一个元素为0

                                         索引可以是负数,表示从尾部开始计数,如-1表示最有一个元素

                                   例如:获取z1集合中的所有元素

                                            zrange z1 0 -1

                        2.返回score值在min和max之间的成员:zrangebyscore key min max

                                    例如:获取z1集合中权重为5和6之间的成员

                                            zrangebyscore z1 5 6

                        3.返回成员member的score值:zscore key member

                                例如:获取z1集合元素zhangsan的权重

                                            zscore z1 zhangsan

                 删除

                        1.删除指定元素:zrem key member1 member2 ...

                               例如:删除集合z1中元素zhangsan

                                    zrem z1 zhangsan

                        2.删除权重在指定范围的元素:zremrangebyscore key min max

                                例如:删除集合z1中权重在5,6之间的元素

                                            zremrangebyscore z1 5 6

Redis参考文档: http://www.redis.cn/


Redis与python的交互

                    1.在虚拟环境中安装redis:pip install redis

                    2.调用模块:from redis import *

                    3.通过init创建对象,指定参数host,port与指定的服务器和端口连接,host默认为localhost,port默认为6379,db默认为0

                        sr = StrictRedis(host='localhost',port=6379,db=0)

                        简写:sr = StrictRedis()

                        根据不同的类型,拥有不同的实例方法可以调用,与前面学的redis命令对应

     用Redis数据库存储session

                                django的session默认是存储在数据库里面的,可以将其放进redis里面

                        1.需要在虚拟环境中安装一个包:pip install django-redis-sessions==0.5.6

                        2.修改settings文件,增加如下内容:

                                            SESSION_ENGINE = redis_sessions.session

                                            SESSION_REDIS_HOST = 'localhost'

                                            SESSION_REDIS_PORT = 6379

                                            SESSION_REDIS_DB = 2

                                            SESSION_REDIS_PASSWORD = ''

                                            SESSION_REDIS_PREFIX = 'session'  #session:唯一标识码



    

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • django-redis 中文文档django-redis 基于 BSD 许可, 是一个使 Django 支持 R...
    天空蓝雨阅读 3,177评论 0 1
  • redis中的5种数据类型: redis的数据存储:key=value 键值对 key<键>的数据类型:字符串 v...
    AAA年华阅读 6,288评论 0 0
  • Redis是一个高性能的key-value数据库,并且有以下三个特点: Redis支持数据的持久化,可以将内存中的...
    JJaden阅读 3,188评论 0 0
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 9,512评论 2 27
  • 一、Redis基础 1.概述 Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的W...
    郑元吉阅读 2,635评论 0 0

友情链接更多精彩内容