Redis使用总结

Posted 元哥二号

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis使用总结相关的知识,希望对你有一定的参考价值。

启动redis服务端

redis-server.exe redis.windows.conf

redis-cli命令行远程连接redis服务

redis-cli -h host -p port -a password

host:远程redis服务器host

port:远程redis服务端口

password:远程redis服务密码

redis-cli -h 172.17.212.22 -p 6379 -a fasoft

将redis注册为系统服务

可以使用如下命令,来安装、卸载、启动和停止redis服务。如果将redis安装目录添加到系统path下,可省去redis.windows.conf

redis-server --service-install redis.windows.conf //安装服务redis-server --service-start //启动服务redis-server --service-stop //停止服务redis-server --service-uninstall //卸载服务

安装服务后,默认是没有启动的,启动后,可在服务下看到此服务。

查看Redis内存使用情况

在终端输入./redis-cli,打开Redis客户端,输入info命令。

其中:

# Memory
used_memory:1104176
used_memory_human:1.05M
used_memory_rss:1066272
used_memory_rss_human:1.02M
used_memory_peak:1144160
used_memory_peak_human:1.09M
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:2000000000
maxmemory_human:1.86G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:0.97
mem_allocator:jemalloc-3.6.0

used_memory:1104176 已使用的内存,1.05M

maxmemory:2000000000 设置的最大内存,1.86G

设置Redis最大占用内存

Redis设置最大占用内存,打开redis配置文件,找到如下段落,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。修改如下所示:

# maxmemory <bytes>
maxmemory 751619276
#maxmemory 2G

由于本机自带内存只有1G,一般推荐Redis设置内存为最大物理内存的四分之三,所以设置0.75G,换成byte是751619276.

Redis之maxmemory解读

https://www.cnblogs.com/aquester/p/10907301.html

redis.conf中的maxmemory定义REdis可用最大物理内存,有多种书写方式,以下均为合法:

maxmemory 1048576
maxmemory 1048576B
maxmemory 1000KB
maxmemory 100MB
maxmemory 1GB
maxmemory 1000K
maxmemory 100M
maxmemory 1G

没有带单位尾巴的为字节数,以B结尾的表示相应的大小。但需要注意KB和K、MB和M、GB和G是不同的,如1K表示1000字节,而1KB则为1024字节。如果maxmemory值为0,表示不做限制。

Redis使用超过设置的最大值

如果Redis的使用超过了设置的最大值会怎样?我们来改一改上面的配置,故意把最大值设为1个byte试试。

# output buffers (but this is not needed if the policy is 'noeviction').
#
# maxmemory <bytes>
maxmemory 1

打开debug模式下的页面,提示错误:OOM command not allowed when used memory > ‘maxmemory’.

设置了maxmemory的选项,redis内存使用达到上限。可以通过设置LRU算法来删除部分key,释放空间。默认是按照过期时间的,如果set时候没有加上过期时间就会导致数据写满maxmemory。

如果不设置maxmemory或者设置为0,64位系统不限制内存,32位系统最多使用3GB内存。

LRU是Least Recently Used 近期最少使用算法。

  • volatile-lru -> 根据LRU算法生成的过期时间来删除。

  • allkeys-lru -> 根据LRU算法删除任何key。

  • volatile-random -> 根据过期设置来随机删除key。

  • allkeys->random -> 无差别随机删。

  • volatile-ttl -> 根据最近过期时间来删除(辅以TTL)

  • noeviction -> 谁也不删,直接在写操作时返回错误。

如果设置了maxmemory,一般都要设置过期策略。打开Redis的配置文件有如下描述,Redis有六种过期策略:

# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key accordingly to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations

那么打开配置文件,添加如下一行,使用volatile-lru的过期策略:

maxmemory-policy volatile-lru

保存文件退出,重启redis服务。

Redis命令参考

http://doc.redisfans.com/string/set.html

中文乱码

windows 下 redis 设置存入中文时会出现乱码,解决步骤如下:

1、运行输入 CHCP 65001

2、重启cmd 进入redis 安装目录 输入 redis-cli --raw 即可。

设置密码

1.通过命令动态调整密码-临时设置

CONFIG SET 命令可以动态地调整 Redis 服务器的配置而无须重启,重启后失效CONFIG SET requirepass 123456       //将密码设置为123456CONFIG SET requirepass ""       //清除密码AUTH 123456        //输入密码进行认证

2.通过配置文件设置密码-长久设置

在配置文件 redis.conf 中增加一行代码requirepass 123456

bind 172.17.212.22

将密码123456设置到配置文件中,redis启动时加载该文件,即可启用密码

redis常用命令

cmd访问redis
redis-cli.exe -h 127.0.0.1 -p 6379

key
  keys * 获取所有的key
  select 0 选择第一个库
  move myString 1 将当前的数据库key移动到某个数据库,目标库有,则不能移动
  flush db     清除指定库
  randomkey     随机key
  type key     类型
   
  set key1 value1 设置key
  get key1   获取key
  mset key1 value1 key2 value2 key3 value3
  mget key1 key2 key3
  del key1   删除key
  exists key     判断是否存在key
  expire key 10   10过期
  pexpire key 1000 毫秒
  persist key     删除过期时间

string
  set name cxx
  get name
  getrange name 0 -1       字符串分段
  getset name new_cxx       设置值,返回旧值
  mset key1 key2           批量设置
  mget key1 key2           批量获取
  setnx key value           不存在就插入(not exists)
  setex key time value     过期时间(expire)
  setrange key index value 从index开始替换value
  incr age       递增
  incrby age 10   递增
  decr age       递减
  decrby age 10   递减
  incrbyfloat     增减浮点数
  append         追加
  strlen         长度
  getbit/setbit/bitcount/bitop   位操作
   
hash
  hset myhash name cxx
  hget myhash name
  hmset myhash name cxx age 25 note "i am notes"
  hmget myhash name age note  
  hgetall myhash               获取所有的
  hexists myhash name         是否存在
  hsetnx myhash score 100     设置不存在的
  hincrby myhash id 1         递增
  hdel myhash name             删除
  hkeys myhash                 只取key
  hvals myhash                 只取value
  hlen myhash                 长度

list
  lpush mylist a b c 左插入
  rpush mylist x y z 右插入
  lrange mylist 0 -1 数据集合
  lpop mylist 弹出元素
  rpop mylist 弹出元素
  llen mylist 长度
  lrem mylist count value 删除
  lindex mylist 2         指定索引的值
  lset mylist 2 n         索引设值
  ltrim mylist 0 4         删除key
  linsert mylist before a 插入
  linsert mylist after a   插入
  rpoplpush list list2     转移列表的数据
   
set
  sadd myset redis
  smembers myset       数据集合
  srem myset set1         删除
  sismember myset set1 判断元素是否在集合中
  scard key_name       个数
  sdiff | sinter | sunion 操作:集合间运算:差集 | 交集 | 并集
  srandmember         随机获取集合中的元素
  spop                 从集合中弹出一个元素
   
zset
  zadd zset 1 one
  zadd zset 2 two
  zadd zset 3 three
  zincrby zset 1 one             增长分数
  zscore zset two                 获取分数
  zrange zset 0 -1 withscores     范围值
  zrangebyscore zset 10 25 withscores 指定范围的值
  zrangebyscore zset 10 25 withscores limit 1 2 分页
  Zrevrangebyscore zset 10 25 withscores 指定范围的值
  zcard zset 元素数量
  Zcount zset 获得指定分数范围内的元素个数
  Zrem zset one two       删除一个或多个元素
  Zremrangebyrank zset 0 1 按照排名范围删除元素
  Zremrangebyscore zset 0 1 按照分数范围删除元素
  Zrank zset 0 -1   分数最小的元素排名为0
  Zrevrank zset 0 -1 分数最大的元素排名为0
  Zinterstore
  zunionstore rank:last_week 7 rank:20150323 rank:20150324 rank:20150325 weights 1 1 1 1 1 1 1
   
   
排序:
  sort mylist 排序
  sort mylist alpha desc limit 0 2 字母排序
  sort list by it:* desc           by命令
  sort list by it:* desc get it:* get参数
  sort list by it:* desc get it:* store sorc:result sort命令之store参数:表示把sort查询的结果集保存起来

订阅与发布
  订阅频道:subscribe chat1
  发布消息:publish chat1 "hell0 ni hao"
  查看频道:pubsub channels
  查看某个频道的订阅者数量: pubsub numsub chat1
  退订指定频道:unsubscrible chat1   , punsubscribe java.*
  订阅一组频道:psubscribe java.*
   
redis事务
    隔离性,原子性,
    步骤:开始事务,执行命令,提交事务
            multi //开启事务
            sadd myset a b c
            sadd myset e f g
            lpush mylist aa bb cc
            lpush mylist dd ff gg

服务器管理
  dump.rdb
  appendonly.aof
  //BgRewriteAof 异步执行一个aop(appendOnly file)文件重写
  会创建当前一个AOF文件体积的优化版本
   
  //BgSave 后台异步保存数据到磁盘,会在当前目录下创建文件dump.rdb
  //save同步保存数据到磁盘,会阻塞主进程,别的客户端无法连接
   
  //client kill 关闭客户端连接
  //client list 列出所有的客户端
   
  //给客户端设置一个名称
    client setname myclient1
    client getname
     
    config get port
    //configRewrite 对redis的配置文件进行改写
   
rdb
save 900 1
save 300 10
save 60 10000

aop备份处理
appendonly yes 开启持久化
appendfsync everysec 每秒备份一次

命令:
bgsave异步保存数据到磁盘(快照保存)
lastsave返回上次成功保存到磁盘的unix的时间戳
shutdown同步保存到服务器并关闭redis服务器
bgrewriteaof文件压缩处理(命令)
   



以上是关于Redis使用总结的主要内容,如果未能解决你的问题,请参考以下文章

python常用代码片段总结

BootStrap有用代码片段(持续总结)

BootStrap实用代码片段(持续总结)

回归 | js实用代码片段的封装与总结(持续更新中...)

ELK性能优化实战总结:java私塾初级模拟银源代码

查看发票组代码后的总结和有感