redis基础

redis简介

REmote DIctionary Server(Redis) 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件

redis安装

yum安装

#前提得配置好阿里云yum源,epel源
#查看是否有redis包
yum list redis
#安装redis
yum install redis -y
#安装好,启动redis
systemctl start redis


### 源码编译安装 ```linux 1.下载redis源码 wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2.解压缩 tar -zxf redis-4.0.10.tar.gz 3.切换redis源码目录 cd redis-4.0.10 4.编译源文件 make 5.编译好后,src/目录下有编译好的redis指令 6.make install 安装到指定目录,默认在/usr/local/bin

## redis配置
新建一个配置文件redis-6379.conf,新建/data/6379/目录,在配置文件写入如下内容
```linux
# redis-6379.conf配置如下:

port 6379                     
daemonize yes                                    
pidfile /data/6379/redis.pid
loglevel notice            
logfile "/data/6379/redis.log"
dir /data/6379                    
protected-mode yes                
requirepass   haohaio

redis的一些执行文件的作用

./redis-benchmark  # 用于进行redis性能测试的工具
./redis-check-dump  # 用于修复出问题的dump.rdb文件
./redis-cli  # redis的客户端
./redis-server  # redis的服务端
./redis-check-aof  # 用于修复出问题的AOF文件
./redis-sentinel  # 用于集群管理


redis启动

redis-server是redis的服务端,切换到redis-server的目录,执行以下命令启动redis服务端

./redis-server /redis-6379.conf


使用以下命令启动客户端

# 执行客户端命令即可进入
./redis-cli
# 或指定参数
redis-cli  -p 6380  -a  zhuanqq
    -p  设置redis链接的端口
    -a  显示的填写密码
    --raw 使用原始格式

# 测试是否连接上redis
127.0.0.1:6379 > ping
返回pong代表连接上了

# 用set来设置key、value
127.0.0.1:6379 > set name "tiger"
OK
# get获取name的值
127.0.0.1:6379 > get name
"tiger"


redis数据结构

redis是一种高级的key-value结构,其中key只能是strings,而value支持5种数据类型

  • 字符串(strings)
  • 散列(hashes)
  • 列表(lists)
  • 集合(sets)
  • 有序集合(sorted sets)

strings

  • set   设置key
  • get 获取key
  • append 追加string
  • mset 设置多个键值对
  • mget 获取多个键值对
  • del 删除key
  • incr 递增+1
  • decr 递减-1
127.0.0.1:6379> set name 'robin'  # 设置name的值为robin
OK
127.0.0.1:6379> get name  # 获取name的值
"robin"
127.0.0.1:6379> set name 'sophia'  # 重设name的值
OK
127.0.0.1:6379> get name
"sophia"
127.0.0.1:6379> append name ' is a girl'  # 给name追加值
(integer) 16
127.0.0.1:6379> get name
"sophia is a girl"
127.0.0.1:6379> mset user1 'robin' user2 'sophia'  # 设置多个值
OK
127.0.0.1:6379> get user1
"robin"
127.0.0.1:6379> get user2
"sophia"
127.0.0.1:6379> mget user1 user2  # 获取多个值
1) "robin"
2) "sophia"
127.0.0.1:6379> keys *  # 获取所有key
1) "123"
2) "lst"
3) "user2"
4) "(1,2)"
5) "name"
6) "user1"
7) "age"
8) "num"
9) "user"


lists

  • lpush 从列表左边插入
  • rpush 从列表右边插入
  • lrange 获取一定长度的元素 lrange key start stop
  • ltrim 截取一定长度列表
  • lpop 删除最左边一个元素
  • rpop 删除最右边一个元素
  • lpushx/rpushx key存在则添加值,不存在不处理
127.0.0.1:6379> lpush l1 'robin' 'yousa' 'mandy'
(integer) 3
127.0.0.1:6379> llen l1  # 查看l1的长度
(integer) 3
127.0.0.1:6379> lrange l1 0 -1 # 查看l1的所有元素
1) "mandy"
2) "yousa"
3) "robin"
127.0.0.1:6379> rpush l1 'hanser'
(integer) 4
127.0.0.1:6379> lrange l1 0 -1
1) "mandy"
2) "yousa"
3) "robin"
4) "hanser"
127.0.0.1:6379> lpushx l2 'hh'
(integer) 0
127.0.0.1:6379> ltrim l1 0 2  # 切片,顾头也顾尾
OK
127.0.0.1:6379> lrange l1 0 -1
1) "mandy"
2) "yousa"
3) "robin"
127.0.0.1:6379> lpop l1  # 删除左边
"mandy"
127.0.0.1:6379> lrange l1 0 -1
1) "yousa"
2) "robin"
127.0.0.1:6379> rpop l1  # 删除右边
"robin"
127.0.0.1:6379> lrange l1 0 -1
1) "yousa"



set

sadd/srem 添加/删除 元素
sismember 判断是否为set的一个元素
smembers 返回集合所有的成员
sdiff 返回一个集合和其他集合的差异
sinter 返回几个集合的交集
sunion 返回几个集合的并集

127.0.0.1:6379> sadd girls sara sophia mandy  # 创建集合girls,添加三个元素
(integer) 3
127.0.0.1:6379> smembers girls  # 查看集合所有元素
1) "sophia"
2) "mandy"
3) "sara"
127.0.0.1:6379> srem girls sara  # 删除元素
(integer) 1
127.0.0.1:6379> smembers girls
1) "sophia"
2) "mandy"
127.0.0.1:6379> sadd ups mandy hanser yousa  # 添加另一个集合
(integer) 3
127.0.0.1:6379> sdiff girls ups  # 返回girls有而ups没有的元素
1) "sophia"
127.0.0.1:6379> sdiff ups girls  # 返回ups有而girls没有的元素
1) "yousa"
2) "hanser"
127.0.0.1:6379> sinter girls ups  # 返回两个集合都有(交集)的元素
1) "mandy"
127.0.0.1:6379> sunion girls ups  # 返回两个集合的并集(去重)
1) "yousa"
2) "sophia"
3) "hanser"
4) "mandy"



hash

hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。

hashes存的是字符串和字符串值之间的映射,hash特别适合用于存储对象,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。

Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。

  • hset 设置散列值
  • hget 获取散列值
  • hgetall获取在哈希表中指定 key 的所有字段和值
  • hmset 设置多对散列值
  • hmget 获取多对散列值
  • hsetnx 如果散列已经存在,则不设置(防止覆盖key)
  • hkeys 返回所有keys
  • hvals 返回所有values
  • hlen 返回散列包含域(field)的数量
  • hdel 删除散列指定的域(field)
  • hexists 判断是否存在
127.0.0.1:6379> hset news title "today's news title"  # 新建一个hash news,并设置news的title
(integer) 1
127.0.0.1:6379> hset news content "news content"   # 设置news的content
(integer) 1
127.0.0.1:6379> hget news title  # 获取news的title
"today's news title"
127.0.0.1:6379> hget news content
"news content"
127.0.0.1:6379> hmget news title content  # 获取多个值
1) "today's news title"
2) "news content"
127.0.0.1:6379> hmset news2 title "second news title" content "second content"
OK
127.0.0.1:6379> hmget news2 title content
1) "second news title"
2) "second content"
127.0.0.1:6379> hkeys news  # 获取news的所有key
1) "title"
2) "content"
127.0.0.1:6379> hlen news  # 获取news的长度
(integer) 2
127.0.0.1:6379> hdel news title  # 删除title
(integer) 1
127.0.0.1:6379> hlen news  
(integer) 1
127.0.0.1:6379> hexists news title  # 判断news的title是否存在,存在返回1,不存在返回0
(integer) 0

posted @ 2019-04-04 17:31  乘月归  阅读(199)  评论(0编辑  收藏  举报