一:简介:

redis国内最大的案例---》新浪微博

memcache:是key-value数据库

数据类型:只支持key value数据

过期策略:支持

持久化:不支持(可以通过三方程序)

主从复制:不支持

虚拟内存:不支持

使用场景:可以保存session,存放单一的数据,更加轻量级,效率更高

redis:是key-value数据库

数据类型:支持五种数据类型

过期策略:支持

持久化:支持

主从复制:支持

虚拟内存:不支持

支持五种数据类型,可以保存购物车的商品

二:编译安装redis 3.0.7

本机编译安装redis 3.0.7:

tar xvf redis-3.0.7.tar.gz

cd redis-3.0.7

make PREFIX=/usr/local/redis install

制作启动脚本:

cp utils/redis_init_script /etc/init.d/redisd

chmod  a+x /etc/init.d/redisd

[root@node5 redis-3.0.7]# vim /etc/init.d/redisd 

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem. REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.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 -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

配置文件:

[root@node5 redis-3.0.7]# mkdir /etc/redis

[root@node5 redis-3.0.7]# cp redis.conf  /etc/redis/6379.conf  #对应配置文件/etc/redis/6379.conf

启动测试:

/etc/init.d/redisd  start

[root@node5 redis-3.0.7]# /etc/init.d/redisd  start
Starting Redis server...
65171:M 21 Mar 07:14:15.712 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.0.7 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 65171
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

这是在前台启动的,如果要想在后台启动,需要改一下配置文件:

daemonize no 改为 daemonize yes

然后在重新启动服务即可

通过salt-master批量安装:

1、编辑redis.sls文件:

/etc/salt/states/init

redis-install:
file.managed: #调用file模块的managed方法
- name: /usr/local/src/redis-3.0.7.tar.gz #客户端的文件路径
- source: salt://init/files/redis-3.0.7.tar.gz #在服务器的路径
- user: root
- group: root
- mode: 755 cmd.run: #执行远程命令,使用cmd的run方法
- name: cd /usr/local/src/ && tar xvf redis-3.0.7.tar.gz && cd redis-3.0.7 && make PREFIX=/usr/local/redis install #编译安装
- unless: test -d /usr/local/redis #如果目录存在就不安装了
- require: #依赖
- file: redis-install #编译之前需要依赖redis-install执行成功 redis-config:
file.managed:
- name: /etc/redis/6379.conf #客户端的配置文件路径
- source: salt://init/files/6379.conf #服务器的配置文件路径
- user: root
- group: root
- mode: 644 redis-service:
file.managed:
- name: /etc/init.d/redis
- source: salt://init/files/redis
- user: root
- group: root
- mode: 755 cmd.run:
- name: chkconfig --add redis && chkconfig redis on #设置服务开机启动
- unless: chkconfig --list | grep redis #如果已经在chkconfig --list列表就不执行上一步骤 service.running: #这是服务启动
- name: redis
- enable: True
- watch: #监控的文件
- file: redis-config - require: 服务启动依赖 redis-install和redis-service
- cmd: redis-install
- cmd: redis-service

2、准备文件:

[root@node5 init]# ls files/redis #启动脚本
files/redis
[root@node5 init]# ls files/6379.conf #配置文件
files/6379.conf
[root@node5 init]# ls files/redis-3.0.7.tar.gz #源码包
files/redis-3.0.7.tar.gz

3、执行命令:

[root@node5 init]# salt "node6.a.com" state.sls  init.redis

4、客户端验证:

root@node6 ~]# /etc/init.d/redis  start
Starting Redis server...
[root@node6 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:6379 *:*
LISTEN 0 128 :::6379 :::*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 *:111 *:*
LISTEN 0 128 :::41586 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:46715 *:*
LISTEN 0 128 :::10050 :::*
LISTEN 0 128 *:10050 *:*

salt-master执行命令后后如果报错就根据返回的红色错误信息进行排错

三:redis数据类型格式

3.1、字符串数据格式

SET 设置key,设置的值都是字符串格式string:

192.168.10.205:6379> set key1 value1
OK
192.168.10.205:6379> set key3 value3
OK
192.168.10.205:6379> set key2 value2
OK

GET 获取key的值:

192.168.10.205:6379> get key1
"value1"
192.168.10.205:6379> get key3 #获取指定的key的值
"value3" 不能一次多个key的值:
192.168.10.205:6379> get key1 key2
(error) ERR wrong number of arguments for 'get' command

KEYS 显示所有的key

192.168.10.205:6379> KEYS *
1) "ss"
2) "key2"
3) "list1"
4) "key1"
5) "key4"

EXISTS 判断key是否存在:

192.168.10.205:6379> EXISTS key1
(integer) 1
192.168.10.205:6379> EXISTS key9
(integer) 0 返回1表示存在,0表示不存在

DEL 删除指定的key:

192.168.10.205:6379> del key1 key2 key9
(integer) 2 返回0表示没有指定的key可以删除,返回其他整数表示成功删除的key的数量,没有的key不报错

TYPE 获取key的类型

[root@node5 init]# redis-cli  -h 192.168.10.205  -p 6379

192.168.10.205:6379> set key1 value1 #set key
OK
192.168.10.205:6379> get key1 #获取key的值
"value1"

INFO: 当前服务器的状态

SELECT: 更换数据库,redis默认支持16个数据库,默认在数据库0,可以使用sekect 进行更换数据库

192.168.10.205:6379> SELECT 1
OK
192.168.10.205:6379[1]> set key1 value1
OK
192.168.10.205:6379[1]> KEYS *
1) "key1"

清空整个数据库:FLUSHALL

192.168.10.205:6379[1]> FLUSHALL

APPEND:附加值给value

127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> APPEND key1 cc
(integer) 8
127.0.0.1:6379> get key1
"value1cc"

INCR:如果key不存在就创建并设置value默认为1:

127.0.0.1:6379> INCR  num #如果key不存在就创建并设置默认值为1
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> INCR num #再次执行的值会自增1
(integer) 2
127.0.0.1:6379> get num
"2"

127.0.0.1:6379> get key1 
  "value1cc"
  127.0.0.1:6379> INCR key1 #如果key已经存则报错
  (error) ERR value is not an integer or out of range


DECR:value自减1:

127.0.0.1:6379> get num
"5"
127.0.0.1:6379> DECR num
(integer) 4
127.0.0.1:6379> get num
"4"
127.0.0.1:6379> DECR num
(integer) 3
127.0.0.1:6379> get num
"3"
INCRBY :指定自增value的整数值:
127.0.0.1:6379> get num
"13"
127.0.0.1:6379> INCRBY num 7
(integer) 20
127.0.0.1:6379> get num
"20"
127.0.0.1:6379> INCRBY num 10
(integer) 30
127.0.0.1:6379> get num
"30"
DECRBY:指定自检value的值:
127.0.0.1:6379> get num
"41"
127.0.0.1:6379> DECRBY num 10
(integer) 31
127.0.0.1:6379> get num
"31"
127.0.0.1:6379> DECRBY num 10
(integer) 21
127.0.0.1:6379> get num
"21"

INCRBYFLOAT :设置浮点数的value

127.0.0.1:6379> INCRBYFLOAT num1  0.1
"0.1"
127.0.0.1:6379> INCRBYFLOAT num1 0.1
"0.2"
127.0.0.1:6379> INCRBYFLOAT num1 0.1
"0.3"
127.0.0.1:6379> get num1
"0.3"

MSET 和 MGET:批量创建和获取key

127.0.0.1:6379> MSET k1 v2 k2 v2 k3 v3
OK
127.0.0.1:6379> MGET k1 k2 k3
1) "v2"
2) "v2"
3) "v3"

STRLEN:获取key字符串的长度

127.0.0.1:6379> STRLEN key1
(integer) 8
127.0.0.1:6379> STRLEN k1
(integer) 2
127.0.0.1:6379> get key1
"value1cc"
127.0.0.1:6379> get k1
"v2"

3.2、散列数据类型:

HSET:命令用于为哈希表中的字段赋值,如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作,如果字段已经存在于哈希表中,旧值将被覆盖

HGET:获取key:

127.0.0.1:6379> HSET shouji name iphone
(integer) 1
127.0.0.1:6379> HSET shouji color red
(integer) 1
127.0.0.1:6379> HSET shouji price 4888
(integer) 1 127.0.0.1:6379> HGET shouji name
"iphone"
127.0.0.1:6379> HGET shouji color
"red"
127.0.0.1:6379> HGET shouji price
""

HGETALL:获取key的所有值

127.0.0.1:6379> HGETALL shouji
1) "name"
2) "iphone"
3) "color"
4) "red"
5) "price"
6) ""

HMSET、HMGET、HMGETALL:批量创建、批量获取并获取所有的key:

127.0.0.1:6379> HMSET shouji name xiaoji color baise storge 16G #批量创建
OK 127.0.0.1:6379> HMGET shouji name storge #批量获取
1) "xiaoji"
2) "16G" 127.0.0.1:6379> HGETALL shouji #获取所有的key
1) "name"
2) "xiaoji"
3) "color"
4) "baise"
5) "price"
6) ""
7) "name1"
8) "xiaomio"
9) "storge"
10) "16G"

HDEL:删除指定的key

127.0.0.1:6379> HDEL shouji name #删除值的key
(integer) 1
127.0.0.1:6379> HGETALL shouji #再次查看
1) "color"
2) "baise"
3) "price"
4) ""
5) "name1"
6) "xiaomio"
7) "storge"
8) "16G"

3.3 列表数据类型:不同的数据类型的命令是不通用的,如list与string的命令是不能通用的。出了set命令之外

LPUSH与RPUSH:

127.0.0.1:6379> LPUSH list1 a #从左侧添加
(integer) 1
127.0.0.1:6379> LPUSH list1 b
(integer) 2
127.0.0.1:6379> LPUSH list1 c
(integer) 3
127.0.0.1:6379> RPUSH list 1 #从右侧添加
(integer) 1
127.0.0.1:6379> TYPE list1 #查看类型
list

LLEN:获取列表的长度:

127.0.0.1:6379> LLEN list1
(integer) 3

LPOP 与 RPOP:从左侧和右侧弹出列表中的值:

127.0.0.1:6379> LPOP list1
"c"
127.0.0.1:6379> RPOP list1
"a"

LINDEX:获取最后一个元素:

LRANGE :获取指定范围的元素

127.0.0.1:6379> LINDEX  list1 -1
"b"
127.0.0.1:6379> LINDEX list1 3
"a" 127.0.0.1:6379> LRANGE list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "b"

3.4、集合数据类型的操作:集合默认是无序的,列表是有序的,有序是只按照添加的循序保持位置

SADD:创建并给集合赋值

192.168.10.205:6379> SADD set1 0 99 1
(integer) 3
192.168.10.205:6379> SADD set1 a b c
(integer) 3
SMEMBERS:获取集合中的所有值
192.168.10.205:6379> SMEMBERS set1
1) ""
2) ""
3) ""
4) "c"
5) "b"
6) "a"

SISMEMBER:判断一个值是不是在集合当中,在返回1,否则返回0

192.168.10.205:6379> SISMEMBER set1 a
(integer) 1
192.168.10.205:6379> SISMEMBER set1 p
(integer) 0

SDIFF:求两个集合的差集:

192.168.10.205:6379> SADD jihe1 1 2 3 a
(integer) 4
192.168.10.205:6379> SADD jihe2 1 2 3 b
(integer) 4
192.168.10.205:6379> SDIFF jihe1 jihe2 #差集,求集合1有而集合2没有的值
1) "a"
192.168.10.205:6379> SDIFF jihe2 jihe1
1) "b"

SINTER:求并集,即在多个集合当中共同包含的值,可以是多个集合

192.168.10.205:6379> SADD jihe3 2 3 c
(integer) 3
192.168.10.205:6379> SINTER jihe1 jihe2 jihe3
1) ""
2) ""

SUNION:求并集,即在每个元素都出现的值只统计一次

192.168.10.205:6379> SUNION jihe1 jihe2 jihe3
1) "c"
2) ""
3) "b"
4) ""
5) "a"
6) ""

3.5 有序队列:保持值的位置固定

192.168.10.205:6379> ZADD youxv 1 b 2 a 3 c #通过设置分数创建有序队列,值会安装自己的分数排列位置
(integer) 3
192.168.10.205:6379> ZSCORE youxv a #获取值的分数
""
192.168.10.205:6379> ZSCORE youxv b
""

ZRANGE:根据值的分数排序获取值

192.168.10.205:6379> ZRANGE youxv 0 3 #0和3为取值的下标范围,可以通过LEN统计,超出值的总数不报错
1) "b"
2) "a"
3) "c"

redis安装及数据类型简介(string、list、set、sorted_set、hash)的更多相关文章

  1. 14、redis安装及数据类型

    14.0.服务器配置: 服务器名称 ip地址 controller-node1 172.16.1.90 14.1.什么是redis: 1.redis的特点: (1)redis是一个开源的使用c语言编写 ...

  2. JAVAEE——宜立方商城06:Redis安装、数据类型和持久化方案、Redis集群分析与搭建、实现缓存和同步

    1. 学习计划 1.首页轮播图展示 2.Redis服务器搭建 3.向业务逻辑中添加缓存. 4.使用redis做缓存 5.缓存同步. 2. 首页轮播图动态展示 2.1. 功能分析 根据分类id查询内容列 ...

  3. c#中的数据类型简介(string)

    Sting 字符串 引入话题 字符串是一个引用类型,从string数据类型的代码定义中也可以看出它实现了IEnumerable<char>接口和IEnumerable接口,因此字符串可以看 ...

  4. windows下redis安装及配置

    1.简介: redis是一个高性能的key-value数据库:redis能读的速度为11万次/秒,写的速度是8.1万次/秒 redis支持丰富的数据类型:String, List, Hash(map) ...

  5. Redis进阶实践之四Redis的基本数据类型

    一.引言    今天正式开始了Redis的学习,如果要想学好Redis,必须先学好Redis的数据类型.Redis为什么会比以前的Memchaed等内存缓存软件使用的更频繁,适用范围更广呢?就是因为R ...

  6. redis数据库各种数据类型的增删改查命令

    redis的常用数据操作: redis是key-value的数据结构,每条数据都是一个键值对. 键的类型是字符串并且键不能重复. redis最基本数据类型是string 所以下面的操作可以省略引号&q ...

  7. redis的基本数据类型

    一:redis是一个开源的,使用C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value方式存储的nosql数据库.作为缓存服务器,速度效率都很快,和memcache相似 redis支持 ...

  8. redis中各种数据类型的常用操作方法汇总

    在spring中使用jedisTemplate操作,详见https://www.cnblogs.com/EasonJim/p/7803067.html 一.Redis的五大数据类型 1.String( ...

  9. Redis进阶实践之四Redis的基本数据类型(转载4)

    Redis进阶实践之四Redis的基本数据类型 一.引言 今天正式开始了Redis的学习,如果要想学好Redis,必须先学好Redis的数据类型.Redis为什么会比以前的Memchaed等内存缓存软 ...

随机推荐

  1. http://blog.csdn.net/baimafujinji/article/details/10931621

    书接上文,本文章是该系列的第二篇,按照总纲中给出的框架,本节介绍三个中值定理,包括它们的证明及几何意义.这三个中值定理是高等数学中非常基础的部分,如果读者对于高数的内容已经非常了解,大可跳过此部分.当 ...

  2. s3c2440栈分配情况(fl2440裸机 stack)

    //2440INIT.S ;The location of stacks UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~ SVCStac ...

  3. 解决gnuplot中'Terminal type set to 'unknown'不能显示绘图的问题

    安装gnuplot: sudo apt-get install gnuplot 安装成功后,在终端输入gnuplot,进入gnuplot. 直接进行一个小测试: plot sin(x) 发现不能显示绘 ...

  4. BZOJ 1202: [HNOI2005]狡猾的商人( 差分约束 )

    好像很多人用并查集写的... 前缀和, 则 sumt - sums-1 = v, 拆成2条 : sumt ≤ sums-1 + v, sums-1 ≤ sumt - v 就是一个差分约束, 建图跑SP ...

  5. spring Annotation 笔记2.1

    使用注解替代xml 在前几章的笔记基础上添加使用注解的形式 1.配置applicationContext 添加context schema <?xml version="1.0&quo ...

  6. viminfo: 无效的启动字符

    当自己进入一个用户,使用vi打开一个文件时,出现以下情况: [gexd@localhost ~]$ vi test.c E575: viminfo: 无效的启动字符 位于行: int main() . ...

  7. Linux和windows下的shutdown命令

    Linux下的shutdown命令 shutdown [options] [time] [wall] options: --help 获取帮助 -h 关机 -r 重启 -c 取消 -k 仅显示警告信息 ...

  8. java学习之内省

    反射加内省解决耦合问题 package com.gh.introspector; /** * JavaBean * @author ganhang * */ public class Dog { pr ...

  9. vs提示“当前不会命中断点,源代码与原始版本不同”的一种解决办法

    将出问题的cpp文件用notepad打开,另存为‘unicode’类型,覆盖源文件即可

  10. Gradle 1.12 翻译——第十四章. 教程 - 杂七杂八

    有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...