博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis笔记整理(一):Redis安装配置与数据类型操作
阅读量:6429 次
发布时间:2019-06-23

本文共 18191 字,大约阅读时间需要 60 分钟。

[TOC]


Redis简介

Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。 内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。   简言之,Redis是一种面向“键/值”对数据类型的内存数据库,可以满足我们对海量数据的快速读写需求。   Redis是一款NoSQL产品。   官网:http://www.redis.io   或者:http://redis.cn/
  • Redis的特点
    Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的k-v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave主从模式的数据备份。
  • Redis的优势
    性能极高——Redis读的速度为11w/s,写的速度为8.1w/s。丰富的数据类型——Redis支持二进制案例的Strings,Lists,Hashes,Sets即Ordered Sets数据类型操作。原子性——Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。丰富的特性——Redis还支持public/subscribe,通知,key过期等特性。
  • Redis应用
    应用在高并发和实时请求的场景,eg新浪微博hash:关注列表,粉丝列表string:微博数,粉丝数(避免使用select count(*) from...)sorted set:TopN,热门微博还有github,stackoverflow也用到了redis

Redis安装配置

Redis安装

windows下直接解压即可使用,主要说明Linux下的安装方式 :

解压:tar -zxvf soft/redis-3.2.0.tar.gz -C app/重命名:mv app/redis-3.2.0/ app/redis编译:make安装:make install PREFIX=/home/uplooking/app/redis

Redis配置

初始配置  修个redis.conf中的配置项  bind uplooking01  daemonize yes(后台运行)  logfile /opt/redis-3.2.0/logs/redis.log(日志文件,目录必须存在)启动服务  make完成之后,在redis-3.2.0/src目录下会出现编译后的redis服务器程序redis-server,还有用于测试的客户端程序redis-cli。  redis-3.2.0]$ src/redis-server redis.conf  当然,如果再执行了make install则会在指定安装目录下生成一个bin目录,同时也会有相关的命令用于操作Redis.启动客户端  redis-3.2.0]$ src/redis-cli -h localhost -p 6379关闭服务  ps -ef | grep redis  找到进程id后直接kill -9就可以了。

Redis配置查看

Redis的配置文件位于Redis的安装目录之下,文件名为redis.conf。可以通过config命令来查看或设置配置项。

查看   语法,Redis config命令格式如下:   redis localost:6379> config get config_set_name   eg: redis localost:6379> config get loglevel   1) "loglevel"   2) "notice"   使用*号获取所有配置项:redis localost:6379> config get *编辑  可以通过修改redis.conf文件或使用config set命令来修改配置  基本语法:  redis localost:6379> config set conf_setting_name new_value  eg: redis localost:6379> config set loglevel "warning"      redis localost:6379> config get loglevel  1) "loglevel"  2) "warning"  -->对当前服务有效,之后当服务重启之后,才会失效

Redis操作

string(字符串)

string是redis最基本的类型,你可以理解成与memcached一模一样的类型,一个key对应一个value。   string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。   string类型是Redis最基本的数据类型,一个键最大能存储512MB。实例   redis 127.0.0.1:6379> SET name "redis.net.cn"OK   redis 127.0.0.1:6379> GET name"redis.net.cn"  在以上实例中我们使用了Redis的SET和GET命令。键为name,对应的值为redis.net.cn。注意:一个键最大能存储512MB。

常见的string操作命令如下:

set key value                   设置指定key的值(会覆盖无视数据类型)                                set name yaohuiyingget key                         获取指定key的值                                get namegetrange key start end          返回key中字符串值的子字符                                getrange name 1 4                                注意:字符串索引从0开始,获取索引片段[start, end],包头包尾getset key value                将给定key的值设为value,并返回key的旧值(old value)                                getset name liuxiangqian                                返回值为yaohuiyingmget key1 [key2..]              获取所有(一个或多个)给定key的值                                mget name name1setex key seconds value         将值value关联到key,并将key的过期时间设为seconds(以秒为单位)setnx key value                 只有在key不存在时设置key的值                                作用同set,唯一和set的区别在于,只有当key不存在的时候,才进行设置,                                而key存在,无法完成覆盖setrange key offset value       用value参数覆写给定key所储存的字符串值,从偏移量offset开始                                对key的原先的value进行局部覆盖,从offset偏移量开始,                                value有多长,就覆盖多长strlen key                      返回key所储存的字符串值的长度mset key value [key value ...]      同时设置一个或多个key-value对MSETNX key value [key value ...]    同时设置一个或多个key-value对,当且仅当所有给定key都不存在psetex key milliseconds value       这个命令和SETEX命令相似,但它以毫秒为单位设置key的生存时间,                                    而不是像SETEX命令那样,以秒为单位incr key                            将key中对应储存的数字值增一                                    对key对应的value进行+1,但是value必须是数字类型的字符串INCRBY key increment                将key所储存的值加上给定的增量值(increment)                                    之定义的步长incrbyfloat key increment           将key所储存的值加上给定的浮点增量值(increment)decr key                            将key中储存的数字值减一decrby key decrement key            所储存的值减去给定的减量值(decrement)append key value                    如果key已经存在并且是一个字符串,                                    APPEND命令将value追加到key原来的值的末尾

hash(哈希)

Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。实例redis 127.0.0.1:6379> HMSET w3ckey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000OKredis 127.0.0.1:6379> HGETALL w3ckey1) "name"2) "redis tutorial"3) "description"4) "redis basic commands for caching"5) "likes"6) "20"7) "visitors"8) "23000"以上实例中 hash 数据类型存储了一些描述信息(name,description, likes, visitors)到hash的w3ckey中。 使用hgetall 获取所有的内容。每个hash可以存储232-1键值对(40多亿)。

常用命令操作如下:

hexists key field               查看hash表key中,指定字段是否存在                                0表示没有,1表示有hget key field                  获取hash表中指定字段的值hgetall key                     获取所有的字段和值hincrby key field increment     为指定字段的整数值加上增量incrementhincrbyfloat key field increment    为指定字段的浮点值加上增量incrementhkeys key                       获取所有的字段hlen key                        获取key的字段的数量hdel key field2 [field2]        删除一个或多个哈是表字段hmget key field1 [field2]       获取所有给定字段的值hmset key f1 v1 [f2 v2]         同时将多个file-value设置到key中hset key field value            将哈希表key的field设置为valuehsetnx key field value          当在field不存在时,设置相关字段的值hvals key                       获取所有的值hscan key cursor [MATCH pattern] [COUNT count]  迭代哈希表中的键值对

list(列表)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。实例redis 127.0.0.1:6379> lpush redis.net.cn redis(integer) 1redis 127.0.0.1:6379> lpush redis.net.cn mongodb(integer) 2redis 127.0.0.1:6379> lpush redis.net.cn rabitmq(integer) 3redis 127.0.0.1:6379> lrange redis.net.cn 0 101) "rabitmq"2) "mongodb"3) "redis"redis 127.0.0.1:6379>列表最多可存储 232-1元素 (4294967295, 每个列表可存储40多亿)。

常用操作命令如下:

注意:关于list的操作,可以分为从左边操作,也可以从右边进行操作l--->left(头部),r---->right(尾部)blpop key1 [key2 ] timeout      移除并获取列表中的第一个元素,如果没有会阻塞列表直到超时【单位是秒s】                                或发现可弹出元素为止                                简言之就是删除key1 key2.。。中的元素,如果没有元素则阻塞,结束条件为                                 要么时间超过了timeout;要么发现有新的元素进来brpop key1 [key2 ] timeout      移除并获取列表中的最后一个元素,如果没有会阻塞列表直到超时或发现可弹出                                元素为止                                同blpop,不同在于删除元素的方向不一致brpoplpush source destination timeout   从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回                                        它,如果没有元素会阻塞列表知道等待超时或发现可弹出元素为止                                        uplooking01:6379> brpoplpush season season1 100                                        "spring"                                        (7.59s)lindex key index                通过索引获取列表中的元素                                注意一个:                                lindex key -1获取的是最后一个元素linsert key before|after pivot value    在列表的元素前或后插入元素                                        uplooking01:6379> lrange season 0 -1                                        1) "winter"                                        2) "autumn"                                        3) "summer"                                        uplooking01:6379> linsert season after summer spring                                        (integer) 4                                        uplooking01:6379> lrange season 0 -1                                        1) "winter"                                        2) "autumn"                                        3) "summer"                                        4) "spring"llen key                        获取列表长度,列表大小lpop key                        移出并获取列表的第一个元素lpush key value1 [value2]       将一个或多个值插入到列表头部lpushx key value                将一个或多个值插入到已存在的列表头部lrange key start stop           获取列表指定返回内的元素                                [start, stop]                                如果要出去lrange中的所有的元素的话                                lrange key 0 -1lrem key count value            移出列表元素                                count > 0: 从头往尾移除值为 value 的元素,1时,表示移除1个元素                                count < 0: 从尾往头移除值为 value 的元素,-2时,表示移除2个元素                                count = 0: 移除所有值为 value 的元素。lset key index value            通过索引设置列表元素的值(list.set(i, value))                                需要大家注意的是一个特殊的索引-1,表示最后一个元素ltrim key start stop            对一个列表进行修剪(trim),也就是说,让列表只保留指定区间内的元素,                                删除其它元素                                [start, stop]                                uplooking01:6379> lrange season 0 -1                                1) "winter"                                2) "autumn"                                3) "summer"                                4) "spring"                                uplooking01:6379> ltrim season 1 2                                OK                                uplooking01:6379> lrange season 0 -1                                1) "autumn"                                2) "summer"rpop key                        移出并获取列表最后一个元素rpoplpush source destination    移出列表的最后一个元素,并将该元素添加到另一列表并返回rpush key value1 [value2]       在列表中添加一个或多个值rpushx key value                为已存在的列表添加值

set(集合)

Redis的Set是string类型的无序集合。    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。sadd命令    添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经存在集合中返回0,key对应的set不存在返回错误。sadd key member实例redis 127.0.0.1:6379> sadd redis.net.cn redis(integer) 1redis 127.0.0.1:6379> sadd redis.net.cn mongodb(integer) 1redis 127.0.0.1:6379> sadd redis.net.cn rabitmq(integer) 1redis 127.0.0.1:6379> sadd redis.net.cn rabitmq(integer) 0redis 127.0.0.1:6379> smembers redis.net.cn1) "rabitmq"2) "mongodb"3) "redis"  注意:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

常用操作命令如下:

sadd key member1 [member2]      向集合添加一个或多个成员scard key                       获取集合的成员数(size)sdiff key1 [key2]               返回给定所有集合的差集                                集合A={1, 2, 3, 4, 5} 集合B={2, 3, 6, 8}                                A∩B  = {2, 3}                                A∪B = {1, 2, 3, 4, 5, 6, 8}                                A-B(差集)  = {1, 4, 5, 6, 8}                                            {1, 4, 5}√                                uplooking01:6379> sdiff A B                                1) "1"                                2) "4"                                3) "5"sdiffstore dest key1 [key2]     返回并保存给定集合差集保存到dest中                                uplooking01:6379> sdiffstore tmp A B                                (integer) 3                                uplooking01:6379> smembers tmp                                1) "1"                                2) "4"                                3) "5"sinter key1 [key2]              返回给定集合的交集                                uplooking01:6379> sinter A B                                1) "2"                                2) "3"sinterstore dest key1 [key2]    返回并保存给定集合的交集到dest中sismember key member            判断member元素是否是集合key的成员                                uplooking01:6379> sismember A 3                                (integer) 1                                uplooking01:6379smembers key                    返回集合中所有成员smove src dest member           将member元素从src移动到dest中spop key                        移除并返回集合中的一个随机元素srandmember key [count]         返回集合中一个或多个随机数                                随机返回集合key中的count个元素,没有count,返回1个                                uplooking01:6379> srandmember A                                "1"                                uplooking01:6379> srandmember A 2                                1) "3"                                2) "4"srem key member1 [member2]      移除集合中一个或多个成员sunion key1 [key2]              返回所有给定集合的并集---就是数学中的并集的概念                                uplooking01:6379> sunion A B                                1) "1"                                2) "2"                                3) "3"                                4) "4"                                5) "5"                                6) "6"                                7) "8"sunionstore dest key1 [key2]    返回并保存给定集合的并集到destsscan key cursor [match pattern] [count count]      迭代集合中的元素

zset(有序集合)

Redis zset和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。   zset的成员是唯一的,但分数(score)却可以重复。   zadd命令 添加元素到集合,元素在集合中存在则更新对应score   zadd key score member 实例redis 127.0.0.1:6379> zadd redis.net.cn 0 redis(integer) 1redis 127.0.0.1:6379> zadd redis.net.cn 0 mongodb(integer) 1redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq(integer) 1redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq(integer) 0redis 127.0.0.1:6379> ZRANGEBYSCORE redis.net.cn 0 10001) "redis"2) "mongodb"3) "rabitmq"

常用操作命令如下:

zadd key score1 member1  [score2 member2]       想有序集合添加一个或多个成员,                                                或是更新已经存在成员的分数                                          uplooking01:6379> zadd website 0.01 www.uplooking.com                                          (integer) 1                                          uplooking01:6379> zadd website 0.05 www.baidu.com                                          (integer) 1                                          uplooking01:6379> zadd website 0.1 www.google.com                                          (integer) 1                                          uplooking01:6379> zadd website 1 www.taobao.com                                          (integer) 1                                          uplooking01:6379> zadd website 0.005 www.jd.com                                          (integer) 1zcard key                               获取有序集合的成员数                                        uplooking01:6379> zcard website                                        (integer) 5zcount key min max                      计算在有序集合中指定区间分数的成员数                                        获取分数区间[min, max]中元素                                         uplooking01:6379> zcount website 0.01 0.1                                         (integer) 3zincrby key increment member            有序集合中对指定成员的分数上增量incr                                      uplooking01:6379> zincrby website 0.01 www.uplooking.com                                      "0.02"    zinterstore dest nkeys key [key..]      计算给定的一个或多个有序集的交集并保存在新的有序集合dest中zlexcount key min max                   在有序集合中计算指定字典区间内成员数量                                        需要清楚的是                                        可以使用-代表,得分最小的元素,使用+代表得分最大的元素                                        zlexcount key - + 得到就是集合的size                                        min===>[member1                                        max===>[member2                                        得到的元素个数就是在区间[member1, member2]内的元素个数                                        redis> ZADD myzset 1 a 2 b 3 c 4 d 5 e 6 f 7 g                                        (integer) 7                                        redis> zrange myzset 0 -1                                        1) "a"                                        2) "b"                                        3) "c"                                        4) "d"                                        5) "e"                                        6) "f"                                        7) "g"                                        redis> ZLEXCOUNT myzset - +                                        (integer) 7                                        redis> ZLEXCOUNT myzset [c +                                        (integer) 5                                        redis> ZLEXCOUNT myzset - [c                                        (integer) 3                                        redis>      zrange key start stop [withscores]      通过索引区间返回有序集合成指定区间内的成员                                        特殊的一个写法zrange key 0 -1返回所有的元素zrangebylex key min max [limit offset count]    通过字典区间返回有序集合的成员zrangebyscore key min max [withscores] [limit]  通过分数返回有序集合指定区间内的成员zrank key member                        返回有序集合中指定成员的索引zrem key member [member ...]            移除有序集合中的一个或多个成员                                        返回1,删除成功,返回0,没有这个元素zremrangebylex key min max              移除有序集合中给定的字典区间的所有成员zremrangebyrank key start stop          移除key中给定的排名区间的所有成员                                        排名就是索引zremrangebyscore key start stop         移除key中给定的分数区间的所有成员                                        分数就是scorezrevrange key start stop [withscores]   返回有序key中指定区间内的成员,通过索引,分数从高到低                                        和zrange key start stop反过来zrevrangebysocre key max min [withscores]   返回有序key中指定分数区间内的成员,通过索引,分数从高到低zrevrank key memeber                    返回key中指定成员的排名,key成员按分数值递减排序zscore key member                       返回key中member的分数zunionstore dest numkeys key [key...]   计算给定的一个或多个有序集的并集,并存储到新的dest中zscan key cursor [match pattern] [count count]  迭代有序集合中的元素(包括元素成员和元素分值)                                                uplooking01:6379> zscan website 1                                                1) "0"                                                2) 1) "www.jd.com"                                                   2) "0.0050000000000000001"                                                   3) "www.uplooking.com"                                                   4) "0.02"                                                   5) "www.baidu.com"                                                   6) "0.050000000000000003"                                                   7) "www.taobao.com"                                                   8) "1"

Redis常见命令

keys *    列举出所有的keytype key    获取对应key的数据类型select [0-15]     切换到某一个数据库中rename oldKey newKey    将oldKey重命名为newKey终端中属于密码的两种方式:    第一种:        连接的时候:redis-3.2.0]# src/redis-cli -h uplooking03 -a uplooking    第二中:        登陆之后再输入密码:            auth uplooking(密码)停止redis服务的命令:    src/redis-cli -h uplooking01 -p 6379 shutdown 1、键值相关命令      keys * 取出当前所有的key      exists name 查看redis是否有name这个key      del name 删除key name      expire confirm 100 设置confirm这个key100秒过期      ttl confirm 获取confirm 这个key的有效时长      select 0 选择到0数据库 redis默认的数据库是0~15一共16个数据库      move confirm 1 将当前数据库中的key移动到其他的数据库中,      persist confirm 移除confirm这个key的过期时间      randomkey 随机返回数据库里面的一个key      rename key2 key3 重命名key2 为key3      type key2 返回key的数据类型2、服务器相关命令      ping PONG返回响应是否连接成功      echo 在命令行打印一些内容      select 0~15 编号的数据库      quit  /exit 退出客户端      dbsize 返回当前数据库中所有key的数量      info 返回redis的相关信息      config get dir/* 实时传储收到的请求      flushdb 删除当前选择数据库中的所有key      flushall 删除所有数据库中的数据库

转载地址:http://hljga.baihongyu.com/

你可能感兴趣的文章
直接读取图层
查看>>
springsecurity 源码解读 之 RememberMeAuthenticationFilter
查看>>
HTML5标准学习 - 编码
查看>>
JS 时间戳转星期几 AND js时间戳判断时间几天前
查看>>
UVa11426 最大公约数之和(正版)
查看>>
SQL练习之求解填字游戏
查看>>
UIApplication
查看>>
12:Web及MySQL服务异常监测案例
查看>>
数据库性能优化之冗余字段的作用
查看>>
DBA_实践指南系列9_Oracle Erp R12应用补丁AutoPatch/AutoControl/AutoConfig(案例)
查看>>
数据库设计三大范式
查看>>
ionic 字体的导入方法
查看>>
内部类详解
查看>>
类加载机制
查看>>
mongodb int型id 自增
查看>>
Java中的4种代码块
查看>>
Ocelot(七)- 入门
查看>>
生成水杯热气
查看>>
程序员工作心法
查看>>
三个常用的PHP图表类库
查看>>