• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
李先森博客
博客园    首页    新随笔    联系   管理    订阅  订阅

redis使用

redis介绍:

  1. redis是开源,BSD许可,高级的key-value存储系统.
  2. 可以用来存储字符串,哈希结构,链表,集合,因此,常用来提供数据结构服务.

 

redis和memcached对比:

  1. redis可以用来做存储(storge), 而memccached是用来做缓存(cache),这个特点主要因为其有”持久化”的功能.
  2. 存储的数据有”结构”,对于memcached来说,存储的数据,只有1种类型--”字符串”,而redis则可以存储字符串,链表,哈希结构,集合,有序集合.

 

Redis下载安装

1.访问redis官方站点redis.io来进行下载安装(下载稳定版即可stable)

2.解压源码并进入文件目录

3.直接使用make进行安装(redis不用configure),原因:源码包是编译过之后的源码

4.make完成之后使用make test来进行测试编译情况

5.如果想安装到你指定的目录的话:比如安装的/usr/local/redis; 使用 make PREFIX=/usr/local/redis install进行安装

6.make install完成后会有这几个文件如下:

redis-benchmark  redis性能测试工具

redis-check-aof    redis日志文件检测工(比如断电造成日志损坏,可以检测并修复)

redis-check-dump   redis快照文件检测工具

redis-cli      redis客户端

redis-server    redis服务端

7.复制配置文件到redis安装目录

cp /配置文件路径/redis.conf  /usr/local/redis

8.启动redis服务

/redis安装目录/redis/bin/redis-server  ./redis安装目录下的配置文件/redis.conf 进行启动

连接redis /redis安装目录/redis/bin/redis-cli [-h localhost -p 6379 ]默认

9.如果想让redis在后台进程运行,需要编辑redis.conf配置文件,修改如下:

找到daemonize yes 一般默认是no改为yes就是允许后台进程运行

redis 对于key的操作常用命令:

  1. del key key1 key2..keyn 作用:删除一个或者多个键,返回值:返回删除key的数量
  2. rename key newkey  作用:修改key或给key赋值一个新key, 返回值:如果key已经存在,则newkey的值则覆盖原来的值
  3. renamenx key newkey  作用:把key修改为新的key,返回值:修改成功返回1,失败就返回0
  4. move key  作用:移动一个key
  5. randomkey  作用:返回一个随机的key
  6. exists key   作用:判断key是否存在,返回值:存在返回1,不存在则返回0
  7. type key    作用:检测key存储值的类型 (类型有:string,link,set,order set,hash)
  8. ttl key  作用:查询key的生命周期(就是看key是否过期),返回值:剩余周期秒数,注意:对于不存在的key或已过期的key/不过期的key都是返回-1,新版本不存在的key会返回-2
  9. expire key(整型)   作用:设置key的生命周期,以秒为单位
  10. pexpire key   作用:设置key的生命周期,以毫秒为单位
  11. pttl key  作用:以毫秒返回生命周期
  12. persist key  作用:把指定key设置为永久有效,redis默认不加设置生命周期的key都是永久有效的

redis字符串操作:

  1. set key value [ex 秒数]/[px 毫秒数][nx][xx] 存储数据,nx:表示key不存在时执行操作,xx:表示key存在时执行操作 注意:如果ex和px同时写,以后面的有效期为准
  2. mset  key...keyn  作用:一次性设置多个键值 例如:meset key1 value1 key2 value2等
  3. get key   作用:获取key的值
  4. mget key.....keyn  作用:一次获取多个key的值
  5. setrange key offset value  作用:把字符串的offset偏移字节,改成value,例如:
  6. redis 127.0.0.1:6379> set name hello
  7. OK
  8. redis 127.0.0.1:6379> setrange name 2 x
  9. (integer) 5
  10. redis 127.0.0.1:6379> get name
  11. "hexlo"
  12. 注意:如果偏移量的长度大于字符串的长度,则该字符串自动使用0x00来进行替补
  13. append key value  作用:把value追加到key的原值上
  14. getrange key start stop  作用:是获取字符串中[start,stop]范围的值,注意:对于字符串的下标,左边是从0开始,右边从-1开始,例如:
  15. redis 127.0.0.1:6379> set name 'lijiangkun'
  16. OK
  17. redis 127.0.0.1:6379> getrange name 0 3
  18. "liji"
  19. redis 127.0.0.1:6379> getrange name 1 -2
  20. "ijiangku"
  21. 当start>=length,则返回空字符串
  22. 当stop>=length,则截取至字符结尾
  23. 如果start所处的位置在stop右边,返回空字符串
  24. getset key newvalue  作用:获取并返回旧值,设置新值
  25. incr key  作用:对指定key的值加1,并返回加1的值
  26. incrby key number  作用:一次可以加4或者多个int
  27. incrbyfloat key floatnumber  作用:可以为key增加浮点数值,4.6,6.8
  28. decr key  作用:在原来的key进行减1
  29. decrby key  作用:在原来的值减1或者4,7,8等

link链表结构

  1. lpush key value  作用:把值插入到链接头部
  2. rpop key  作用:返回并删除链表尾部元素
  3. rpush key/lpop 作用与上面正好相反
  4. lrange key start stop  作用:返回链表中[start,stop]中的元素,原则:左数从0开始,右数从-1开始
  5. lrem key count value  作用:从key链表中删除value的值,count>0从头部删除,count<0从尾部删除
  6. ltrim key start stop  作用:剪切key对应的链接,剪[start,stop]一段,并把该值重新赋给key
  7. lindex key index  作用:返回index索引上的值
  8. llen key  作用:计算链表中元素的个数
  9. rpoplpush source dest  作用:把source的尾部拿出,放在desc的头部

集合set相关

  1. sadd key value1 value2  作用:向集合key中增加元素
  2. srem value1 value2  作用:删除集合中集为value1,value2的元素
  3. spop key  作用:返回并删除集合中key中1个随机元素
  4. srandmember key  作用:返回集合key中,随机的一个元素
  5. sismember key value  作用:判断value是否存在key集合中
  6. smembers key  作用:返回集合中左右元素
  7. scard key  作用:返回集合元素中的元素个数
  8. smove source desc value  作用:把source中的value删除,并添加到desc集合中
  9. sinter key1 key2 key3  作用:求出key1,key2,key3三个集合中的交集,并返回
  10. sinterstore desc key1 key2 key3  作用:求出key1,key2,key3三个集合中的交集,并赋值给desc
  11. suion key1....keyn  作用:求出key1....keyn的并集,并返回
  12. sdiff key1....keyn  作用:求出key1....keyn的差集并返回

order set 有序集合

  1. zadd key source1 value1 souce2 value2..  作用:添加元素,例如:
  2. redis 127.0.0.1:6379> zadd stu 18 lily 19 hmm 20 lilei 21 lilei
  3. (integer) 3
  4. zrem key value1 value2...  作用:删除集合中的元素
  5. zremrangebyscore key min max  作用:按照socre来删除元素,删除socre在[min,max]之间的
  6. redis 127.0.0.1:6379> zremrangebyscore stu 4 10
  7. (integer) 2
  8. redis 127.0.0.1:6379> zrange stu 0 -1
  9. 1) "f"
  10. zremrangebyrank key start stop  作用:按排名删除元素,删除名次在[start,stop]之间的
  11. zrank key member  作用:查询member的排名(升序从0开始)
  12. zrevrank key member  作用:查询member的排名(降序从0开始)
  13. zrange key start stop [withscores]  作用:把集合排序后,返回名次[start,stop]的元素,默认是升序排序[withscores]作用是把socre也打印出来
  14. zrevrange key start stop  作用:把集合降序排序,取[start,stop]之间的元素
  15. zcard key  作用:返回元素的个数
  16. zcount key min max  作用:返回[min,max]区间内的元素数量

hash哈希数据类型

  1. hset key field value  作用:把key中的field域的值设置为value,如果没有field域,直接添加,如果有,则覆盖原field域的值
  2. hmset key field value ....fieldn valuen  作用:设置多个域,对应多个值
  3. hget key field  作用:返回key中的field域的值
  4. hmget key field field1...fieldn  作用:返回key中field,field1...fieldn域的值
  5. hgetall key  作用:返回key中,所有的域和值
  6. hdel key field  作用:删除key中field域
  7. hlen key  作用:返回key中元素的数量
  8. hexists key field  作用:判断key中有没有field的域
  9. hinrby key field value  作用:把key中的field的域增长(增长整型value)
  10. hinrby float jey field value  作用:把key中的field域增长(增长浮点值value)
  11. hkeys key  作用:返回key中所有的field
  12. kvals key  作用:返回key中所有的value

redis中的事务

  1. 1.redis只支持简单的事务
  2. 2.redis和mysql的事务对比

注意:在mutil后面的语句中, 语句出错可能有2种情况

1.语法就有问题,这种,exec时,报错, 所有语句得不到执行

2.语法本身没错,但适用对象有问题. 比如 zadd 操作list对象

Exec之后,会执行正确的语句,并跳过有不适当的语句.

 悲观锁:给某个事务上锁,只能我自己操作

乐观锁:给某个事务上锁,我只要关注有没有人更改过某个事务

启用乐观锁:watch key:作用:监听key,keyn有没有发生过变化,如果发生过变化则事务取消

unwatch  :作用:取消所有watch监听

redis持久化配置:(2中方式aof,rdb)

rdb快照的配置如下:

  1. save 900 1      // 900内,有1条写入,则产生快照
  2. save 300 1000   // 如果300秒内有1000次写入,则产生快照
  3. save 60 10000  // 如果60秒内有10000次写入,则产生快照
  4. 这3个选项都屏蔽,则rdb禁用
  5. stop-writes-on-bgsave-error yes  // 后台备份进程出错时,主进程停不停止写入
  6. rdbcompression yes    // 导出的rdb文件是否压缩
  7. Rdbchecksum   yes //  导入rbd恢复时数据时,要不要检验rdb的完整性
  8. dbfilename dump.rdb  //导出来的rdb文件名
  9. dir ./  //rdb的放置路径

aof的配置:

  1. appendonly no # 是否打开 aof日志功能
  2. appendfsync always   # 每1个命令,都立即同步到aof. 安全,速度慢
  3. appendfsync everysec # 折衷方案,每秒写1次
  4. appendfsync no      # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof.同步频率低,速度快,
  5. no-appendfsync-on-rewrite  yes: # 正在导出rdb快照的过程中,要不要停止同步aof
  6. auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
  7. auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,重写

注意:

1.在dump rdb过程中,aof如果停止同步,会不会丢失?

答: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作

2.aof重写是指什么?

答: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.以解决 aof日志过大的问题.

3.如果rdb文件,和aof文件都存在,优先用谁来恢复数据?

答: aof

4.2种是否可以同时用?

答: 可以,而且推荐这么做

5.恢复时rdb和aof哪个恢复的快?

rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行

 

posted @ 2019-07-15 17:49  李先森博客  阅读(162)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3