20、Redis

Redis

特点

  • Nosql中的键值对非关系型数据库是分布式缓存中间件
  • 高性能读取
  • 高可用
  • 存数据,做缓存
  • 单线程

分布式缓存

  • 提升读取速度性能
  • 分布式缓存
  • 为数据库降低查询压力
  • 跨服务器缓存
  • 内存式缓存

Redis安装

  • https://redis.io 下载 并上传到服务器
  • 解压进入解压目录
  • yum install gcc-c++
  • make
  • 完成后出现 It's a good idea to run 'make test'
  • make install
  • mkdir /usr/local/redis -p
  • cp redis.conf /usr/local/redis
  • cd /usr/local/redis
  • mkdir workspace
  • 修改 redis.conf
    • bind 0.0.0.0
    • daemonize yes 启动后是在前台运行no 还是后台运行yes
    • dir /usr/local/redis/workspace 工作空间 必须指名
    • requirepass 123456 密码
  • 进入当前文件下面的utils目录找到redis_init_script脚本文件
  • cp redis_init_script /etc/init.d/
  • cd /etc/init.d/ 修改脚本文件
  • chmod 777 redis_init_script
  • ./redis_init_script start 注意服务器需要配置端口开放
  • ./redis_init_script stop 关闭redis
  • chkconfig redis_init_script on 设置开机自启
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

#chkconfig: 22345 10 90
#description: Start and Stop redis

REDISPORT=6379 # 启动端口号
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/redis.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -a "123456" -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

redis 命令

  • redis-cli 进入连接
  • auth 123456 输入密码
  • del name 打印(integer) 1 表示删除成功
  • ttl name 打印(integer) -1 表示永不过期 -2 表示过期
  • expire name 30 表示30秒后过期
  • keys * 查看所有键(生产上不要用) keys a* 以a开头 keys *a 以a结尾
  • type key 查看key的类型
  • flushdb 清空当前库
  • flushall 清空所有库
  • clear 清空控制台
  • redis-cli -a 123456 ping 返回pong 检查redis是否开启
  • select 1 redis默认16个库 切换到库1 每个数据库数据不共享 默认使用0

redis 数据类型

  • string

    • set name zhangsan [key:name value:zhangsan]
    • setnx name lisi 如果存在key不会设置成功
    • get name 打印zhangsan
    • set name zhangsan ex 10 设置key-value 有效期10秒
    • strlen name 查看字符串长度
    • append name 123 会在name后面拼接
    • mset key1 aa key2 bb 设置多个key-value msetnx同理
    • mget key1 key2 获取多个值
    • incr age 累加 先set age 12 打印(integer) 13
    • decr age 累减 打印(integer) 12
    • incrby age 10 打印(integer) 22 设置累加的值
    • decrby age 10 打印(integer) 12 设置累减的值
    • getrange name 0 -1 截取字符串 start end 打印"zhangsan123" getrange name 0 7 打印"zhangsan"
    • setrange name 1 abc 用abc替换值下标从1开始的3个值 查看name 为 "zabcgsan123"
  • hash

    • hset user name zhangsan
    • hget user name 打印"zhangsan"
    • hmset user name zhangsan age 18 hmset 设置多个key-value
    • hmget user name age 可以查询name和age两个值
    • hgetall user 打印所有key-value
    • hlen user 查看user里面包含多少属性
    • hkey user 打印user里面所有key
    • hvals user 打印user里面所有value
    • hincrby user age 3 打印(integer) 21
    • hincrbyfloat user age 2.2 打印"23.2"
    • hexists user age 查看属性是否存在 1存在 0返回
    • hdel user name 删除属性
  • list(允许元素重复)

    • lpush list1 a b c d e 从左边开始放
    • lrange list1 0 -1 打印 "a","b","c","d","e"
    • rpush list2 a b c d e 从右边开始放 从e开始插入
    • del list1 删除
  • set(不允许元素重复)

    • sadd set a b c a a 只会放入a b c三个
    • smembers set 打印a b c 查看set中的元素
    • scard set 查看set中元素数量 打印3
    • sismember set a 判断a是否在set集合中 1在 0不在
    • srem set a 删除元素
    • spop set 出栈(默认一个)
    • spop set 2 出栈(把两个出栈)
    • srandmember set 2 从set中随机获取两个元素
    • smove set1 set2 a 把a从set1移动到set2中
    • sdiff set1 set2 区差集(set1中有 set2中没有)打印 1 2 (如果set1中有元素1、2、3、4、5。set2 有3、4、5、6、7)
    • sinter set1 set2 取交集 打印3、4、5
    • sunion set1 set2 取并集
  • zset 有序的set

    • zadd zset 10 a 20 b 30 c 40 d 50 e 插入set
    • zrange zset 0 -1 查看所有元素
    • zrange zset 0 -1 withscores 查看所有元素
    • zadd zset 25 bc 35 cd 查看元素 a、b、bc、c、cd、d、e
    • zrank zset c 获取元素c在zset中的下标
    • zscore zset c 获取元素c所占分数
    • zcard 查看zset中元素数量
    • zcount zset 20 40 获取分数在20到40之间的元素包含边界 不包含边界:(20 (40 大于20 小于40
    • zrangebyscore zset 20 40 获取分数在20到40之间的元素包含边界
    • zrangebyscore zset 20 40 limit 1 10 从下标1开始后10项
    • zrem zset a b 删除

    常用命令网站 http://redisdoc.com/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容