Redis基本使用学习

Redis基本使用

简介

基于内存、分布式、可选持久化的键值对(Key-Value)存储数据库

存储值类型:

string

list

set

zset

hash

优势:

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
安装

Linux环境安装redis:

yum install redis -y

默认安装路径为/usr/bin

启动

先使用 redis-server 启动redis服务器端,加上 ‘&’ ,可以使得redis以后台程序方式运行

[root@tencent ~]# redis-server
19451:C 28 Dec 10:52:28.433 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.12 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 19451
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

19451:M 28 Dec 10:52:28.434 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
19451:M 28 Dec 10:52:28.434 # Server started, Redis version 3.2.12
19451:M 28 Dec 10:52:28.434 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
19451:M 28 Dec 10:52:28.434 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
19451:M 28 Dec 10:52:28.434 * The server is now ready to accept connections on port 637

再启动redis客户端

[root@tencent ~]# redis-cli
127.0.0.1:6379> 
显示中文乱码问题

在启动redis客户端时在后面添加--raw即可

redis-cli --raw
基本操作
string
  • 添加修改数据

    #添加一个值
    set key value
    #添加多个值
    mset key1 value1 key2 value2
    
  • 获取数据

    #获取一个
    get key
    #获取多个
    mget key1 key2
    
  • 删除

    #删除值
    del key
    
  • 获取字符串的长度

    strlen key
    
  • 追加信息到原字符串之后

    append key value
    
  • incr、incrby、incrbyfloat

    #数值+1,每次只增加1
    incr key
    #指定数值增加10,只能增加整数值
    incrby key 10
    #指定数值增加10.5,可以增加整数或小数
    incrbyfloat key 10.5
    
  • decr、decrby

    #数值-1,每次只能减1
    decr key
    #指定数值减去10,只能减去整数值
    decrby key 10
    
  • 设置数据有效期

    #为指定的key设置值及其过期时间,如果key已经存在,setex命令将会替换旧的值,过了有效期后值置为nil
    #格式: setex key seconds values
    #设置code=1且有效期等于5s的数据
    setex code 5 1
    #查看有效时期
    ttl code
    
  • 查看字段

    keys *
    
哈希(hash)

hash是一个string类型的field(字段)和value(值)的映射表,hash特别适合用于存储对象。

hash中每个hash可以存储2的32次方减1个键值对(40多亿)

  • hset和hmset

    增加修改数据

    格式:hset key field value

    格式:hmset key field value

    #添加一个hash数据
    hset user name "张三"
    #会覆盖name字段值
    hmset user name "lisi" name "wangwu"
    #添加多个字段
    hmset user age 20 hight 175
    
  • hget和hmget

    查看字段

    格式:hget key field

    格式:hmget key field

    #查看一个字段值
    hget user name
    #查看多个字段值
    hmget user name age hight
    
  • hlen和hexists

    查看hash表中字段的数量

    格式:hlen key

    #查看user表中字段的数量
    hlen user
    

    hash表中是否存在指定的字段

    格式:hexists key field

    #user表中是否存在gender字段,返回0表示不存在,1为存在
    hexists user gender
    
  • hkeys和hvals

    查看hash表中的字段和值

    格式:hkeys key

    格式:hvals key

    #查看user表中的所有字段
    hkeys user
    #查看user表中的所有值
    hvals user
    

    格式:hgetall key

    #获取user表中的所有字段和值
    hgetall user
    
  • hincrby和hincrbyfloat

    格式:hincrby key field increment

    格式:hincrbyfloat key field increment

    #指定数值增加10,只能增加整数值
    hincrby user age 10
    #指定数值增加10.5,可以增加整数或小数
    hincrbyfloat user age 10.5
    
  • hsetnx命令

    hsetnx命令用于为哈希表中不存在的字段赋值

    #格式:hsetnx key field value
    hsetnx user gender nan
    
列表

Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部或者尾部

  • 添加数据

    格式:lpush key value1 value2rpush key value1 value2

    #从左边添加一个或多个数据
    lpush list1 1 2 3 4 5 6
    #从尾部添加一个或多个数据
    rpush list2 1 2 3 4 5 6
    
  • 查看数据

    格式:lrange key start stop

    格式:lindex key index

    格式:llen key

    #通过索引范围查看数据
    lrange list2 0 -1
    #查看指定索引位置的数据
    lindex list2 0
    #查看list的长度
    llen list2
    
  • 获取并删除数据

    格式:lpop keyrpop key

  • 规定时间获取数据并删除数据

    格式:blpop key secondsblpop key seconds

  • lrem删除命令

    格式:lrem key count value

    count的值可以是以下几种:

    ​ count>0:从表头开始向表尾搜索,移除与VALUE相等的元素,数量为count。

    ​ count<0:从表尾开始向表头搜索,移除与VALUE相等的元素,数量为count的绝对值。

    ​ count=0:移除表中所有与VALUE相等的值。

集合(set)

Redis的set是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,Redis中集合是通过哈希表实现的

  • 添加数据

    格式:sadd key member [member ...]

    #添加集合成员
    sadd city beijing shanghai xian tianjin wuhan zhengzhou
    
  • 获取数据

    格式:smembers key

    smembers city 
    
  • 删除成员

    格式:srem key member [member ...]

    srem city beijing
    
  • 查看集合成员数量

    格式:scard key

  • 判断是否是集合中的成员

    格式:sismember key member

    sismember city beijing
    
  • 随机获取指定数量的成员数据

    格式:srandmember key count

    #随机获取2个成员数据
    srandmember city 2
    
  • 随机获取集合中的成员数据并删除数据

    格式:spop key

    spop city
    
  • 交集,并集,差集

    格式:sinter key1 [key2] 交集

    格式:sunion key1 [key2] 并集

    格式:sdiff key1 [key2] 差集

    127.0.0.1:6379> sadd set1 1 2 3
    (integer) 3
    127.0.0.1:6379> smembers set1
    1) "1"
    2) "2"
    3) "3"
    127.0.0.1:6379> sadd set2 2 4
    (integer) 2
    127.0.0.1:6379> smembers set2
    1) "2"
    2) "4"
    127.0.0.1:6379> sinter set1 set2
    1) "2"
    127.0.0.1:6379> sunion set1 set2
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    127.0.0.1:6379> sdiff set1 set2
    1) "1"
    2) "3"
    127.0.0.1:6379> sdiff set2 set1
    1) "4"
    
  • 将两个交集,并集,差集的结果存储到指定集合中

    格式:sinterstore destination key1 [key2] 交集

    格式:sunionstore destination key1 [key2] 并集

    格式:sdiffstore destination key1 [key2] 差集

    127.0.0.1:6379> sinterstore set3 set1 set2
    (integer) 1
    127.0.0.1:6379> smembers set3
    1) "2"
    127.0.0.1:6379> sunionstore set4 set1 set3
    (integer) 3
    127.0.0.1:6379> smembers set4
    1) "1"
    2) "2"
    3) "3"
    127.0.0.1:6379> sdiffstore set5 set1 set2
    (integer) 2
    127.0.0.1:6379> smembers set5
    1) "1"
    2) "3"
    
  • 将指定元素从原集合移动到目标集合中

    格式:smove source destination member

    #将集合成员1从集合set5中移动到集合set6中
    smove set5 set6 1
    
有序集合

Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数却可以重复

  • 添加数据

    格式:zadd key score1 member1 [score2 member2...]

    #添加数据
    zadd zset1 10 ls
    #添加多个数据
    zadd zset1 10 ww 30 zs 25 zl
    
  • 获取有序集合中的数据

    格式:zrange key start stop [withscores]zrevrange key start stop [withscores]

    zrange和zrevrange互为逆序

    127.0.0.1:6379> zrange zset1 0 -1
    1) "ls"
    2) "ww"
    3) "zl"
    4) "zs"
    127.0.0.1:6379> zrevrange zset1 0 -1
    1) "zs"
    2) "zl"
    3) "ww"
    4) "ls"
    127.0.0.1:6379> zrevrange zset1 0 -1 withscores
    1) "zs"
    2) "30"
    3) "zl"
    4) "25"
    5) "ww"
    6) "10"
    7) "ls"
    8) "10"
    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "ls"
    2) "10"
    3) "ww"
    4) "10"
    5) "zl"
    6) "25"
    7) "zs"
    8) "30"
    
  • 删除数据

    格式:zrem key member [member]

    127.0.0.1:6379> zrem zset1 zl
    (integer) 1
    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "ls"
    2) "10"
    3) "ww"
    4) "10"
    5) "zs"
    6) "30"
    
  • 按条件查询

    格式:zrangebyscore key min max [withscores] [LIMIT offset count]

    格式:zrevrangebyscore key min max [withscores] [LIMIT offset count]

    备注:min和max查询条件范围,指向的是有序集合排序的数值

  • 按条件删除

    格式: zremrangebyrank key start stop

    格式: zremrangebyscore key min max

    备注: min和max 查询条件范围,指向的是有序集合排序的数值;start 和 stop作用于索引

  • 获取有序集合中的数量

    格式: zcard key

    格式: zcount key min max

  • 有序集合的交集和并集

    格式: zinterstore destination numkeys key [key ...]

    格式: zunionstore destination numkeys key [key ...]

    备注: 类似无序集合的操作, numkeys 含义是表示后面有几个集合进行操作

  • 获取数据对应的索引

    格式: zrank key member

    格式: zrevrank key member

  • score值的获取与修改

    格式: zscore key member

    格式: zincrby key increment member

Redis key基本指令
删除key
del key
判断key是否存在
exists key
获取key所存储的值的类型
type key
设置key的有效期
#设置过期时间,以秒计
expire key seconds
# 设置过期时间,以毫秒计
pexpire key milliseconds
# 设置过期时间的时间戳,以秒计
expireat key timestamp
# 设置过期时间的时间戳,以毫秒计
pexpireat key milli-timestamp
# 移除 key 的过期时间,key 将持久保持
persist key
查看剩余的过期时间
  • ttl key:以秒为单位,返回给定key的剩余生存时间
  • pttl key:以毫秒为单位,返回给定key的剩余生存时间
查找所有符合给定模式的key

匹配规则:

  • *匹配0或多个任意字符
  • ?匹配一个任意字符
  • []匹配一个指定的字符
127.0.0.1:6379> keys z*
1) "zset1"
127.0.0.1:6379> keys *
1) "set2"
2) "set3"
3) "city"
4) "zset1"
5) "set1"
6) "user"
7) "set4"
8) "set5"
9) "set"
修改key的名称
# 修改key的名称,新的名称存在,则值就会被覆盖
rename key newkey
# 修改key的名称,仅当 newkey 不存在时,将 key 改名为 newkey
renamenx key newkey
切换数据库
select index
数据移动
#将数据移动到其他库中
move key db
数据清理
  • 查看数据量:dbsize
  • 清理当前数据库数据:flushdb
  • 清理所有数据:flushall

查看剩余的过期时间

  • ttl key:以秒为单位,返回给定key的剩余生存时间
  • pttl key:以毫秒为单位,返回给定key的剩余生存时间
查找所有符合给定模式的key

匹配规则:

  • *匹配0或多个任意字符
  • ?匹配一个任意字符
  • []匹配一个指定的字符
127.0.0.1:6379> keys z*
1) "zset1"
127.0.0.1:6379> keys *
1) "set2"
2) "set3"
3) "city"
4) "zset1"
5) "set1"
6) "user"
7) "set4"
8) "set5"
9) "set"
修改key的名称
# 修改key的名称,新的名称存在,则值就会被覆盖
rename key newkey
# 修改key的名称,仅当 newkey 不存在时,将 key 改名为 newkey
renamenx key newkey
切换数据库
select index
数据移动
#将数据移动到其他库中
move key db
数据清理
  • 查看数据量:dbsize
  • 清理当前数据库数据:flushdb
  • 清理所有数据:flushall
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值