redis 基本操作

1. 什么是Redis

Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server,该软件使用C语言编写,
Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
Redis特点:
Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。
Redis应用场景:
因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。
将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。

 

进入redis

redis-cli --raw

redis五种数据类型、及操作 (针对key) ,value都是字符串

  • string 字符串
  • list 列表
  • hash 哈希
  • set 集合
  • sorted sets 有序集合

string

#设置
set key value       例子:set test "Just do a test!"
#  获取
get key             例子:get test
# key是唯一的,不能用同一个key 不然就会覆盖

查看过期时间

# -1 表示永久     -2 表示 不存在
ttl key             例子:ttl test

设置过期时间

# 给已经存在 key,设置过期时间
expire key seconds   例子:expire test 12

# 设置 key的同时,设置过期时间
set key value ex seconds  例子:set test1 "ABC" ex 8

追加

# 给已有的value,再添加新的值
append key value            例子:append test1 "123"

 

设置 / 获取 多个

#设置多个 string
mset key value  key value..      例子:mset a1 "AAA111" b2 "BBBA222"

#获取多个 string
mget key key key ...       例子:mget a1 b2

key 操作 (针对所有的 key)

# 查看所有的key
 keys *           例子: keys *

# 删除
 del key        例子:del b1

# 查看key是否存在  ,存在返回 1, 不存在返回 0
 exists key     例子: exists b1

# 查看key类型
 type key           例子:type a1
运算
set num 1    # 自动识别,字符串里面的 整数 例子:
# +1
incr key        例 (incr num)    例子:set c3 12345
                                    incr c3
# -1
decr key        例 (decr num)    例子:decr c3

# +整数
incrby key increment              例 (incrby num 50)  例子:incrby c3 6

# -整数
decrby key increment              例 (decrby num 50)   例子:decrby c3 6

list

  • 设置
# lpush  左添加  (栈), 后面来的 放第一个
lpush  key  value      例子: lpush l1 "abc"

#rpush  右添加   (队列) 后面来的 放最后一个
rpush  key  value     例子: rpush l1 "123"
  • 查看
# lrange  key  start  stop  例子: lrange l1 0 -1
例  查看所有
lrange key 0 -1
  • 获得list的元素个数
# llen key         例子:llen l1
  • 查看位于lidex 位置上的元素
# lindex  key index    例子:lindex l1 0
  • 删除
  • lpop 删除左边第一个 (第一个)
#rpush test2 d a b c u w y  a b c y a b t c w t
lpop key        例子:lpop test2
  • rpop 删除右边第一个 (最后个)
rpop key        例子:rpop test2
  • lrem 删除指定value 及 数量
rpush test_list a b c w a b c a b c w
# lrem key count value   例子:

#count > 0 从左往右 删除数量为count的value   (从上往下)
例 : lrem test_list 2 a   例子:lrem test 1 c

#count = 0 删除所有的 value
例 : lrem test_list 0 a    例子:lrem test2 0 c

#count < 0 从右往左 删除数量为count的value    (从下往上)
例 : lrem test_list -1 b   例子:lrange test2 -1 a

hash (类似与字典)

  • 设置
#  hset key field value   例子:hset user name xlong
例  user = { name:jianeng}
hset user name jianeng
  • 获取
#  hget key field     例子:hget user name
  • 删除
#  hdel key field     例子:hdel user name
  • 设置多个
#hmset key field value [field value]   例子:hmset user1 name xlong age 26 sex nan
例  user{name:jianeng , age:18, sex:male }
hmset user name jianeng age 18 sex male
  • 获取多个
# hmget key field field   例子:hget user1 name age sex
  • 获取全部field value (类似与字典里的 items)
# hgetall key     例子:hgetall user1
例
hgetall user
  • 获取所有的field (类似与字典里的 keys)
# hkeys key   例子:hkeys user1
  • 获取所有的value (类似与字典里的 values)
# hvals key   例子:hvals user1
  • 获取field的个数
# hlen key     例子:hlen user1

set(集合)

  • 设置
# sadd key value [value]    (唯一,无序)   例子:sadd tests1 q w e 1 2 3 
                                                 sadd tests2 w w w w 6 6 6 6(最终只有w 和6)
  • 获取
# smembers key    例子:smembers tests1
  • 删除
  • srem指定删除
# srem key member       例子:srem tests1 2
  • spop随机删除
# spop  key            例子:spop tests1
  • 移动一个集合的值到另一个集合
# smove oldkey newkey member    例子:smove tests1 tests2 3
  • 判断集合存在某个值
# sismember key value             例子:sismember tests2 w
  • 交集
# sinter key1 key2 ..           例子:sinter tests1 tests2

把 key1 key2的交集合并到newkey

# sinterstore newkey key1 key2         例子:sinterstore tests3 tests1 tests2
  • 并集
# sunion key1 key2 ...         例子:sunion tests1 tests2

把 key1 key2的并集合并到newkey

# sunionstore newkey key1 key2         例子:sunionstore tests4 tests1 tests2
  • 差集
# sdiff key1 key2          例子:sdiff tests1 tests2

把 key1 key2的差集合并到newkey

# sdiffstore newkey key1 key2        例子:sdiffstore tests5 tests1 tests2
  • 获取集合个数
# scard key     例子:scard tests5
  • 随机返回一个
# srandmember key        例子:srandmember tests4

zset(有序集合)

  • 设置
# zadd key score member         例子: zadd testz1 1 a1a2a3
                                   zadd testz2 2 b1b2b3
                                   zadd testz3 3 c1c2c3
例
zadd  my_zset 1 'one'
zadd  my_zset 2 'two'
zadd  my_zset 3 'three'
zadd  my_zset 4 'four'
zadd  my_zset 5 'five'
  • 获取
  • zrange正序
#zrange key start stop    (withscores)     例子:zrange testz1 0 -1
zrange my_zset 0 -1
  • zrevrange倒序
#zrevrange key start stop         例子:zrevrange testz2 0 -1
zrevrange my_zset 0 -1
  • 删除
#zrem key member            例子:zrem testz1 a1a2a3
zrem my_zset two
  • 索引
  • zrank正序
# zrank key member            例子:zrank testz2 b1b2b3
例
zrank my_zset three
  • zrevrank反序
# zrevrank key member         例子:zrevrank testz2 b1b2b3
例
zrevrank my_zset three
  • zscore : 查看score值
# zscore key member         例子:zscore testz2 b1b2b3
例
zscore my_zset2 a
  • zincrby : 修改score值
#  zincrby key  score member          例子:zincrby testz2 2 b1b2b3
  • zcard 查看有序集合元素数
# zcard key             例子:zcard testz2
例
zcard my_zset
  • zrangebyscore 返回集合中 score 在给定区间的元素
#返回了 score 在 2~3 区间的元素          例子:zrangebyscore  testz2 21 23
zrangebyscore my_zset 2 3 withscores
  • zcount 返回集合中 score 在给定区间的数量
# zcount key min max             例子:zcount testz2 21 23
例
zcount my_zset 2 3
  • zremrangebyrank : 删除集合中排名在给定区间的元素
# zrange my_zset 0 -1 withscores        例子:zremrangebyrank  testz2 21 23
zremrangebyrank my_zset 1 3
  • zremrangebyscore : 删除集合中 score 在给定区间的元素
# zrange my_zset 0 -1 withscores            例子:zremrangebyscore testz1 0 2
zremrangebyscore my_zset 1 2

 

Redis发布和订阅

#发布 
publish 频道 消息           例子:publish qq1 "qq.com"


# 订阅
subscribe 频道             例子:subscribe qq1 "hello"