安装 tar zxvf redis-2.4.16.tar.gz make src/redis-server #Redis服务器的daemon启动程序 src/redis-cli #Redis命令行操作工具。或者通过telnet进行纯文本协议操作 src/redis-benchmark #Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能 src/redis-cli shutdown #关闭操作 密码:requirepass test123 (配置文件中) # requirepass foobared去掉注释,foobared改为自己的密码 验证:redis 127.0.0.1:6379> auth test123 redis-server redis.conf //指定配置文件启动redis服务 redis-cli -a test123 //指定密码登录客户端 -------------------------------------------------------------【远程连接】 修改配置 bind 0.0.0.0 #redis-cli -h 192.168.1.50 -p 6379 -------------------------------------------------------------【中文乱码】 src/redis-cli --raw ------------------------------------------------------------- ------------------------------------------------------------- ------------------------------------------------------------- ================================================================================================【去除waring】 # WARNING overcommit_memory is set to 0! echo "vm.overcommit_memory=1" >> /etc/sysctl.conf sysctl -p --------------------------------------------------- # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. echo 511 > /proc/sys/net/core/somaxconn --------------------------------------------------- # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. echo never > /sys/kernel/mm/transparent_hugepage/enabled --------------------------------------------------- # WARNING: 32 bit instance detected but no memory limit set 修改配置文件 redis.conf,将 maxmemory 设置为 maxmemory 1024000000 #分配256M内存 --------------------------------------------------- 为了调整内存分配策略,需要配置/proc/sys/vm/overcommit_memory 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存 默认为0,如果内存情况比较紧张的话,设为1: echo 1 > /proc/sys/vm/overcommit_memory ---------------------------------------------------- ===========redis.conf参数======================================================================= daemonize: #是否以后台daemon方式运行 bind: #指定Redis可接收请求的IP地址,不设置将处理所有请求,建议生产环境中设置 pidfile: #pid文件位置 port: #监听的端口号 timeout: #请求超时时间,单位为秒,超时后会关闭连接 loglevel: #log信息级别 logfile: #log文件位置,默认打印在命令行终端的窗口上 databases: #开启数据库的数量,可以使用 SELECT 命令来切换数据库。默认使用的数据库是 0 save * *: #保存快照的频率,第一个*表示多长时间(秒级),第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。60秒之内有10000个keys发生变化时 rdbcompression: #在进行镜像备份时,是否使用压缩 dbfilename: #数据快照文件名(只是文件名,不包括目录) dir: #数据快照的保存目录(这个是目录) appendonly: #是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。 appendfsync: #appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步) maxclients 128: #限制同时连接的客户数量。当连接数超过这个值时,redis 将不再接收其他连接请求,客户端尝试连接时将收到 error 信息 daemonize yes #守护进程模式,是指在UNIX或其他多任务操作系统中在后台执行的电脑程序,并不会接受电脑用户的直接操控。 save 60 1000 #当时间间隔超过60秒,或存储超过1000条记录时,进行持久化。 maxmemory 256mb #分配256MB内存,一定要设定maxmemmory,且配置大小要小于物理内存,留有足够的内存供系统使用。某期间数据暴涨,导致内存吃紧,SWAP加剧,直接宕机。 Redis 过期策略是:定期删除+惰性删除。最终内存淘汰机制。 定期删除,指的是 Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。 惰性删除。获取某个 key 的时候,Redis 会检查一下 ,如果过期了此时就会删除,不会给你返回任何东西。 ================主从配置======================================================================= slaveof #在redis-slave上配置master的ip port,即可。 masterauth test123 #验证 ==================操作========================================================================= ---------------------------------------string--------------------------------------- set name bkk@163.com get name setnx name bkk@163.com //返回0(存在), 1(不存在)成功插入 setex haircolor 10 red //设置10秒有效期,10秒之后返回nil(空)(set name miaoerduo ex 10)//设置name的过期时间为10秒 setrange name 2 @126 //从下标为2开始替换,返回替换后字符长度。返回结果bk@1263.com mset key1 bkk1 key2 bkk2 //设置多个键值对 msetnx key3 bkk3 key2 bkk2 //有一个不成功都不成功 getset key1 bkk0 //返回旧值(bkk1),设置新值 getrange name 0 5 //返回下标0-5的字符串bkk@16 mget key1 key2 key3 //批量获取 incr key //自增某个key并返回新值,不存在就设置key并返回1 incrby key 5 //以5自增(-5自减) decr key //自减 decrby key 5 //以5自减(-5自增) append name sss //为name追加sss strlen name //返回值的长度 set name miaoerduo nx //NX:(if Not eXist)只有键key不存在的时候才会设置key的值--XX:只有键key存在的时候才会设置key的值 ---------------------------------------hashes----------------------------------------适合存对象,占内存少 hset user:001 name bkk hget user:001 name hsetnx user:001 name bkk hmset user:002 name bkk age 20 hmget user:002 name age hincrby user:002 age 5 hexists user:002 age //判断是否存在,返回0(不存在), 1(存在) hlen user:002 //返回key数量 hdel user:002 age //删除某个key hkeys user:002 //返回所有key的名称 hvals user:002 //返回所有value的值 hgetall user:002 //返回所有key和value --------------------------------------lists--------------------------------------------简单的消息队列,从 list 头怼进去,从 list 尾巴那里弄出来 lpush mylist hello //从头压入栈 lpush mylist world lrange mylist 0 -1 //从头取到尾(栈),第一个为world,第二个为hello rpush mylist1 hello //从尾压入栈 rpush mylist1 world lrange mylist1 0 -1 //从头取到尾(队列),第一个为hello,第二个为world lpush list one lpush list two lrange list 0 -1 //先出two再出one linsert list before one three //在one之前插入一个three,头的方向为前 lpush list1 one lpush list1 two lpush list1 three lset list1 1 four //把下标值换掉,把two换成four lrem list1 1 one //删除一个value为one的,(从key对应list中删除n个和value相同的元素,N=0全部,N<0从尾部删除) ltrim list1 1 2 //保留下标值,1 -1(第一个到结尾) lpop list1 //从头弹出一个元素(弹出删除)并返回 rpop list1 //从尾弹出一个元素(弹出删除)并返回 rpoplpush list1 list2 //从list1尾部弹出元素插到list2的头 lindex list1 0 //取下标值为0的value llen list1 //返回长度 --------------------------------------sets--------------------------------------------两个人的粉丝列表整一个交集,看看俩人的共同好友 sadd myset one smembers myset //查看所有成员 srem myset one //删除元素 成功返回1 spop myset //随机弹出一个元素(删除) sdiff myset1 myset2 //差集(前面的为标准) sdiffstore myset3 myset1 myset2 //差集存到myset3中 sinter myset1 myset2 //交集 sinterstore myset3 myset1 myset2//交集存到myset3中 sunion myset1 myset2 //并集 sunionstore myset3 myset1 myset2//并集存到myset3中 smove myset1 myset2 one //把myset1中的one移动到myset2 scard myset1 //返回集合元素个数 sismember myset one //判断one是不是在myset中,1是0不是 srandmember myset //随机返回一个元素,不删除 --------------------------------sorted sets(zset)--------------------------------------------(值相同,保存最后一个序列号)是排序的 set zadd myzset 1 one zrange myzset 0 -1 withscores //输出全部(带序号) zrem myzset one //删除one元素 zincrby myzset 1 one //序号1自增-1自减 zrank myzset one //按序号从小到大排并返回one下标值 zrangebyscore myzset 2 4 withscores //按序号取2-4 zcount myzset 2 4 //2-4序号之间元素个数 zcard myzset //所有元素个数 zremrangebyrank myzset 1 1 //删除索引区间元素 zremrangebyscore myzset 1 2 //删除序号区间元素 =============键值命令=============================================================================== keys * //返回所有键 exists name //判断key是否存在(1存在0不存在) del name //删除key(1成功0不成功)redis-cli -a password keys "*" | xargs redis-cli -a password del (liunx下删除多个key) expire name 10 //设置过期时间(10秒)(1成功0失败) ttl name //获取有效时长(-1过期) select 0 //选择第0个数据库(0-15共16个数据库)(默认进入0数据库) move name 1 //移动key-value到1数据库 persist name //移除key的过期时间(永远不过期) randomkey //随机返回一个key rename name name_new //重命名 type name //返回key的类型 =============服务器命令============================================================================== ping //测试连接是否存活(返回PONG代表活着) echo “bkk” //输出“bkk” qiut //退出客户端 dbsize //返回当前数据库key的数量 info //信息 config get * //返回相关配置的值 flushdb //清空当前数据库 flushall //清空所有数据库中所有key =============事务管理================================================================================ multi //开启事务 set age 10 set age 20 exec //提交事务 discard(事务回滚) get age //age最终为20